Viper Anti-Cheat
Introdução:
Apresento a vocês o mais novo cliente anti-cheat composto pelo Viper Launcher AC e Viper Server AC.
Este é diferente de todos até então desenvolvidos e possui uma performance muito superior.
Agora o servidor do jogo não precisa utilizar a biblioteca sockets, pois a comunicação é intermediada por um servidor executado a parte.
O servidor é multi-threaded, logo os pacotes são recebidos de forma assíncrona, proporcionando uma comunicação mais saudável.
A proposta é um launcher que divulga os servidores que o utilizam para que os jogadores possam ter acesso fácil a eles simplesmente através de um clique e com uma garantia maior de que sua jogabilidade não será afetada por consequência de hackers.
Como funciona:
- Servidor:
Basicamente, quando executar o servidor na VPS automaticamente vai liberar o acesso a determinada porta e autorizar as conexões dos clientes.
A comunicação entre o servidor e o cliente acontece de forma criptografada, de forma que mesmo que os dados sejam interceptados, não seja possível manipulá-los.
- Cliente:
Ao executar o cliente, o mesmo irá baixar a lista de servidores que possuem o anti-cheat.
Após selecionar o servidor, basta escolher um nome e clicar em "PLAY" para que o launcher inicie sua comunicação com o servidor e execute o jogo automaticamente.
O cliente efetua análises periódicamente e envia ao servidor de forma criptografada.
- Servidor SA:MP:
O servidor utiliza uma biblioteca que apenas facilita a interpretação dos resultados do anti-cheat.
Na pasta scriptfiles deve haver uma pasta chamada "VAC" e dentro dela deve haver a pasta "Connected" (são criadas automaticamente pelo Viper Server).
"Connected" - Contém os jogadores conectados com o launcher, contendo a análise do jogador. Ao desconectar o arquivo é removido automaticamente.
Na biblioteca que gerencia as análises, haverão as seguintes funções:
VAC_IsPlayerActive(playerid)
VAC_GetPlayerFile(playerid)
VAC_GetData(const filename[], >a_instances, suspect_processes[], suspect_files[], suspect_folders[], suspect_inj_dll[], suspect_inj_dll_hash[])
VAC_SaveData(const ip[], const filename[])
Manutenção:
- Cliente:
Apesar de ser leve, seu código-fonte não possui nativamente nenhum padrão de dados para análise. Não é necessário atualizar o banco de dados, visto que o mesmo baixa estes dados diretamente do servidor e a partir daí usa como base estas informações para análise.
- Servidor:
O servidor também não necessita muita manutenção, visto que ele possui um arquivo de configuração que serve para enviar aos clientes usar como banco de dados para análise e o mesmo pode ser alterado em tempo real, sem necessidade de reiniciá-lo.
Este arquivo é enviado toda vez que uma nova conexão é solicitada.
Segurança e privacidade:
O cliente deve ser inserido dentro da pasta do jogo, pois ele é um launcher e o jogo será executado através dele.
Pra maior segurança, o cliente nunca efetua quaisquer análises fora da pasta em que foi designado para operar. Única busca fora do ambiente é na lista de processos, exceto isso não existem outros mecanismos de busca.
O cliente armazena apenas informações referente a suspeitas. Nunca fará envio de arquivos, apenas NOMES de arquivos, pastas ou processos.
Configurações e análise:
O arquivo de configuração do servidor está em constante desenvolvimento, mas até então o que se encontra possível:
- Configurar algumas propriedades do cliente (remotamente)
- Tempo de verificação / comunicação
- Bloquear processos suspeitos
- Bloquear início de nome (cheat*)
- Bloquear final de nome (*engine)
- Bloquear entre o nome (*engine*)
- Bloquear nome extato (cheatengine)
- Autorizar determinadas versões do SA:MP
- Autoriza versões do SA:MP baseados no hash MD5 do executável
- Autorizar o uso de arquivos específicos (mods, data...) baseado em hash MD5
- Autoriza um arquivo utilizando nome (mod.*), extensão (*.cs) ou ambos (mod.cs) juntamente com o hash MD5 do mesmo
- Bloquear arquivos ou extensões de arquivos (revertido com a permissão acima)
- Bloqueia um arquivo através do nome (mod.*), extensão (*.cs) ou ambos (mod.cs)
- Bloquear pastas
- Bloqueia uma pasta através do nome (cleo)
- Bloquear arquivos ou extensões de arquivos injetados no jogo
- Bloqueia um arquivo injetado através do nome (mod.*), extensão (*.dll) ou ambos (mod.dll)
- Bloquear arquivos ou extensões de arquivos injetados no jogo (baseado em hash MD5)
- Bloqueia um arquivo injetado através do hash MD5 do arquivo (os arquivos injetados podem ter seus nomes alterados)
Compatibilidade:
Atualmente não é possível agregar usuários de dispositivos móveis ou sistema operacional diferente de Windows.
Atualizações futuras:
- Verificação de data modificada
- Verificação de arquivos requeridos por parte do servidor (como data modificada ou mods necessários para pode jogar)
- Proteção contra caixa de areia
- Proteção contra bypass do cliente
Instalação:
- Cliente:
- Copie o programa para a pasta do gta que contenha o SA:MP instalado
- Execute o programa
- Selecione o servidor
- Digite seu nickname
- Clique em "PLAY" e o jogo abrirá diretamente no servidor selecionado
- Crie uma pasta com qualquer nome dentro do servidor do SA:MP
- Copie o Viper Server e seus arquivos dentro desta pasta
- Execute o servidor
Servidor:
Cliente:
Em conexão:
Conclusão:
O projeto ainda está em desenvolvimento, porém os softwares já estão rodando normalmente, bem como a biblioteca para o SA:MP.
Precisa ainda lapidar a conexão e a segurança para garantir a integridade dos programas e da comunicação entre cliente e servidor.
Possivelmente vou divulgar um servidor teste e uma compilação do V-Launcher para testes.
Faça mais, ganhe mais e poupe tempo!
________________________________________
Soluções personalizadas para SA:MP
Discord: .eduardoac | Eduardo AC#3140