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
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 :
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 :
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".
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 :
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 :
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 :
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
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
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
, l’Offset est un terme
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
qui désigne une
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
de manière relative. C'est une valeur entière représentant le déplacement en
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
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 :

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 :

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".

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 :


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 :

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 :

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