Portal SAMP
[Anti-cheats] EVO Anti-Cheat [OpenMP] - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Anti-cheats (https://portalsamp.com/forumdisplay.php?fid=51)
+---- Tópico: [Anti-cheats] EVO Anti-Cheat [OpenMP] (/showthread.php?tid=4999)



EVO Anti-Cheat [OpenMP] - Dr Editor - 26/04/2025

[Imagem: Sem-T-tulo-1.png]
EVO Anti-Cheat 1.0 [OpenMP]



Sobre:

Trata-se de um novo anti-cheat server-side desenvolvido para OpenMP, cujo objetivo é ter segurança e controle absoluto sobre a data (info) do jogador.
Atualmente está em constante desenvolvimento, tendo ainda algumas incoerências em certas situações, porém já possui dezenas de detecções e atualmente está sendo utilizado para testes em um servidor PvP tendo ótimo feedback
por parte da gestão do projeto.


Configuração de detecção:

Por se tratar de um anti-cheat de codigo fonte fechado, possui um arquivo de configuração externo que pode ser recarregado a qualquer momento.
O arquivo de configuração possui atualmente pouco mais de 200 entradas de configuração, onde é possível parametrizar exatamente como deve ser feito a detecção de cada cheat que permita uma configuração externa.

Abaixo consta algumas das entradas de configuração para melhor entendimento:
Código:
cbug_speed_limit=
cbug_alert_count=
auto_cbug_speed_limit=
auto_cbug_alert_count=
armour_delay_check=
armour_alert_count=
health_delay_check=
health_alert_count=
driveby_delay_check=
fakekill_kill_flood_sequence_time=
fakekill_death_flood_sequence_time=
fakekill_kill_flood_alert_count=
fakekill_death_flood_alert_count=
fastrun_distance=
fastrun_distance_alert_count=
incoming_connection_alert_count=
incoming_connection_sequence_delay=
interior_delay_check=
interior_alert_count=
virtual_world_delay_check=
virtual_world_alert_count=
special_action_delay_check=
money_delay_check=


Segurança:

Qualquer informação no SA:MP pode ser facilmente manipulada, o que bagunça toda uma economia e a gameplay dos demais.
Atualmente, com o uso deste anti-cheat, é possível resgatar informações corretas da data de jogadores que utilizam cheat para manipulá-las como vida, colete, armas, munição, objetos atacados etc, de forma que mesmo manipulando
as informações, não seja possível mantê-las durante o salvamento dos dados, criando assim uma camada extra de validação nas informações e garantindo a proteção dos dados de cada jogador contra qualquer tipo de alteração externa.


Controle de configuração:
  • Defina em que momento o anti-cheat deve iniciar para determinado jogador
  • Defina em que momento o anti-cheat deve parar para determinado jogador
  • Defina em que momento o anti-cheat deve pausar ou retomar a verificação de um cheat específico para determinado jogador
  • Altere e recarregue as configurações do anti-cheat a qualquer momento sem necessidade de reiniciar o servidor ou recarregar o filterscript

Compatibilidade de SO:

Todas as dependências do anti-cheat podem ser obtidas tanto para Linux quanto para Windows.
O anti-cheat é um filterscript, então pode ser facilmente implementado como qualquer outro script externo.


Compatibilidade de modo de jogo:

Por se tratar de um anti-cheat robusto e com dezenas de detecções, foi criado uma configuração externa para ajustar as detecções conforme o modo de jogo ou gosto.
Em um servidor roleplay, por exemplo, as detecções podem ser mais sensíveis, enquanto para um PvP é necessário tornar menos sensível detecções relacionadas à armas ou race menos sensível detecções para veículos.
Você configura completamente cada detecção como preferir.


Abordagem de detecção:

O servidor é totalmente independente para decidir o que fazer sobre a detecção.
Para isto, é fornecido uma biblioteca (evo_ac.inc) contendo todas as informações necessárias para aplicar as punições e configurações.
Diferente da maioria dos anti-cheats, este gera uma chamada individual na respectiva callback informando maiores detalhes sobre a detecção.

Algumas callbacks:
Código:
AC_OnInvalidCameraCrasher(playerid, cam_mode)
AC_OnPlayerAmmo(playerid, old_ammo, new_ammo, weaponid)
AC_OnPlayerArmour(playerid, Float:old_armour, Float:new_armour)
AC_OnPlayerCBug(playerid, speed)
AC_OnPlayerAutoCBug(playerid, speed)
AC_OnPlayerCheckpoint(playerid)
AC_OnPlayerDamageFlood(playerid, damagedid, weaponid, damage_count)


Controle de dano:

Com o controle de dano do Evo Anti-Cheat, mesmo usando cheat, a vida do jogador diminui e caso não diminua (através de bloqueios de RPC) não há problema, pois a vida e colete do jogador é trabalhada de forma unilateral, ou seja, a vida e colete do cliente (jogador) é só mais uma informação visual assim como o dinheiro. Então, por exemplo, se o jogador estiver com vida zerada no servidor, porém na tela dele a vida estiver cheia em decorrência do bloqueio de RPC, será considerado cheat e chamará as funções respectivas ao cheat.

Também é possível configurar o dano em diferentes situações:
  • Partes do corpo
    - Para danos personalizados em 7 regiões do corpo
  • Alcance
    - Bloqueia automaticamente disparos realizados fora do alcance definido
  • Bloqueio de dano em partes do corpo
    - Para bloqueios de dano personalizados em 7 regiões do corpo
  • Permissão/bloqueio para dar/receber dano
    - Para permitir e/ou bloquear dano dado ou recebido para jogadores

Detecções (até o momento):
  • Armour
  • C-Bug
  • Auto C-Bug
  • Car Fly
  • Dialog Spoof
  • Drive-By
  • Fake Kill/Death (flood)
  • Fast Run
  • GodMode
  • Health
  • Connection Flood
  • Interior
  • Special Action (All)
  • Money
  • Multi Connection
  • No Fall Damage
  • Ping
  • Player Checkpoint
  • Player Position (Fly, Airbreak, Teleport)
  • Race Checkpoint
  • Skin
  • Vehicle Fast Enter/Exit
  • Vehicle Health
  • Vehicle Mod (Invalid, Cheat)
  • Vehicle Speed
  • Virtual World
  • Weapon (Forbbiden, Invalid, Cheat)
  • Ammo (Infinite, Invalid, Cheat)
  • Rapid Fire
  • Free Cam
  • Player Velocity (troll)
  • Vehicle Velocity (troll)
  • Fake AFK
  • Fake Lag
  • Invisible
  • Damage (Invalid, Flood)
  • Silent Aim
  • Pro Aim
  • Quick Vehicle Change
  • Anti Kick
  • Invalid Bullet Crasher
  • Invalid Damage Crasher
  • Invalid Camera Crasher
  • NOP (TogglePlayerSpectating, TogglePlayerControllable, RemovePlayerFromVehicle, SpawnPlayer, SetPlayerPos)
  • Attached Objects (Full protection)

Recursos necessários:

  1. [Plugin] GVar
  2. [Plugin] Sscanf
  3. [Include] Foreach

Funções adicionadas até então:

Configuração do anti-cheat:
Código:
stock EAC_InitPlayerAC(playerid) // Inicia o anti-cheat para o jogador
stock EAC_StopPlayerAC(playerid) // Para o anti-cheat para o jogador
stock EAC_IsActivePlayerAC(playerid) // Verifica se o anti-cheat está ativo (iniciado) para o jogador
stock EAC_PausePlayerAC(playerid, bool:pause, cheatid = -1) // Pausa determinada proteção para o jogador
stock EAC_IsPausedPlayerAC(playerid, cheatid) // Retorna se determinada proteção está pausada para o jogador
stock EAC_GetCheatNameAC(cheatid) // Retorna o nome do cheat com base no index
stock EAC_ReloadSettings(const file[]) // Caso altere o arquivo de configuração, é possível recarregar a configuração em tempo real sem reiniciar ou recarregar o filterscript

Controle de dano:
Código:
stock EWD_SetPlayerWeaponRange(playerid, weaponid, Float:range) // Altera o alcance de determinada arma para o jogador
stock Float:EWD_GetPlayerWeaponRange(playerid, weaponid) // Retorna o alcance de determinada arma do jogador
stock EWD_SetPlayerWeaponDamage(playerid, weaponid, Float:amount) // Altera o dano de determinada arma para o jogador
stock Float:EWD_GetPlayerWeaponDamage(playerid, weaponid) // Retorna o dano de determinada arma do jogador
stock EWD_SetPlayerBodyHitDamage(playerid, weaponid, bodypart, Float:amount) // Altera o dano de determinada arma e região do corpo para o jogador
stock Float:EWD_GetPlayerBodyHitDamage(playerid, weaponid, bodypart) // Retorna o dano de determinada arma e região do corpo do jogador
stock EWD_BlockPlayerBodyHitDamage(playerid, weaponid, bodypart, Float:amount) // Altera o bloqueio de dano de determinada arma e região do corpo para o jogador
stock Float:EWD_GetPlayerBlockedBodyHitDamage(playerid, weaponid, bodypart) // Retorna o bloqueio de dano de determinada arma e região do corpo do jogador
stock EWD_BlockPlayerArmourHitDamage(playerid, weaponid, bodypart, Float:amount) // Altera o bloqueio de dano de determinada arma, exclusivamente caso utilize colete, para o jogador
stock Float:EWD_GetPlayerBlockedArmourHitDamage(playerid, weaponid, bodypart) // Retorna o bloqueio de dano de determinada arma, exclusivamente caso utilize colete, do jogador
stock EWD_TogglePlayerGiveBulletDamage(playerid, bool:toggle) // Habilita/Desabilita o dano enviado do jogador
stock EWD_IsPlayerGivingBulletDamage(playerid) // Retorna se o dano enviado do jogador está habilitado ou não
stock EWD_TogglePlayerTakeBulletDamage(playerid, bool:toggle) // Habilita/Desabilita o dano recebido do jogador
stock EWD_IsPlayerTakingBulletDamage(playerid) // Retorna se o dano recebido do jogador está habilitado ou não
stock EWD_EnablePlayerFriendlyFire(playerid, bool:enable) // Habilita/Desabilita o dano enviado a jogadores do mesmo time

Funções adicionais:
Código:
stock EAC_SetPlayerGodMode(playerid, bool:active) // Ativa/Desativa modo Deus do jogador
stock EAC_IsPlayerInGodMode(playerid) // Retorna se o jogador está ou não em modo Deus
stock EAC_SetPlayerMoney(playerid, money) // Define o dinheiro do jogador
stock EAC_UpdatePlayerMoney(playerid) // Apenas atualiza na tela o dinheiro do jogador com base na memória do anti-cheat
stock EAC_GetPlayerFreeAttachedObjectSlot(playerid) // Retorna o primeiro slot livre para objetos atacados no corpo do jogador
stock EAC_GetPlayerAttachedObjectModelIndex(playerid, modelid) // Retorna o index do objeto atacado no corpo do jogador com base no modelo do objeto
stock EAC_GetPlayerAttachedObjectModel(playerid, index) // Retorna o modelo do objeto atacado no corpo do jogador com base no index e memória do anti-cheat (e não na data do cliente)
stock EAC_ApplyPlayerAttachedObjects(playerid) // Aplica os objetos atacados no corpo do jogador com base na memória do anti-cheat
stock EAC_GiveAllPlayerWeapons(playerid, delay = 0) // Reseta as armas do jogador e fornece as que estão na memória do anti-cheat, podendo aplicar com delay
stock EAC_GetPlayerWeaponData(playerid, slot, &weapons, &ammo) // Retorna as armas do jogador, com base na memória do anti-cheat (e não na data do cliente)
stock EAC_SetPlayerWeapon(playerid, weaponid, ammo) // Define uma arma especifica para o jogador
stock EAC_IsValidPlayerWeapon(playerid, weaponid) // Retorna se determinada arma do jogador foi concebida com base no servidor (e não data do cliente)


Servidor em que está sendo testado:

Caso tenham interesse em conferir o anti-cheat e sua efetividade, basta acessar o servidor abaixo:

Os Aposented PvP104.234.224.87:7777


Maiores informações:

Caso tenha interesse, me chame via Discord: .eduardoac