J'ai déjà posé une question ici, mais je n'étais pas inscrit et je n'ai pas pu modifier mon entrée (je ne sais pas si vous le pouvez) ou ajouter des informations à propos de la question. Je vais essayer d'être plus complet cette fois-ci, donc j'espère pouvoir obtenir une réponse ...Déboguer l'ensemble pour trouver un pointeur statique pour référence à une valeur dans un jeu
J'essaie de trouver un pointeur statique et une liste de décalages pour que je puisse facilement trouver des informations dans un jeu chaque fois qu'il est redémarré. J'ai réussi avec chaque élément d'information, mais un seul ...
Actuellement, j'utilise CheatEngine pour m'aider à déboguer et trouver les chemins de pointeur nécessaires.
L'adresse de la valeur que je veux (qui change à chaque début de partie) est actuellement: 849576A Pour référence, il s'agit du premier emplacement d'inventaire de mon premier personnage. Je sais que chaque slot est décalé de 20h et chaque personnage de 550h. Le premier emplacement d'inventaire du personnage numéro deux est 849576A + 550h. Encore une fois, ces adresses changent à chaque redémarrage, mais pas les décalages.
En utilisant CE, je peux voir ce accéder à cette adresse ... il renvoie les opcodes suivants:
Ces deux sont retournés avant de faire quoi que ce soit dans le jeu:
004b7ef9 - 0f bf 08 - movsx ecx,word ptr [eax]
004b542b - 0f bf 04 0a - movsx eax,word ptr [edx+ecx]
Puis lors du passage des éléments dans mon inventaire, je reçois ces:
74be5008 - 72 2a - jb memcpy+84
004bfc3a - 0f bf 4c 02 60 - movsx ecx,word ptr [edx+eax+60]
004bf43f - 8d 7d 9c - lea edi,[ebp-64]
Je ne suis pas sûr de qui à utiliser, donc je choisir un seul et mis un point d'arrêt sur l'un d'entre eux, j'ai choisi 004b542b, voici la section de code complet:
004B53F0 | 55 | PUSH EBP |
004B53F1 | 8BEC | MOV EBP, ESP |
004B53F3 | 83EC 0C | SUB ESP, C |
004B53F6 | 894D F4 | MOV DWORD PTR [EBP-C], ECX |
004B53F9 | C745 FC 00000000 | MOV DWORD PTR [EBP-4], 0 |
004B5400 | 837D 08 00 | CMP DWORD PTR [EBP+8], 0 |
004B5404 | 7F 04 | JG 004B540A |
004B5406 | 33C0 | XOR EAX, EAX |
004B5408 | EB 43 | JMP 004B544D |
004B540A | C745 F8 0F000000 | MOV DWORD PTR [EBP-8], F |
004B5411 | EB 09 | JMP 004B541C |
004B5413 | 8B45 F8 | MOV EAX, DWORD PTR [EBP-8] |
004B5416 | 83C0 01 | ADD EAX, 1 |
004B5419 | 8945 F8 | MOV DWORD PTR [EBP-8], EAX |
004B541C | 837D F8 19 | CMP DWORD PTR [EBP-8], 19 |
004B5420 | 7D 28 | JGE 004B544A |
004B5422 | 8B4D F8 | MOV ECX, DWORD PTR [EBP-8] |
004B5425 | C1E1 05 | SHL ECX, 5 |
004B5428 | 8B55 F4 | MOV EDX, DWORD PTR [EBP-C] |
004B542B | 0FBF040A | MOVSX EAX, WORD PTR [EDX+ECX] |
004B542F | 3B45 08 | CMP EAX, DWORD PTR [EBP+8] |
004B5432 | 75 14 | JNZ 004B5448 |
004B5434 | 8B4D F8 | MOV ECX, DWORD PTR [EBP-8] |
004B5437 | C1E1 05 | SHL ECX, 5 |
004B543A | 8B55 F4 | MOV EDX, DWORD PTR [EBP-C] |
004B543D | 0FBF440A 02 | MOVSX EAX, WORD PTR [EDX+ECX+2] |
004B5442 | 0345 FC | ADD EAX, DWORD PTR [EBP-4] |
004B5445 | 8945 FC | MOV DWORD PTR [EBP-4], EAX |
004B5448 | EB C9 | JMP 004B5413 |
004B544A | 8B45 FC | MOV EAX, DWORD PTR [EBP-4] |
004B544D | 8BE5 | MOV ESP, EBP |
004B544F | 5D | POP EBP |
004B5450 | C2 0400 | RETN 4 |
je décide de mettre un point d'arrêt pour que je puisse voir les valeurs de registre avant et après la ligne qui accède à soi-disant ma valeur (004B542B | 0FBF040A | MOVSX EAX, MOT PTR [EDX + ECX]).
AVANT:
EAX: 00000000
EBX: 00000000
ECX: 000001E0
EDX: 0849558C
ESI: 000000D0
EDI: 013A38A8
EBP: 00189CE0
ESP: 00189CD4
EIP: 004B542B
APRÈS:
EAX: 00000DAD
EBX: 00000000
ECX: 000001E0
EDX: 0849558C
ESI: 000000D0
EDI: 013A38A8
EBP: 00189CE0
ESP: 00189CD4
EIP: 004B542F
Pour moi, cela signifie EDX 0849558C devrait être la valeur que je suis à la recherche de trouver et d'appliquer ensuite un décalage de 1E0. Toutefois. Lorsque vous recherchez des valeurs hexadécimales correspondant à EDX dans la mémoire, je n'obtiens aucun résultat, ce qui signifie qu'il n'y a aucun pointeur vers cette adresse.
J'ai utilisé les mêmes méthodes que celles que j'essaie d'utiliser ici, pour rassembler avec succès chaque adresse statique, puis appliquer les décalages. Par exemple, voici l'adresse statique + décalages pour trouver ma santé: 01263FC8 +284 + C +30 +90
Je pense que http://forum.cheatengine.org/ est l'endroit approprié pour poser cette question – Tal
Peut-être, mais vous ne pouvez pas enregistrer un compte là-bas ... il n'est jamais activé par un administrateur. Je ferais le même genre de chose si j'utilisais Olly ou un autre débogueur. L'idée principale est d'essayer de trouver un pointeur statique sur 849576A ... – fldash
Peut-être que les auteurs du jeu ne veulent pas que vous trouviez ce pointeur. –