Cheat Engine
Reading time: 7 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Cheat Engine est un programme utile pour trouver où des valeurs importantes sont enregistrées dans la mémoire d'un jeu en cours d'exécution et les modifier.
Lorsque vous le téléchargez et l'exécutez, vous êtes présenté avec un tutoriel sur la façon d'utiliser l'outil. Si vous souhaitez apprendre à utiliser l'outil, il est fortement recommandé de le compléter.
Que cherchez-vous ?
Cet outil est très utile pour trouver où une certaine valeur (généralement un nombre) est stockée dans la mémoire d'un programme.
Généralement, les nombres sont stockés sous forme de 4 octets, mais vous pourriez également les trouver sous des formats double ou float, ou vous pourriez vouloir chercher quelque chose de différent d'un nombre. Pour cette raison, vous devez vous assurer de sélectionner ce que vous souhaitez chercher :
Vous pouvez également indiquer différents types de recherches :
Vous pouvez également cocher la case pour arrêter le jeu pendant le scan de la mémoire :
Raccourcis
Dans Édition --> Paramètres --> Raccourcis, vous pouvez définir différents raccourcis pour différents objectifs, comme arrêter le jeu (ce qui est très utile si à un moment donné vous souhaitez scanner la mémoire). D'autres options sont disponibles :
Modifier la valeur
Une fois que vous avez trouvé où se trouve la valeur que vous cherchez (plus d'informations à ce sujet dans les étapes suivantes), vous pouvez la modifier en double-cliquant dessus, puis en double-cliquant sur sa valeur :
Et enfin, cochez la case pour effectuer la modification dans la mémoire :
Le changement dans la mémoire sera immédiatement appliqué (notez que tant que le jeu n'utilise pas à nouveau cette valeur, la valeur ne sera pas mise à jour dans le jeu).
Recherche de la valeur
Donc, nous allons supposer qu'il y a une valeur importante (comme la vie de votre utilisateur) que vous souhaitez améliorer, et vous cherchez cette valeur dans la mémoire.
Par un changement connu
Supposons que vous cherchez la valeur 100, vous effectuez un scan à la recherche de cette valeur et vous trouvez beaucoup de coïncidences :
Ensuite, vous faites quelque chose pour que la valeur change, et vous arrêtez le jeu et effectuez un scan suivant :
Cheat Engine recherchera les valeurs qui sont passées de 100 à la nouvelle valeur. Félicitations, vous avez trouvé l'adresse de la valeur que vous cherchiez, vous pouvez maintenant la modifier.
Si vous avez encore plusieurs valeurs, faites quelque chose pour modifier à nouveau cette valeur, et effectuez un autre "scan suivant" pour filtrer les adresses.
Valeur inconnue, changement connu
Dans le scénario où vous ne connaissez pas la valeur mais que vous savez comment la faire changer (et même la valeur du changement), vous pouvez chercher votre nombre.
Donc, commencez par effectuer un scan de type "Valeur initiale inconnue" :
Ensuite, faites changer la valeur, indiquez comment la valeur a changé (dans mon cas, elle a diminué de 1) et effectuez un scan suivant :
Vous serez présenté avec toutes les valeurs qui ont été modifiées de la manière sélectionnée :
Une fois que vous avez trouvé votre valeur, vous pouvez la modifier.
Notez qu'il y a un grand nombre de changements possibles et vous pouvez effectuer ces étapes autant de fois que vous le souhaitez pour filtrer les résultats :
Adresse mémoire aléatoire - Trouver le code
Jusqu'à présent, nous avons appris à trouver une adresse stockant une valeur, mais il est très probable que lors de différentes exécutions du jeu, cette adresse se trouve à différents endroits de la mémoire. Alors découvrons comment toujours trouver cette adresse.
En utilisant certains des trucs mentionnés, trouvez l'adresse où votre jeu actuel stocke la valeur importante. Ensuite (en arrêtant le jeu si vous le souhaitez), faites un clic droit sur l'adresse trouvée et sélectionnez "Découvrir ce qui accède à cette adresse" ou "Découvrir ce qui écrit à cette adresse" :
La première option est utile pour savoir quelles parties du code utilisent cette adresse (ce qui est utile pour d'autres choses comme savoir où vous pouvez modifier le code du jeu).
La deuxième option est plus spécifique, et sera plus utile dans ce cas car nous sommes intéressés à savoir d'où cette valeur est écrite.
Une fois que vous avez sélectionné l'une de ces options, le débogueur sera attaché au programme et une nouvelle fenêtre vide apparaîtra. Maintenant, jouez au jeu et modifiez cette valeur (sans redémarrer le jeu). La fenêtre devrait être remplie avec les adresses qui modifient la valeur :
Maintenant que vous avez trouvé l'adresse qui modifie la valeur, vous pouvez modifier le code à votre guise (Cheat Engine vous permet de le modifier rapidement en NOPs) :
Ainsi, vous pouvez maintenant le modifier pour que le code n'affecte pas votre nombre, ou l'affecte toujours de manière positive.
Adresse mémoire aléatoire - Trouver le pointeur
En suivant les étapes précédentes, trouvez où se trouve la valeur qui vous intéresse. Ensuite, en utilisant "Découvrir ce qui écrit à cette adresse", découvrez quelle adresse écrit cette valeur et double-cliquez dessus pour obtenir la vue de désassemblage :
Ensuite, effectuez un nouveau scan à la recherche de la valeur hexadécimale entre "[]" (la valeur de $edx dans ce cas) :
(Si plusieurs apparaissent, vous avez généralement besoin de la plus petite adresse)
Maintenant, nous avons trouvé le pointeur qui modifiera la valeur qui nous intéresse.
Cliquez sur "Ajouter l'adresse manuellement" :
Maintenant, cliquez sur la case "Pointeur" et ajoutez l'adresse trouvée dans la zone de texte (dans ce scénario, l'adresse trouvée dans l'image précédente était "Tutorial-i386.exe"+2426B0) :
(Notez comment le premier "Adresse" est automatiquement rempli à partir de l'adresse du pointeur que vous introduisez)
Cliquez sur OK et un nouveau pointeur sera créé :
Maintenant, chaque fois que vous modifiez cette valeur, vous modifiez la valeur importante même si l'adresse mémoire où se trouve la valeur est différente.
Injection de code
L'injection de code est une technique où vous injectez un morceau de code dans le processus cible, puis redirigez l'exécution du code pour passer par votre propre code écrit (comme vous donner des points au lieu de les retirer).
Donc, imaginez que vous avez trouvé l'adresse qui soustrait 1 à la vie de votre joueur :
Cliquez sur Afficher le désassembleur pour obtenir le code désassemblé.
Ensuite, cliquez sur CTRL+a pour invoquer la fenêtre d'assemblage automatique et sélectionnez Modèle --> Injection de code
Remplissez l'adresse de l'instruction que vous souhaitez modifier (cela est généralement rempli automatiquement) :
Un modèle sera généré :
Ainsi, insérez votre nouveau code d'assemblage dans la section "newmem" et retirez le code original de la section "originalcode" si vous ne souhaitez pas qu'il soit exécuté**.** Dans cet exemple, le code injecté ajoutera 2 points au lieu de soustraire 1 :
Cliquez sur exécuter et ainsi de suite et votre code devrait être injecté dans le programme, changeant le comportement de la fonctionnalité !
Références
- Tutoriel Cheat Engine, complétez-le pour apprendre à commencer avec Cheat Engine
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.