[Tool/Web/Other] SAMP AC v2 [Launcher]
#1

SAMP AC v2
Sobre:
Foi criado um novo tуpico, pois isso nгo se trata de uma atualizaзгo, mas sim de um novo Anti-Cheat.

Desenvolvi um novo anti-cheat, porйm de forma diferente e muito mais seguro.
Realizei muitos testes atй chegar a uma proteзгo realmente boa.
Diferente do meu primeiro lanзado, este trabalha com sockets e nгo mais com MySQL. Dessa forma a comunicaзгo entre cliente e servidor ocorre (praticamente) em tempo real.

Estudei brevemente a seguranзa do anti-cheat desenvolvido pelo bruxo00. Usei seus mйtodos de hash e versionamento para trabalhar a seguranзa do AC.
Antes de dizer que isso й uma cуpia/adaptaзгo/modificaзгo faзa uma comparaзгo entre o FS e APP desenvolvido por ele e a Include e APP desenvolvido por mim. Ambos feitos do 0.
Nгo hб CTRL+C e nem CTRL+V em nada do trabalho dele.


Documentaзгo:
Tanto a include quanto o Launcher estгo totalmente documentados, entгo serб apresentado neste tуpico somente o necessбrio.


Seguranзa:
Код:
#define AC_VERSION					"1.0.0.0"
#define AC_MD5_HASH					"abc123abc123abc123abc123abc123ab"
#define AC_CHECK_DELAY				(5) // segundos
AC_VERSION.............Versionamento do Launcher
AC_MD5_HASH..........Hash MD5 do programa para verificar se o mesmo foi modificado pelo jogador
AC_CHECK_DELAY......Delay (em segundos) que o servidor irб requisitar resposta do cliente

O versionamento й muito importante, pois o jogador deve usar a versгo mais atualizada do Launcher.
O hash MD5 do programa й computado no Launcher ao ser executado e envia o hash para o servidor para o mesmo comparar se hб modificaзгo no cliente por parte do jogador. Ao compilar o Launcher vocк pode utilizar um programa de terceiros para computar o hash do mesmo e o adicionar na define AC_MD5_HASH. (Lembrando que DEVE SER MD5, caso seja outro deve-se alterar no Launcher)
Para sabermos se o cliente estб ativo precisamos enviar dados para que possamos saber que o jogador estб sendo monitorado. Esse delay informado nгo tem relaзгo com o tempo em que o cliente irб se comunicar com o servidor, pois o cliente pode se comunicar a qualquer momento.


Modificaзхes:
Algumas coisas mudaram com relaзгo а versгo com MySQL.

#1 - Foi removido a listagem de arquivos suspeitos;
#2 - Comunicaзгo (quase) em tempo real;
#3 - Seguranзa melhorada;
#4 - Nгo forзa a entrada do jogador no servidor.

Funcionalidades:
Andei trabalhando bem a parte de comunicaзгo e troca de dados entre cliente e servidor para tornar as funзхes abaixo possнveis.

OnPlayerConnectAC(playerid, ip[], hash[])
Essa callback й chamada quando o jogador se conecta atravйs do cliente e inicia a comunicaзгo.
Ela pode substituir a callback OnPlayerConnect, mas isso nгo й regra.

playerid.....ID do jogador
ip...........IP do jogador
hash.........Hash do computador do jogador. (3 informaзхes estбticas do computador)

OnPlayerDisconnectAC(playerid, ip[], reason)
Esta callback й chamada quando o jogador encerra a comunicaзгo com servidor, seja por expulsгo ou simples desconexгo.
Ela pode substituir a callback OnPlayerDisconnect, mas isso nгo й regra.

playerid.....ID do jogador
ip...........IP do jogador
reason.......Motivo da desconexгo (padrгo OnPlayerDisconnect: 0/1/2)

OnPlayerCheatAC(playerid, ip[], cheat_code)

playerid.....ID do jogador
ip...........IP do jogador
cheat_code...Cуdigo do cheat detectado no computador do jogador.

Cheat codes:
Код:
CHEATCODE_MULTIPLE_EXEC		(2) ~~> Mъltiplas janelas do GTA SA
CHEATCODE_SUSPECT_OBJECTS	(3) ~~> Arquivos suspeitos detectados
CHEATCODE_DIFF_NAME			(4) ~~> Nick diferente do informado no cliente (Nada grave, pode ser modificado futuramente)
CHEATCODE_CHANGED_AC		(5) ~~> Hash MD5 do Launcher diverge do informado na Include
CHEATCODE_DIFF_VERSION		(6) ~~> Versгo do Launcher desatualizada ou diferente da informada na Include
CHEATCODE_CLOSE_AC			(7) ~~> Fechou o Launcher
Puniзгo:
Eu tenho costume de tornar os projetos mais dinвmicos e, pensando nisso, tento fazer com que o Launcher nгo interfira nas decisхes tomadas pelos donos de servidores: PUNIЗХES!
Por conta disso, o desenvolvedor do GameMode deverб decidir quais puniзхes o jogador deve receber quando a callback OnPlayerCheatAC й acionada.


Screenshot:

Splash


Form



Download:
SAMP AC v2 + Include


Crйditos:
SAMP Team
BlueG
F1N4L
bruxo00
Reply
#2

Boa!

Eu tinha feito um projeto em cima do AC do Bruxo00 tbm, mas precisa fazer algumas melhorias...
Se o player tiver 2 GTA's instalados no PC, ele consegue entrar no servidor com um, e o Anti Cheat rodando em Outra pasta, burlando o sistema..

Faz uma funзгo que pega o diretorio sozinho a partir do que estб definido no Samp.exe.
Outro problema que tinha, era em casos de o Player alterar o nome do arquivo e o AC nгo detectar mais..

Nгo cheguei a testar o seu ainda, mas quando der eu testo pra ver como tб, uma boa tirar o MySQL pra ficar mais rбpido.


Valeu por compartilhar conosco
Reply
#3

Quote:
Originally Posted by Felipe_Freeze
Посмотреть сообщение
Se o player tiver 2 GTA's instalados no PC, ele consegue entrar no servidor com um, e o Anti Cheat rodando em Outra pasta, burlando o sistema..
Nгo cheguei testar o AC do bruxo00...
Eu criei dois mйtodos para impedir mais de uma janela do GTA.

1# - Verificar os processos do GTA e avisar o servidor.
2# - Verificar o diretуrio de cada processo do GTA e finalizar o que for diferente do informado no Launcher. (Atualmente apenas comentado no cуdigo, porйm funcional.)

Quote:
Originally Posted by Felipe_Freeze
Посмотреть сообщение
Faz uma funзгo que pega o diretorio sozinho a partir do que estб definido no Samp.exe.
Outro problema que tinha, era em casos de o Player alterar o nome do arquivo e o AC nгo detectar mais..
O diretуrio pego pelo AC й o que estб no registro do windows, assim como o nick.
O nome do arquivo que vocк se refere й nome do processo do GTA?

Quote:
Originally Posted by Felipe_Freeze
Посмотреть сообщение
Nгo cheguei a testar o seu ainda, mas quando der eu testo pra ver como tб, uma boa tirar o MySQL pra ficar mais rбpido.

Valeu por compartilhar conosco
MySQL foi apenas uma saнda por eu nгo ter conhecimento com sockets na йpoca...
Peзo que teste e me ajude a mantк-lo.
Obrigado.
Reply
#4

Fica dando isso:

Reply
#5

Isto й uma obra de arte, o seu trabalho й muito show. Parabйns !!!
Reply
#6

Quote:
Originally Posted by KoloradO
Посмотреть сообщение
Fica dando isso:

Clica em "detalhes" e me mande o conteъdo por privado.

Quote:
Originally Posted by PilateGR
Посмотреть сообщение
Isto й uma obra de arte, o seu trabalho й muito show. Parabйns !!!
Fico lisonjeado. Muito obrigado!
Reply
#7

Aн bem legal bom trabalho
Reply
#8

Quote:
Originally Posted by PT
Посмотреть сообщение
Aн bem legal bom trabalho
Grato, @PT.
Reply
#9

Bacana. Bom trabalho.
Reply
#10

Mano eu compilei o Client dps peguei o hash e abri um server pra testar, mas quando eu executo o client e entro no servidor ele nгo conecta.

GM Teste:

Код:
#include <a_samp>
#include <socket>

#define AC_VERSION					"1.0.0.0"
#define AC_MD5_HASH					"******"
#define AC_CHECK_DELAY				(5) // segundos

#include <samp_ac>

public OnPlayerConnectAC(playerid, ip[], hash[])
{
	new str[128];
	format(str, 128, "[SAMP -AC] %s(id:%d) Conectou.", Nome(playerid), playerid);
	SendClientMessageToAll(-1, str);
	print(str);
	return 1;
}

public OnPlayerDisconnectAC(playerid, ip[], reason)
{
    new str[128];
	format(str, 128, "[SAMP -AC] %s(id:%d) Desconectou.", Nome(playerid), playerid);
	SendClientMessageToAll(-1, str);
	print(str);
	return 1;
}

public OnPlayerCheatAC(playerid, ip[], cheat_code)
{
    new str[128];
	if(cheat_code == CHEATCODE_MULTIPLE_EXEC)
	{
		format(str, 128, "[SAMP -AC] %s(id:%d) Detectado com Multi EXE.", Nome(playerid), playerid);
		SendClientMessageToAll(-1, str);
		print(str);
	}
	else if(cheat_code == CHEATCODE_SUSPECT_OBJECTS)
	{
        format(str, 128, "[SAMP -AC] %s(id:%d) Detectado com Arquivos suspeitos.", Nome(playerid), playerid);
		SendClientMessageToAll(-1, str);
		print(str);
	}
	else if(cheat_code == CHEATCODE_DIFF_NAME)
	{
        format(str, 128, "[SAMP -AC] %s(id:%d) Detectado com Nick diferente do Client.", Nome(playerid), playerid);
		SendClientMessageToAll(-1, str);
		print(str);
	}
	else if(cheat_code == CHEATCODE_CHANGED_AC)
	{
        format(str, 128, "[SAMP -AC] %s(id:%d) Detectado com Client Editado.", Nome(playerid), playerid);
		SendClientMessageToAll(-1, str);
		print(str);
	}
	else if(cheat_code == CHEATCODE_DIFF_VERSION)
	{
        format(str, 128, "[SAMP -AC] %s(id:%d) Detectado com Client versгo antiga.", Nome(playerid), playerid);
		SendClientMessageToAll(-1, str);
		print(str);
	}
	else if(cheat_code == CHEATCODE_CLOSE_AC)
	{
        format(str, 128, "[SAMP -AC] %s(id:%d) Fechou o Cliente.", Nome(playerid), playerid);
		SendClientMessageToAll(-1, str);
		print(str);
	}

	return 1;
}

stock Nome(playerid)
{
	new name[24];
	GetPlayerName(playerid, name, 24);
	return name;
}
stock KickPlayer(playerid) return SetTimerEx("KDel", 1000, false, "i", playerid);
forward KDel(playerid);public KDel(playerid) {Kick(playerid); return 1;}
server_log.txt:

Код:
----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3.7-R2, ©2005-2015 SA-MP Team

[16:21:19] 
[16:21:19] Server Plugins
[16:21:19] --------------
[16:21:19]  Loading plugin: socket.so
[16:21:19]  Socket plugin v0.2b loaded.
[16:21:19]   Loaded.
[16:21:19]  Loaded 1 plugins.

[16:21:19] 
[16:21:19] Filterscripts
[16:21:19] ---------------
[16:21:19]   Loaded 0 filterscripts.

[16:21:19] Script[gamemodes/SAMP_AC.amx]: Run time error 20: "Invalid index parameter (bad entry point)"
[16:21:19] Number of vehicle models: 0
[16:23:26] [connection] incoming connection: 177.35.69.184:61264 id: 0
[16:23:27] [join] Kolor4dO has joined the server (0:177.35.69.184)
[16:23:56] Kicking 177.35.69.184 because they didn't logon to the game.
[16:24:30] socket_connect(): Socket ID 0 has failed to connect.
[16:24:30] [part] Kolor4dO has left the server (0:1)
[16:25:09] [connection] incoming connection: 177.35.69.184:54953 id: 0
[16:25:10] [join] Kolor4dO has joined the server (0:177.35.69.184)
[16:25:39] Kicking 177.35.69.184 because they didn't logon to the game.
[16:26:13] socket_connect(): Socket ID 0 has failed to connect.
E acho que vocк colocou a include errada no download da uma olhada ae.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)