MrCath Опубликовано 25 февраля, 2013 Поделиться Опубликовано 25 февраля, 2013 Я нашел адрес динамической переменной, которая отвечает за "рост" персонажа. Но мне нужно изменять эту переменную через скрипт, т.к. адрес этой переменной на каждой карте разный, а но ее обрабатывает одна и таже инструкция в отладчике.Есть инструкция 04CA56C0 89 03 mov [ebx],eaxЯ могу издеваться над кодом как мне угодно... но при перезапуске игры, адрес 04CA56C0 меняется на другой, а в самом 04CA56C0 мусор... типа add [eax],al.Как найти адрес инструкции, имеющий вид, например, blabla.dll +06040 или как нибудь еще решить эту проблему? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 26 февраля, 2013 Поделиться Опубликовано 26 февраля, 2013 Если в СЕ - попробуй включить опцию Show Module Addresses в выпадающем меню View. Тогда, возможно, окажется, что код находится в длл-ке. Но, судя по адресу, мне что-то подсказывает, что код находится не в длл-ке, а в выделенной памяти, и тогда спасает aobscan. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 февраля, 2013 Поделиться Опубликовано 26 февраля, 2013 "Show Module Addresses" как показывает так и отключает модульную адресациюВ скриптах вместо такой записи 0x0000000:mov [ebx],eaxможно использовать с модульной адресацией"xxxxx.dll + 00000"mov [ebx],eax Ссылка на комментарий Поделиться на другие сайты Поделиться
MrCath Опубликовано 26 февраля, 2013 Автор Поделиться Опубликовано 26 февраля, 2013 Спасибо. Про 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 cheatalloc(newmem,2048) //2kb should be enoughlabel(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 accessmov eax, 9999999originalcode:mov [ebx],eaxpop ebxpop ebpretexit:jmp returnherestop_timer2:stop_timer1:jmp newmemreturnhere:[DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)stop_timer1:mov [ebx],eaxpop ebxpop ebpunregistersymbol(stop_timer1)ret//Alt: db 89 03 5B 5D C3Stop grow and become a giant:[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048) //2kb should be enoughlabel(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 accessmov [eax], 9999originalcode:mov eax,[eax]mov ecx,eaxpop eaxexit:jmp returnheregrow2:grow1:jmp newmemreturnhere:[DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)grow1:mov eax,[eax]mov ecx,eaxpop eaxunregistersymbol(grow1)//Alt: db 8B 00 89 C1 58 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения