Domanda [RACCOLTA] Tricks per rendere undetected il proprio hack

Stato
Discussione chiusa ad ulteriori risposte.

d3vil401

Utente Platinum
3 Gennaio 2009
2,077
106
1,055
1,043
Ultima modifica da un moderatore:
Ho voluto creare questo thread per scambiarci aiuti riguardo il rendere il proprio hack undetected.

Io ho 5 consigli, banali ma molte persone alle prime armi senza conoscenze specifiche non possono arrivarci tanto facilmente.
Premessa: questi metodi si basano soprattutto sugli hacks da injectare e che sono stati programmati in C/C++.

UNDETECTING DA SIGN SCAN

Anti-cheats come XTRAP utilizzano come metodo di riconoscimento un pattern di funzione, se per esempio è detected il nostro hack non significa che sia detected l'intero hack.
Mi spiego meglio: soltanto alcuni hack (funzioni) potrebbero essere detectati, non tutte.
Perché? Mettiamo caso noi abbiamo una funzione di hook dell'apertura developer console di un gioco, questa funzione avrà come pattern X (ex: "\xAB\xAA\xFF\xCC\xDE\xAD...", sono casuali eh) per renderla undetected basterà aggiungere righe di codice casuale, come per esempio delle funzioni matematiche
PHP:
unsigned int Undetector = (0xFF << 2) ^ 0xDE;
, può rendere la funzione completamente diversa e quindi con un pattern diverso Y.
Quando XTRAP scannerizzerà la firma della funzione hack non la troverà e quindi risulterà undetected.

ATTENZIONE:
Può anche succedere che venga usata una sign parziale, ovvero considera le prime righe (l'effettivo hack o parziale ma riconoscibile) che magari considera le prime righe di codice (OPCodes) e quindi dovremo modificare il codice PRIMA degli OPCodes appartenenti alla sign.

NB: Questo è un ottimo trucco per rendere i Microsoft Detours undetected qualora siate muniti di source code.[/code]

UNDETECTING EXPORT TABLE

Nel caso in cui il vostro hack funziona esportando una funzione (by name) e modificate la Imports Table del gioco allora un anti-cheat potrebbe scannerizzare gli Imports per capire se state davvero usando questo hack.
Risolvere questo problema non è difficile: rinominate la funzione. :)

Se invece la importate by ordinal, cambiate semplicemente l'ordinal.

STRING ENCRYPTION

Questo metodo viene utilizzato anche da Hackshield come anti-reverse engineering.
Alcuni anti-cheats potrebbero rilevare delle stringhe nell'area di memoria del processo che riporta al vostro hack.
Esempio: "GM Detected!".
Per evitare questa problematica avete 2 possibilità:
1) Cambiare stringa.
Ma se l'hack prevede solo whitelisted strings allora sono problemi (esempio: la parola "GM" o "Detected" compaiono solo in stringhe previste dal client) allora non risolverete niente.

2) Cryptarle!
Potete implementare un sistema in runtime di decrypt delle stringhe, non necessitate di ultra algoritmi, un semplice XOR con una chiave per ogni stringa è sufficiente per nascondere le stringhe dell'hack dagli scan.

LIBRARY NAME

Alcuni anti-cheats (o anche clients stessi!) prevedono solo alcune librerie incluse quindi una whitelist.
Rinominate la libreria con una prevista che magari non viene caricata dal client (ex: Fraps.dll, Action!.dll, gameguard.des).
Easy.

PROXY LIBRARY

A riguardo potete trovare tutorials online.
Semplicemente la nostra libreria deve presentare gli stessi exports di un'altra libreria (ex: dinput8.dll) e la vostra libreria deve a sua volta chiamare quelle originali.
In questo modo il processo carica in memoria una libreria prevista, ma falsa e nel caso in cui chiami una funzione interna a quella reale, la vostra libreria la richiamerà.
Questo metodo è molto utile per fare bypass, l'ho usato io stesso per bypassare Hackshield su ElSword, partendo dal codice sorgente di un bypass vecchio.

 
Stato
Discussione chiusa ad ulteriori risposte.