Отладочная сборка для поиска статического указателя для ссылки на значение в игре - PullRequest
4 голосов
/ 15 июля 2009

Ранее я задавал вопрос здесь, но я был незарегистрирован и не смог отредактировать свою запись (не уверен, что сможешь) или добавить какую-либо информацию о проблеме. В этот раз я постараюсь быть более внимательным, чтобы, я надеюсь, получить ответ ...

Я пытаюсь найти статический указатель и список смещений, чтобы можно было легко находить информацию в игре при каждом ее перезапуске. Я был успешен с каждой частью информации, кроме одной ...

В настоящее время я использую CheatEngine, чтобы помочь мне отладить и найти необходимые пути указателей.

Адрес значения, которое я хочу (который меняется с каждым началом игры) в настоящее время: 849576A Для справки, это первый слот инвентаря моего первого персонажа. Я знаю, что каждый слот смещен на 20 часов, а каждый символ - на 550 часов. Итак, первый слот инвентаря персонажа два - 849576A + 550h. Опять же, эти адреса меняют каждый перезапуск, но смещения не делают.

Используя CE, я могу видеть, какой доступ к этому адресу ... он возвращает следующие коды операций:

Эти два возвращаются, прежде чем делать что-либо в игре:

004b7ef9 - 0f bf 08 - movsx ecx,word ptr [eax]

004b542b - 0f bf 04 0a - movsx eax,word ptr [edx+ecx]

Затем, перемещая предметы в инвентаре, я получаю:

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]

Я не уверен, какой из них использовать, поэтому я просто выбираю один и устанавливаю точку останова для одного из них, я выбрал 004b542b, вот полный раздел кода:

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                         |

Я решил установить точку останова, чтобы я мог видеть значения регистра до и после строки, которая предположительно обращается к моему значению (004B542B | 0FBF040A | MOVSX EAX, WORD PTR [EDX + ECX]).

ДО:

EAX: 00000000
EBX: 00000000
ECX: 000001E0
EDX: 0849558C
ESI: 000000D0
EDI: 013A38A8
EBP: 00189CE0
ESP: 00189CD4
EIP: 004B542B

ПОСЛЕ:

EAX: 00000DAD
EBX: 00000000
ECX: 000001E0
EDX: 0849558C
ESI: 000000D0
EDI: 013A38A8
EBP: 00189CE0
ESP: 00189CD4
EIP: 004B542F

Для меня это означает, что EDX 0849558C должно быть значением, которое я ищу, а затем применить смещение 1E0. Тем не мение. При поиске в памяти шестнадцатеричных значений, соответствующих EDX, я не получаю результатов, что означает, что на этот адрес нет указателей.

Я использовал те же методы, которые я пытаюсь использовать здесь, чтобы успешно собрать каждый статический адрес, а затем применить смещения. Например, вот статический адрес + смещения, чтобы найти мое здоровье: 01263FC8 +284 + C +30 +90

1 Ответ

2 голосов
/ 16 июля 2009

Я наконец понял это. К сожалению, отладка ни к чему не привела, поэтому я начал искать указатели, которые я нашел ранее для своих персонажей. Особенно здоровье и мана, так как они были ближе всего к адресам, которые я получал для своего инвентаря. Я сделал некоторую математику, основываясь на адресе, который я пытался найти, и на указателе, ближайшем к моему здоровью, и нашел смещение Используя это смещение и тот же статический указатель, который я нашел для своего здоровья, я мог каждый раз находить свой инвентарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...