1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Tutoriel Les bases du memory hacking : contourner la DMA

Discussion dans 'Windows' créé par -Uzi-, 3 Novembre 2012.

Statut de la discussion:
N'est pas ouverte pour d'autres réponses.
  1. -Uzi-

    -Uzi- Coder Premium

    Inscrit:
    31 Octobre 2012
    Messages:
    178
    Appréciations:
    79
    Points:
    2 563
    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

    Bonjour visiteur, merci de vous inscrire ou de vous connecter pour voir les liens. C'est gratuit en 3 secondes !

    , l’Offset est un terme

    Bonjour visiteur, merci de vous inscrire ou de vous connecter pour voir les liens. C'est gratuit en 3 secondes !

    qui désigne une

    Bonjour visiteur, merci de vous inscrire ou de vous connecter pour voir les liens. C'est gratuit en 3 secondes !

    de manière relative. C'est une valeur entière représentant le déplacement en

    Bonjour visiteur, merci de vous inscrire ou de vous connecter pour voir les liens. C'est gratuit en 3 secondes !

    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 :

    [​IMG]

    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 :

    [​IMG]


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

    [​IMG]

    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 :

    [​IMG]


    [​IMG]

    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 :

    [​IMG]


    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 :

    [​IMG]


    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 :)
     


  2. Fred'

    Fred' HÉLLOO Premium

    Inscrit:
    30 Mars 2012
    Messages:
    79
    Appréciations:
    21
    Points:
    3 668
    Merci pour le tuto ! ::): , Ça va m'aidé
     
  3. Sacha'

    Sacha' VIP ♥

    Inscrit:
    24 Septembre 2012
    Messages:
    3 575
    Appréciations:
    1 124
    Points:
    5 213
    Bravo pour ce TuTo ;)
     
  4. Jadεn_ThεBoss

    Jadεn_ThεBoss 50 Abos pour 1 Starpass Premium

    Inscrit:
    15 Avril 2012
    Messages:
    1 030
    Appréciations:
    227
    Points:
    713
    Bravo , mais j'ai une question sa marche pour les jeux du style dofus , habbo ...ect ? :ok:
     
  5. -Uzi-

    -Uzi- Coder Premium

    Inscrit:
    31 Octobre 2012
    Messages:
    178
    Appréciations:
    79
    Points:
    2 563
    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 ^^
     
    Jadεn_ThεBoss aime ça.
  6. Jadεn_ThεBoss

    Jadεn_ThεBoss 50 Abos pour 1 Starpass Premium

    Inscrit:
    15 Avril 2012
    Messages:
    1 030
    Appréciations:
    227
    Points:
    713
    Ah Ok , merci de l'info :ok:
     
Statut de la discussion:
N'est pas ouverte pour d'autres réponses.

Partager cette page

Publicité