Уважаемые реверсеры, думаю Вы мне поможете, сам я не обладаю достаточными знаниями в этом искусстве. Вообщем в игре значение X хранится по адрессу: 0xADDRESS_1. После перезапуска игры оно меняет значение и знач. X уже находится по адрессу: 0xADDRESS_2. Я пробую искать ссылку на эти адреса, и нахожу главный адресс 0xMAINADDRESS ( в нем как обычно в таком случае хранится значение для получения адресов 0xADDRESS_1, 0xADDRESS_2 и т.д) Ну может я зря это рассказываю, это все не ново для тех, кто когда-либо писал трейнеры к DMA играм. Проблема в том, что pointer address (0xMAINADDRESS) меняется тоже, но иногда, например, когда перезапускается ОС. Можно ли как-то выципить этот адресс, используя статические смещения?
Exe + dll будет мало, поскольку это игра, а в ней много файлов, как знаете, без которых она не запустится. Возомжно искомый адресс в библиотеке, я в этом не очень понимаю (как его найти). А можете предположить каким образом получить адресс? Не будете же вы качать все игру, для того, чтобы реверсить ее. Сейчас имею: 0xMAINADDRESS^ + 0xOFFSET = 0xMYADDRESS где 0xMAINADDRESS^ - значение из MAINADDRESS (его знаю) 0xOFFSET - соответственно оффсет (тоже знаю) 0xMyAddress - искомый адресс, который в итоге нужно получить и изменить скажем в нем значение. MAINADDRESS меняется, часто после перезагрузки ОС
Требуются только библиотеки и exe для загрузки в отладчик этого достаточно. Магические формулы тоже не ахти данные, лучше приводите примеры конкретных адресов а-ля 0x734873FDA
>> Скачать Есть ли смысл? Игра сетевая к тому же и запускается с лоадера. То есть если будете запускать ехе, выскочит сообщение... Хотя его успешно можно обойти и оно запустится. Так же достаточно просто перетащит любую длл на этот ехе и запустится. Я думал, что меня просто просветят, и укажут правильный путь Ну вот на реальных адресах: Ищу с помощьюю artMoney -> получаю 0x02A779A0 - искомый. Далее ищу это значение по всему диапозону -> получаю 0x03F65FDC. А вот это значение не знаю как выцепить
Используем Games Invader плагин для ollydbg и ищем с его помощью, ставим бряки на адреса и найдем код который там орудует. А судя по адресам загрузки в этой области данные а не библиотеки. Как-то так.
Спасибо огромное, вот уже что-то! Не знал о таком плагине, попробую. Не закрывайте пожалуйста тему, скорей всего возникнет вопрос по этому плагину
Кстати, я в действительности ищу не числовое значение, а текстовое. И то что вы говорите, что судя по адресам это не библиотеки, а данные. Возможно тут другой подход?
Подход практически такой же, ставим точку останова на dword адрес которого равен адресу началу строки (надеюсь понятно излагаю) и ждем срабатывания.
neprovad, сделал все как Вы и сказали: Ищу текстовое значение 02A979A0 - адрес начала строки. Затем ставлю бряк на запись в это значение, меня кидает на следующий код: Состояние регистров в момент breakpoint Code: EAX = 03F25FB8 EDX = 00000000 EBP = 0018FDF0 EBX = 00000004 ESI = 02A979A4 ESP = 0018FDE4 ECX = 02A979A0 EDI = 0018FE54 EIP = 1029CFC4 Code: 1029CFBF - eb 03 - jmp cuicreatechar::setcharaterangle+4004 [COLOR=DarkOrange]1029CFC1 - c6 06 00 - mov byte ptr [esi],00[/COLOR] //точка останова 1029CFC4 - 8b 70 48 - mov esi,[eax+48] //указатель на начало строки 1029CFC7 - 8b 48 4c - mov ecx,[eax+4c] //длинна строки 1029CFCA - 4e - dec esi 1029CFCB - 3b d9 - cmp ebx,ecx 1029CFCD - 89 70 48 - mov [eax+48],esi 1029CFD0 - 7d 04 - jnl cuicreatechar::setcharaterangle+4016 1029CFD2 - 49 - dec ecx 1029CFD3 - 89 48 4c - mov [eax+4c],ecx 1029CFD6 - 5f - pop edi 1029CFD7 - 5e - pop esi 1029CFD8 - 5b - pop ebx Это все в чем я смог разобраться Может быть для Вас тут будет понятно что к чему. Я сам первый раз дизассамблирую и не умею пользоваться ollyDbg, поэтому все в такой форме неудобной. p.s. Побольше бы таких отзывчивых людей на форуме, как neprovad. Эх...на Вас одна надежда
engine.dll : 0x1029CE60 - бряк и смотреть откуда вызов идет (см. первый dword в стеке). Сама функция просто копирует память, т.е. переменная уже создана (если речь о том как найти ее создание) и просто куда-то перемещается. Менеджер памяти в работе или что-то похожее на него. Следовательно надо смотреть куда копируется p.s. не каждое первое срабатывание в играх верное
Code: HMODULE hExe = GetModuleHandle("Game.exe"); DWORD ADDR = 0xADDRESS_CUR - hExe; Game.exe - название процесса ADDRESS_CUR - текущий адрес нужной переменной ADDR - адрес в exe Потом сможешь сделать hExe + ADDR и будет адрес переменной.
Целый день пробую, но ничего не получается. Запускаю игру, затем OllyDbg, аттачусь к процессу и попадаю в ntdll.dll. Не могу из нее выйти. Говорю, я первый раз взялся за отладчик Знаю немного теории только. Блин, видимо не судьба Такое не прокатит. Каждый раз буду получать разный адресс. Поэтому важно проследить, где формируется адресс
Работать в отладчике и пользоваться artmoney разные вещи) можно почитать введение в ollydbg с нуля. Гораздо проще запускать игру сразу из под отладчика, предварительно поставить точки останова и потом уже жать F9 для продолжения. Внутри ntdll блуждать не надо, сразу переходите к искомым адресам. И все таки прочитайте статьи, будет больше пользы
я иногда на оллидбг забиваю и юзаю CheatEngine - даже ей можно и пропатчить и отладить и отследить что куда обращается и тд. но самое главное - это пройти обучающий тутор (предлагается при первом запуске)
Ага, я тоже пользуюсь CheatEngine. OllyDbg для меня сложноват, даже после прочтения статей от Навара. Я обнаружил что адресс можно получить вроде бы так: 2910000 + 10923C = 02A1923C ____||____________||__________||________ Allocation Base__|__ Offset__|__Pointer Address и по адресу Pointer Address (02A1923C) находится адресс начала строки. Вопрос в том, можно ли как то программно определить Allocation Base? Это ведь адресс начала какого-то блока данных?!
Например попробовать бряк на VirtualAlloc или воспользоваться winapioverride32 и потом смотреть по логам когда вызов выделения памяти вернул буфер с таким адресом
Всем спасибо за пищу для мозгов! В результате у меня получилось вычипить адрес, однако не совсем так как я хотел. С winapioverride32 было тяжело справится, не понятно много. Еще раз спасибо за обсуждения.