Aller au contenu

Pointer Scanning dans Cheat Engine : trouvez des adresses qui survivent à un redémarrage

Cheat-Engine.net Par Cheat-Engine.net 9 min de lecture 25 vues

Pourquoi les adresses changent à chaque redémarrage d'un jeu, comment fonctionnent les pointeurs multiniveaux, et comment utiliser les pointer scans, les pointer maps et les rescans pour créer des entrées qui continuent de fonctionner.

Vous avez trouvé votre valeur de santé, vous l'avez enregistrée dans une table de triche (Cheat Table), vous avez redémarré le jeu, et maintenant l'entrée affiche ?? ou un nombre aléatoire. Ce n'est pas une erreur de votre part. La plupart des valeurs d'un jeu se trouvent à une adresse différente à chaque exécution. Un pointeur est un chemin qui mène à la valeur depuis un point de départ qui ne bouge pas, et le pointer scanner de Cheat Engine est l'outil qui trouve ces chemins pour vous.

Ce guide suppose que vous savez déjà trouver une valeur avec First Scan et Next Scan ; sinon, lisez d'abord le tutoriel Cheat Engine pour débutants. Utilisez ces techniques uniquement dans des jeux solo et hors ligne, et sauvegardez vos parties avant d'expérimenter.

Pourquoi les adresses changent entre les redémarrages

Les jeux créent la plupart de leurs données pendant l'exécution. Lorsqu'un niveau se charge, le jeu demande au système un bloc de mémoire pour l'objet du joueur, un autre pour l'inventaire, et ainsi de suite. C'est l'allocation dynamique, et l'emplacement de chaque bloc dépend de ce qui a été alloué avant lui, ce qui varie d'une exécution à l'autre et même entre les écrans de chargement. Votre santé est stockée à une position fixe dans l'objet du joueur, mais l'objet du joueur lui-même se déplace.

De plus, Windows charge les programmes et leurs modules (l'exécutable principal et ses DLL) à des adresses de base variables pour des raisons de sécurité. C'est pourquoi les adresses stables sont toujours écrites relativement à un module, comme "game.exe"+01A2B3C0, plutôt que sous forme de nombre brut.

Dans la liste des résultats de scan, Cheat Engine affiche en vert les adresses qui appartiennent à un module. Elles sont statiques : elles gardent le même décalage dans le module à chaque exécution. Les adresses en noir sont dynamiques. La plupart des valeurs qui vous intéressent sont dynamiques.

Comment fonctionnent les pointeurs multiniveaux

Un pointeur est simplement une valeur qui contient une adresse. Les jeux en sont remplis : un « game manager » global contient l'adresse du monde, le monde contient l'adresse du joueur, le joueur contient l'adresse d'un bloc de statistiques, et ce bloc contient la santé au décalage 18. Suivre une telle chaîne depuis un point de départ statique mène toujours à l'adresse actuelle de la valeur, peu importe où les objets ont été alloués.

"game.exe"+01A2B3C0   read the 8-byte address stored here  (level 1)
  + 10                read the address stored here         (level 2)
  + 18                this is the health value

Cheat Engine écrit le même chemin en notation à crochets : [["game.exe"+01A2B3C0]+10]+18 : chaque paire de crochets signifie « lire l'adresse stockée ici ». Les décalages sont en hexadécimal. Un chemin avec un seul décalage est un pointeur à un niveau ; la plupart des vrais jeux nécessitent de deux à cinq niveaux.

Étape 1 : trouver l'adresse actuelle de la valeur

Trouvez la valeur comme d'habitude et ajoutez-la à la liste d'adresses. Assurez-vous d'avoir le bon type, car l'entrée de pointeur en héritera ; le guide des types de valeurs vous aide si vous ne savez pas si la santé est une valeur 4 Bytes ou Float. Confirmez l'adresse en la modifiant et en constatant le changement dans le jeu.

Étape 2 (facultative) : voir ce qui accède à l'adresse

Faites un clic droit sur l'entrée et choisissez Find out what accesses this address ou Find out what writes to this address. Cheat Engine attache son débogueur et liste les instructions qui touchent la valeur pendant que vous jouez. Un résultat typique ressemble à movss [rbx+18],xmm0 ou mov [rcx+18],eax. Le nombre entre crochets, ici 18, est le décalage de la valeur dans son objet, et le registre (rbx ou rcx) contenait l'adresse de l'objet à ce moment-là. Sélectionner l'instruction et ouvrir ses détails affiche les valeurs des registres.

C'est la méthode manuelle pour tracer les pointeurs : vous recherchez l'adresse de l'objet sous forme de valeur hexadécimale de 8 octets pour trouver ce qui pointe vers elle, puis vous répétez pour chaque niveau. C'est ainsi que le tutoriel intégré de Cheat Engine enseigne les pointeurs, et cela vaut la peine d'être fait une fois pour comprendre l'idée. Notez que l'attachement du débogueur peut rendre certains jeux instables ; sauvegardez avant d'essayer.

Les instructions que vous trouvez ici sont aussi le point de départ des scripts d'injection de code, une alternative aux pointeurs qui est présentée dans le guide des bases de l'Auto Assembler.

Étape 3 : lancer un pointer scan

Faire chaque niveau à la main est lent, donc Cheat Engine peut rechercher automatiquement tous les chemins plausibles. Faites un clic droit sur l'entrée et choisissez Pointer scan for this address. La boîte de dialogue des paramètres comporte de nombreuses options ; les plus importantes sont :

  • Address to find : rempli avec l'adresse de votre entrée.
  • Maximum offset value : la taille maximale de chaque décalage. La valeur par défaut est un bon point de départ ; ne l'augmentez que si les scans ne trouvent rien.
  • Max level : la profondeur de recherche en nombre de niveaux. Des niveaux plus élevés trouvent plus de chemins mais prennent beaucoup plus de temps et produisent beaucoup plus de résultats. Commencez autour de 5.

Cliquez sur OK, choisissez où enregistrer les résultats (un fichier .PTR plus des fichiers auxiliaires), et attendez. Un premier scan peut produire des centaines de milliers, voire des millions de chemins candidats. La plupart sont des coïncidences qui ne fonctionnent que dans cette session. Les étapes suivantes les éliminent.

Étape 4 : refaire un scan après le redémarrage du jeu

C'est l'étape qui fait fonctionner le pointer scanning.

  1. Gardez la fenêtre du pointer scan ouverte, ou rouvrez plus tard le fichier .PTR enregistré depuis le menu du pointer scanner.
  2. Fermez complètement le jeu et relancez-le. Chargez une sauvegarde.
  3. Rattachez Cheat Engine et trouvez la nouvelle adresse de la valeur avec un scan normal.
  4. Dans la fenêtre du pointer scan, ouvrez son menu et choisissez l'option de rescan. Saisissez la nouvelle adresse comme adresse à trouver et confirmez.

Cheat Engine vérifie chaque chemin enregistré par rapport à la nouvelle exécution et ne conserve que ceux qui mènent maintenant à la nouvelle adresse. Répétez deux ou trois fois, de préférence en variant : une autre sauvegarde, un autre niveau, et au moins une fois après le redémarrage de votre PC. Chaque passage élimine les chemins qui n'avaient fonctionné que par hasard. Vous pouvez aussi refaire un scan par valeur plutôt que par adresse lorsque la valeur est connue et distinctive.

Pointer maps : scanner plus intelligemment

Une pointer map est un instantané de tous les pointeurs présents dans la mémoire du jeu à un moment donné, enregistré sur le disque. Vous en générez une depuis le menu clic droit de la liste d'adresses pendant que le jeu est en cours, et vous enregistrez l'adresse de la valeur pour cette session. Plus tard, dans les paramètres du pointer scan, vous pouvez scanner à l'aide d'une pointer map enregistrée au lieu de la mémoire en direct, et la comparer à d'autres cartes enregistrées, chacune associée à l'adresse qu'avait la valeur dans cette session.

L'avantage est que vous pouvez d'abord collecter des cartes de plusieurs sessions de jeu et les combiner dans un seul scan, sans garder le jeu ouvert pendant la partie lente. Le résultat final est le même type de liste filtrée que produit une série de rescans, souvent obtenu plus rapidement.

Étape 5 : choisir un résultat et l'ajouter à la table

La liste des résultats affiche une colonne Base Address telle que "game.exe"+01A2B3C0, puis une colonne par décalage, et l'adresse vers laquelle le chemin pointe actuellement. Pour choisir parmi les survivants, privilégiez :

  • les chemins qui commencent dans l'exécutable principal du jeu ou son module de moteur principal ;
  • les chemins plus courts avec moins de niveaux ;
  • les chemins qui ont survécu aux rescans les plus variés.

Double-cliquez sur un résultat pour l'ajouter à la liste d'adresses. L'adresse de l'entrée apparaît avec un préfixe P-> pour indiquer qu'il s'agit d'un pointeur. Vérifiez son type ; les entrées de pointer scan sont par défaut en 4 Bytes, changez-le donc en Float ou un autre type si votre valeur l'exige. Donnez-lui une description claire et enregistrez la table.

Vous pouvez aussi saisir un pointeur à la main : utilisez le bouton d'ajout manuel d'une adresse, cochez l'option Pointer, placez le module et le décalage dans le champ d'adresse de base (par exemple "game.exe"+01A2B3C0) et ajoutez un champ par décalage. Cheat Engine affiche l'adresse à laquelle chaque niveau correspond pendant que vous tapez, ce qui facilite le repérage des erreurs. Faites attention à l'ordre des champs de décalage dans cette boîte de dialogue : le décalage appliqué en premier se trouve à côté de l'adresse de base.

Limites des pointeurs

Un bon pointeur survit aux redémarrages, mais pas forcément aux mises à jour du jeu. Quand le développeur met le jeu à jour, l'adresse de base statique et les décalages peuvent changer, et vous devrez refaire le scan. Conservez vos fichiers .PTR et vos notes pour pouvoir le refaire rapidement. Soyez aussi prudent avec les valeurs qui ont plusieurs copies, par exemple les statistiques par personnage dans une équipe ; un chemin peut mener au personnage qui a été sélectionné en premier.

Résumé

  1. Trouvez la valeur et confirmez-la.
  2. Si vous le souhaitez, utilisez le débogueur pour voir quelles instructions y accèdent.
  3. Lancez un pointer scan avec des paramètres de niveau et de décalage modérés.
  4. Redémarrez le jeu, trouvez la nouvelle adresse, refaites un scan. Répétez avec des sessions variées.
  5. Choisissez un chemin court et cohérent, ajoutez-le à la table avec le bon type, et enregistrez.

Commentaires

0
En réponse à

Jamais affiché publiquement.

Les commentaires sont examinés par un modérateur avant d'apparaître.

Aucun commentaire pour le moment

Soyez le premier à donner votre avis.