15.09.2013, 18:59
em um tуpico OFF de discussхes algumas pessoas citaram que o SA-MP deveria tomar providкncias em relaзхes aos hacks, coisa que eu nгo discordo muito, mas ai comeзaram a citar exemplos bestas como god, dinheiro e outros que nгo me lembro, alguns destes exemplos podem ser simplesmente solvidos com o prуprio pawn, como o 'god', eu fiz essa include rapidinha aqui no bloco de notas pra demonstrar uma forma simples de inverter toda a lуgica do god, ele te aplica vida infinita e a include te aplica a vida anterior que vocк tinha antes de usa-lo.
A include em si й mais um exemplo para o pessoal ver que as coisas podem ser feitas de forma simples e sucinta se vocк souber usar a lуgica de uma coisa contra ela prуpria.
Include:
exemplo de uso:
no meu GM de teste eu exportei a include para receber a chamada quando hack for encontrado...
imagens de teste:
pra simular um god eu fiz um programa bбsico pra alterar a vida, nгo vou postar aqui porque й ilegal e a finalidade dele era somente testar o sistema.

A include tб funcionando assim:
Ela estabelece conexгo entre os valores de vida/colete com duas variбveis quaisquer, se tu alterar o valor da vida no GM, a variбvel que tб conectada a ela altera tambйm.
Como a include detecta o god ? Se tu modificar a vida por um processo externo(hack), somente a vida serб alterada, a variбvel que tб conectada a ela nгo serб alterada, e nisso a verificaзгo de igualdade serб quebrada e a callback OnPlayerUseHack serб chamada com o ID do jogador que alterou a vida de uma forma externa(hack).
OBS: A callback OnPlayerUseHack sу serve pra decidir oque serб feito com o hacker, se vocк vai kikar, vai banir ele, ou se vai avisar ou entгo nгo vai fazer nada, a include por si sу, nгo deixa vocк usar o hack, quando tentar alterar a vida de forma externa ela jб volta para o valor antigo.
Talvez eu nгo tenha explicado bem, mas se sobrar dъvidas ou achar bugs podem postar aqui que eu respondo.
Abraзos.
A include em si й mais um exemplo para o pessoal ver que as coisas podem ser feitas de forma simples e sucinta se vocк souber usar a lуgica de uma coisa contra ela prуpria.
Include:
pawn Код:
//By Willian Luigi
#define HEALTH_HACK (0)
#define ARMOUR_HACK (1)
enum FLAGS
{
Float:PLAYER_HEALTH_FLAG,
Float:PLAYER_ARMOUR_FLAG
};
new flagsAccess[MAX_PLAYERS][FLAGS];
forward OnPlayerUseHack(playerid, hackType);
stock setHealth(playerid, Float:value)
{
flagsAccess[playerid][PLAYER_HEALTH_FLAG] = value;
SetPlayerHealth(playerid, value);
}
stock setArmour(playerid, Float: value)
{
flagsAccess[playerid][PLAYER_ARMOUR_FLAG] = value;
SetPlayerArmour(playerid, value);
}
stock Float:getHealth(playerid)
{
return flagsAccess[playerid][PLAYER_HEALTH_FLAG];
}
stock Float:getArmour(playerid)
{
return flagsAccess[playerid][PLAYER_ARMOUR_FLAG];
}
public OnPlayerConnect(playerid)
{
setArmour(playerid, 0);
setHealth(playerid, 100);
#if defined hook_OnPlayerConnect
hook_OnPlayerConnect(playerid);
#endif
return 1;
}
public OnPlayerUpdate(playerid)
{
new Float:h, Float:a;
GetPlayerHealth(playerid, h);
GetPlayerArmour(playerid, a);
if (h > getHealth(playerid) + 0x2 || h < getHealth(playerid) - 0x2)
{
setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
if (funcidx("OnPlayerUseHack") != -1)
CallLocalFunction("OnPlayerUseHack", "ii", playerid, HEALTH_HACK);
}
if (a > getArmour(playerid) + 0x2 || a < getArmour(playerid) - 0x2)
{
setArmour(playerid, flagsAccess[playerid][PLAYER_ARMOUR_FLAG]);
if (funcidx("OnPlayerUseHack") != -1)
CallLocalFunction("OnPlayerUseHack", "ii", playerid, ARMOUR_HACK);
}
#if defined hook_OnPlayerUpdate
hook_OnPlayerUpdate(playerid);
#endif
return 1;
}
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if (issuerid != INVALID_PLAYER_ID)
{
if (flagsAccess[playerid][PLAYER_ARMOUR_FLAG] < amount)
{
flagsAccess[playerid][PLAYER_HEALTH_FLAG] -= amount;
flagsAccess[playerid][PLAYER_HEALTH_FLAG] += flagsAccess[playerid][PLAYER_ARMOUR_FLAG];
setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
setArmour(playerid, flagsAccess[playerid][PLAYER_ARMOUR_FLAG]);
}
else
{
flagsAccess[playerid][PLAYER_ARMOUR_FLAG] -= amount;
setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
}
}
else
{
flagsAccess[playerid][PLAYER_HEALTH_FLAG] -= amount;
setHealth(playerid, flagsAccess[playerid][PLAYER_HEALTH_FLAG]);
}
#if defined hook_OnPlayerTakeDamage
hook_OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid);
#endif
return 1;
}
public OnPlayerSpawn(playerid)
{
setHealth(playerid, 100);
#if defined hook_OnPlayerSpawn
hook_OnPlayerSpawn(playerid);
#endif
return 1;
}
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn hook_OnPlayerSpawn
#if defined _ALS_OnPlayerSpawn
forward hook_OnPlayerSpawn(playerid);
#endif
#if defined _ALS_OnPlayerConnect
#undef OnPlayerConnect
#else
#define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect hook_OnPlayerConnect
#if defined hook_OnPlayerConnect
forward hook_OnPlayerConnect(playerid);
#endif
#if defined _ALS_OnPlayerTakeDamage
#undef OnPlayerTakeDamage
#else
#define _ALS_OnPlayerTakeDamage
#endif
#define OnPlayerTakeDamage hook_OnPlayerTakeDamage
#if defined hook_OnPlayerTakeDamage
forward hook_OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid);
#endif
#if defined _ALS_OnPlayerUpdate
#undef OnPlayerUpdate
#else
#define _ALS_OnPlayerUpdate
#endif
#define OnPlayerUpdate hook_OnPlayerUpdate
#if defined hook_OnPlayerUpdate
forward hook_OnPlayerUpdate(playerid);
#endif
no meu GM de teste eu exportei a include para receber a chamada quando hack for encontrado...
pawn Код:
//GM
public OnPlayerUseHack(playerid, hackType)
{
if (hackType == HEALTH_HACK) //Verifica se tб alterando a vida(GOD)
{
SendClientMessage(playerid, -1, "Vocк tentou usar god hack, mas nгo funcionou :)");
}
return 1;
}
pra simular um god eu fiz um programa bбsico pra alterar a vida, nгo vou postar aqui porque й ilegal e a finalidade dele era somente testar o sistema.

A include tб funcionando assim:
Ela estabelece conexгo entre os valores de vida/colete com duas variбveis quaisquer, se tu alterar o valor da vida no GM, a variбvel que tб conectada a ela altera tambйm.
Como a include detecta o god ? Se tu modificar a vida por um processo externo(hack), somente a vida serб alterada, a variбvel que tб conectada a ela nгo serб alterada, e nisso a verificaзгo de igualdade serб quebrada e a callback OnPlayerUseHack serб chamada com o ID do jogador que alterou a vida de uma forma externa(hack).
OBS: A callback OnPlayerUseHack sу serve pra decidir oque serб feito com o hacker, se vocк vai kikar, vai banir ele, ou se vai avisar ou entгo nгo vai fazer nada, a include por si sу, nгo deixa vocк usar o hack, quando tentar alterar a vida de forma externa ela jб volta para o valor antigo.
Talvez eu nгo tenha explicado bem, mas se sobrar dъvidas ou achar bugs podem postar aqui que eu respondo.
Abraзos.


,tu vai ficar famosaum aki с.с
...n vo mata mais ninguem agora
