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.