Les bases du memory hacking : contourner la DMA

Statut
N'est pas ouverte pour d'autres réponses.

-Uzi-

Coder
Premium
Inscription
31 Octobre 2012
Messages
180
Réactions
79
Points
2 563
RGCoins
25
Coucou tout le monde :)

Bon, suite a mon tuto sur l'edition de memoire, j'ai reçu des retour de personnes qui aimeraient savoir comment faire pour ne pas avoir a rechercher a chaque fois les adresse quand on relance son jeu.

Il faut savoir que la plupart des jeux utilisent un systeme appelé la DMA (Dynamic Memory Allocation = Memoire Dynamique), en quoi ça consiste ? Des que vous relancez le programme, l'adresse lit par le jeu contenant les données va changer d'emplacement dans la memoire.

1) Comment contourner ca ?

C'est très simple, je vous ai deja parlé des pointeurs ? c'est une des bases importantes du C++ (ou meme d'autre language).
Qu'est ce qu'un pointeur, un pointeur c'est un emplacement de memoire qui redirige vers un autre emplacement de mémoire (comprené le comme ca, c'est plus complexe en fait).

Exemple :

A l'emplacement de memoire 05 j'ai la variable "9" de stocké.
Hé bien il y a un pointeur qui pointe vers cette adresse, et lorsqu'on appel ce pointeur, il nous "redirige" vers la memoire en question .

Si on demandait donc l'affichage memoire de la case du pointeur, il nous sortirais la variable 9.

Pour la DMA, on procede pareil, on va chercher l'adresse de base (qui ne change jamais sauf a certaines updates) en remontant la liste des pointeurs.

On va aussi parler du terme "Offset" , je vous copie la definition Wikipedia, elle est plutot explicite :

"En , l’Offset est un terme qui désigne une de manière relative. C'est une valeur entière représentant le déplacement en nécessaire, par rapport à une adresse de référence, pour atteindre une autre adresse. Autrement dit, l'offset est la distance séparant deux emplacements mémoire."

2) Comment faire ?

Hé bien on va utiliser Cheat Engine, puisque notre ami a une fonction de recherche de ce type intégré, pret ? c'est parti !


Comme expliqué dans le precedent tutorial, on trouve l'adresse correspondant aux munitions :

1351959816-pointer1.png


Ensuite on clique droit dessus et on choisit : "Find out what accesses this adress" , CE vous demande d'attacher son debugger au processus, accepter et vous devriez avoir une fenetre ouverte avec des données, tirer quelques balles afin que CE reconnaissent les acces :

1351959823-pointer2.png



Maintenant, on clique droit sur une des 2 valeurs apparues lorsque l'on a tiré, par experience, je vais prendre le code "DEC" qui correspond a "decrementation" (c'est de l'assembleur) mais parfois il vous faudra esseyer a plusieurs reprises sur differents acces et on choisit "more information".

1351959824-pointer3.png


Le code en rouge est celui qui nous interesse, il n'y a pas d'offset dessus (le petit +XXX a la fin des instructions) donc offset = 0.
On copie aussi la valeur que nous donne cheat engine : "the value... is probably XXXXXX"

Maintenant on retourne dans cheat engine, on coche la case HEX et on fais un nouveau scan avec la valeur qu'on a obtenu plus haut :

1351960413-pointer4.png



1351960407-pointer5.png


Maintenant, on clique sur "add adress manually" puis on complete avec l'adresse trouvé plus haut, on met en type pointer et en offset "0" puisqu'il n'y a pas d'offset :

1351960421-pointer6.png



Et voila, on peut voir qu'on a trouvé le pointeur qui accede a la variable, ici, il y a plusieurs pointeurs a trouvé afin d'arrivé a l'adresse "de base" mais je completerai le topic avec une video qui vous expliquera comment faire dans le cas ou on a plusieurs pointeurs :

1351960422-pointer7.png



J'espere que ca vous aura aidé a comprendre comment marche les pointeurs et l'allocation de memoire, je ferai la vidéo surement demain, bonne journée :)
 
Merci pour le tuto ! :-) , Ça va m'aidé
 
Bravo pour ce TuTo ;)
 
Bravo , mais j'ai une question sa marche pour les jeux du style dofus , habbo ...ect ? :ok:
 
Bravo , mais j'ai une question sa marche pour les jeux du style dofus , habbo ...ect ? :ok:

Non, les données du jeu sont toutes cotés serveur, donc impossible de les modifiers, par contre tu peux changer les stats sur ton client pour faire stylé devant tes potes ^^
 
Non, les données du jeu sont toutes cotés serveur, donc impossible de les modifiers, par contre tu peux changer les stats sur ton client pour faire stylé devant tes potes ^^
Ah Ok , merci de l'info :ok:
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut