Portal SAMP
[Projeto Pronto] Viper Anti-Cheat - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: Comunidade (https://portalsamp.com/forumdisplay.php?fid=15)
+--- Fórum: Portfólio (https://portalsamp.com/forumdisplay.php?fid=48)
+---- Fórum: Projetos Completos (https://portalsamp.com/forumdisplay.php?fid=49)
+---- Tópico: [Projeto Pronto] Viper Anti-Cheat (/showthread.php?tid=4804)



Viper Anti-Cheat - Dr Editor - 14/06/2024

[Imagem: HPtXhvA.png]
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[], &gta_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.

Tanto o servidor quanto o launcher possuem atualizações obrigatórias. É necessário baixar e atualizar os arquivos para poder seguir com a execução. (novo)


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:
  • Verificar as propriedades para garantir a segurança e se alguma propriedade for diferente, o cliente será automaticamente desconectado
  1. Permite autorizar determinada versão do anti-cheat
  2. Permite autorizar determinado hash MD5 do cliente anti-cheat
  • Bloquear processos suspeitos
  1. Bloquear início de nome (cheat*)
  2. Bloquear final de nome (*engine)
  3. Bloquear entre o nome (*engine*)
  4. Bloquear nome extato (cheatengine)
  • Autorizar versões do SA:MP
  1. Autoriza versões do SA:MP baseados no hash MD5 do executável
  • Autorizar arquivos (mods, data...) baseado em hash MD5
  1. 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 autorização de arquivos)
  1. Bloqueia um arquivo através do nome (mod.*), extensão (*.cs) ou ambos (mod.cs)
  • Bloquear pastas
  1. Bloqueia uma pasta através do nome (cleo)
  • Autorizar arquivos injetados
  1. Autoriza um arquivo injetado utilizando nome (mod.*), extensão (*.asi) ou ambos (mod.asi) juntamente com o hash MD5 do mesmo
  • Bloquear arquivos ou extensões de arquivos injetados no jogo (revertido com a autorização de arquivos injetados)
  1. 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 e revertido com a autorização de arquivos injetados)
  1. Bloqueia um arquivo injetado através do hash MD5 do arquivo (os arquivos injetados podem ter seus nomes alterados)
OBS.: As análises de comparação de texto não diferenciam letras maiúsculas de minúsculas.

Exemplo de configurações de propriedade do cliente:
O arquivo é atualizado automaticamente durante a execução. (novo)
Código:
ClientVersion=1.0.0.0
ClientHash=cadfda53a4140329b4d93512637d970e

Exemplo de configuração de análise:
Código:
{
    "allowedSampVersion":
    {
        "0.3.7 R1": "c1aedd9f2dac8a7f79ed40d264b4df6d",
        "0.3.7 R2": "c316560c5b925874ff30d49dcae42478",
        "0.3.7 R3-1": "ba64bb37a1c6588fbca0075c3ddc4a2a",
        "0.3.7 R4": "f82715585396bcac8ee50fbc9708f755",
        "0.3.7 R5-1-MP": "724188afa06472872e393c9318027f04"
    },
    "allowedFiles":
    {
        "samp.asi": "cae47d34a4c3930cb9e0cc13c4192aa2",
        "SAMPGraphicRestore.asi": "01e70dd69019f9d965f3f0c4711dcce4",
        "SAMPFUNCS.asi": "181e79281ae5335eacf646d284f91b1d"
    },
    "allowedInjectedFiles":
    {
       
    },
    "suspectProcesses":
    [
        "cheatengine*"
    ],
    "suspectFiles":
    [
        "*.cleo",
        "*.cs",
        "*.asi"
    ],
    "suspectFolders":
    [
        "cleo"
    ],
    "suspectInjectedDll":
    [
        "vorbishooked.dll",
            "*.asi"
    ],
    "suspectInjectedDllHash":
    [
       
    ]
}


Compatibilidade:

Atualmente não é possível agregar usuários de dispositivos móveis ou sistema operacional diferente de Windows.
Uma alternativa para manter todas as plataformas, é incentivar o uso deste launcher para quem utiliza Windows, de forma que possa ser beneficiado pelo servidor. Desta forma não há necessidade de expulsar jogadores que não o utilizam, mas sim compensar quem utiliza.


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 (OK)
  • Proteção contra bypass do cliente (OK)
  • Otimização geral (OK)

Instalação:

- Cliente:
  1. Copie o programa para a pasta do gta que contenha o SA:MP instalado
  2. Execute o programa
  3. Selecione o servidor
  4. Digite seu nickname
  5. Clique em "PLAY" e o jogo abrirá diretamente no servidor selecionado
- Servidor:
  1. Crie uma pasta com o nome "VAC" dentro do servidor do SA:MP
  2. Copie o Viper Server e seus arquivos dentro desta pasta
  3. Configure os arquivos "config.json" e "config.cfg"
  4. Execute o servidor
- Biblioteca "vac.inc":
  1. Copie o arquivo "vac.inc" para o diretório de includes
  2. Adicione a seguinte linha abaixo da include a_samp: #include <vac>
  3. Compile o servidor
  4. Utilize as funções da include para trabalhar com o anti-cheat



Screenshots:

O layout está passando por ajustes e pode ser diferente das fotos abaixo, porém as instruções e objetos seguem iguais.

Servidor:
[Imagem: oNdIJKa.png]

Cliente:
[Imagem: NIbRQBa.png]

Em conexão:
[Imagem: FjKUewB.png]


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.


Testes:

Estou firmando uma parceria com um servidor para por o primeiro lançamento em teste e, em breve, divulgarei IP e compilação do launcher.
Para demais interessados, posso conceder um acesso antecipado e suporte total para implementação.


RE: Viper Anti-Cheat - BitSain - 14/06/2024

Parabéns pelo Viper AC!
A proposta é muito interessante e parece trazer melhorias significativas para a segurança e a experiência dos jogadores.
Boa sorte com o desenvolvimento!


RE: Viper Anti-Cheat - blueN - 14/06/2024

Muito bom! Um grande projeto, sucesso na caminhada.


RE: Viper Anti-Cheat - m4luko - 20/06/2024

Sua proposta é muito interessante. O único problema é que os jogadores precisam instalar o Viper. De qualquer forma, meus parabéns.


RE: Viper Anti-Cheat - Dr Editor - 20/06/2024

(20/06/2024 14:27)m4luko Escreveu: Sua proposta é muito interessante. O único problema é que os jogadores precisam instalar o Viper. De qualquer forma, meus parabéns.

Não há instalação ou exigência da máquina, pois é standalone.
Único requerimento é o pacote .Net Framework 4.8+ que basicamente a maioria dos usuários Windows, para não dizer todos, possuem.
Basta jogar o executável na pasta e usá-lo a partir dali. Não chamaria de "instalação".