2009-07-15 10 views
4

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

+0

Je pense que http://forum.cheatengine.org/ est l'endroit approprié pour poser cette question – Tal

+0

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

+0

Peut-être que les auteurs du jeu ne veulent pas que vous trouviez ce pointeur. –

Répondre

2

J'ai enfin compris. Malheureusement, le débogage ne me conduisait nulle part alors j'ai commencé à regarder les pointeurs que j'avais trouvés précédemment pour mes personnages. Particulièrement la santé et le mana car ceux-ci étaient les plus proches des adresses que je recevais pour mon inventaire. J'ai fait quelques calculs basés sur l'adresse que j'essayais de trouver et le pointeur le plus proche de ma santé et j'ai trouvé un décalage. En utilisant ce décalage et le même pointeur statique que j'avais trouvé pour ma santé, j'étais capable de trouver mon inventaire à chaque fois.

Questions connexes