Перейти к содержанию

The Wonderful End of the World динамический адрес инструкции


Рекомендуемые сообщения

Я нашел адрес динамической переменной, которая отвечает за "рост" персонажа. Но мне нужно изменять эту переменную через скрипт, т.к. адрес этой переменной на каждой карте разный, а но ее обрабатывает одна и таже инструкция в отладчике.

Есть инструкция 04CA56C0 89 03 mov [ebx],eax

Я могу издеваться над кодом как мне угодно... но при перезапуске игры, адрес 04CA56C0 меняется на другой, а в самом 04CA56C0 мусор... типа add [eax],al.

Как найти адрес инструкции, имеющий вид, например, blabla.dll +06040 или как нибудь еще решить эту проблему?

Ссылка на комментарий
Поделиться на другие сайты

Если в СЕ - попробуй включить опцию Show Module Addresses в выпадающем меню View. Тогда, возможно, окажется, что код находится в длл-ке. Но, судя по адресу, мне что-то подсказывает, что код находится не в длл-ке, а в выделенной памяти, и тогда спасает aobscan.

Ссылка на комментарий
Поделиться на другие сайты

"Show Module Addresses" как показывает так и отключает модульную адресацию

В скриптах вместо такой записи

0x0000000:

mov [ebx],eax

можно использовать с модульной адресацией

"xxxxx.dll + 00000"

mov [ebx],eax

Ссылка на комментарий
Поделиться на другие сайты

Спасибо. Про Show Module Addresses я знал и он у меня включен, но дела это не изменило.

Интересно то, что как раз хотел на неделе разобрать, что делает aobscan с подробным разбором кода на C++ (слишком часто говорят про сканер нынче). Вот на небольшой практике чуть разобрался.

Для тех, кому интересно:

Вот файл с рабочими скриптами на быструю руку (остановка и увеличение таймера, остановка роста и стать гигантом)

http://rghost.net/44122082

или

Stop timer and get a lot seconds:

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(originalcode)

label(exit)

label(stop_timer1)

registersymbol(stop_timer1)

aobscan(stop_timer2,89 03 5B 5D C3 00 00 5B)

newmem: //this is allocated memory, you have read,write,execute access

mov eax, 9999999

originalcode:

mov [ebx],eax

pop ebx

pop ebp

ret

exit:

jmp returnhere

stop_timer2:

stop_timer1:

jmp newmem

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

dealloc(newmem)

stop_timer1:

mov [ebx],eax

pop ebx

pop ebp

unregistersymbol(stop_timer1)

ret

//Alt: db 89 03 5B 5D C3

Stop grow and become a giant:

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(originalcode)

label(exit)

label(grow1)

registersymbol(grow1)

aobscan(grow2,8B 00 89 C1 58 89 C2 C1 FA 16 C1 E0 0A)

newmem: //this is allocated memory, you have read,write,execute access

mov [eax], 9999

originalcode:

mov eax,[eax]

mov ecx,eax

pop eax

exit:

jmp returnhere

grow2:

grow1:

jmp newmem

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

dealloc(newmem)

grow1:

mov eax,[eax]

mov ecx,eax

pop eax

unregistersymbol(grow1)

//Alt: db 8B 00 89 C1 58

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.