ПолезностиИсключительно для полезных тем из других разделов. Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.
Господа, назрел вопрос при переходе с ил на хф. Как запустить в олли дебаггере l2.bin если он без апдейтера не запускается? при аттаче виснет. просто запускаю в оле норм но, нет коннекта к серверу. Зараннее спасибо за помощ
Похоже, форум глюкнул, так как пропало сразу несколько сообщений, включая и сообщение xkor'a.
По поводу твоего вопроса - можно попробовать найти статический адрес указателя на объект через несколько дампов, сравнивая значение с тем, что выловишь в ecx. Правда, решение не наилучшее, но хоть какое-то.
Ещё вариант - сдампить сотню байт сверху от места из которого был вызван твой хук, дизассемблить и поглядеть, откуда заполняется ecx.
Отпиши хоть, я правильно твою задачу понял, или вообще не в ту степь?
Последний раз редактировалось qwm, 04.05.2012 в 23:16.
Да правильно, спасибо за идеи. Я пытался использовать брутфорсный метод. Определил область памяти engine.dll и пытался просканить всю память на совпадение с адресом обьекта. Но приложение просто зависало при таком методе. (не смотря на то, что делал в отдельном потоке)
Первое моё предложение - это то же, что ты и делал, только это вовсе не обязательно делать в приложении. Узнай, что лежит в ecx, а далее отдельным приложением снапшотами найди интересующий тебя модуль (базу и размер) и постранично (4096 байт) считывай ReadProcessMemory. Ну, я думаю, переменная выровнена в памяти align 4, так что можешь чуть ускорить процесс сверки, не проверяя побайтно. Если со спец. софтинами для дампа дружишь, то конечно не обязательно самому так извращаться.
Либо второй метод, но это - если ты с асмом дружишь. Адрес возврата в хуке из стека вытащишь и по нему прочитаешь память. А дальше - дизасм и долгое ковыряние.
Пиши, если какие подводные камни будут.
Upd:
не помню, для какого сервера ты спрашивал значение, но на сервере Дефо (там вроде хай-файв 5) эта переменная видимо лежит по rva 0x0077ed80. При этом сама engine.dll не имеет релоков и грузится по адресу 0x20000000, т.е. адрес всегда 0x2077ed80.
на руофе rva 0x008986d4, дллка имеет релоки.
// если кому-то интересно - это адреса, по которым лежат указатели на объект UNetworkHandler.
Последний раз редактировалось qwm, 07.05.2012 в 23:16.
Причина: Upd
Кто-нибудь в курсе, как на Winx32 получить хендл процесса ла2 руофа из юзер-мода? Он себя прячет, походу хукая соответствующие функции в ssdt из кернел-мода.
Вот как-то глупо получается, что я в него свою длл могу подгрузить самым банальным образом через SetWindowsHookEx, а получить хендл процесса - никак, только через дрова.
Изнутри-то - не проблема. Изнутри он и не нужен - годится -1 (INVALID_HANDLE_VALUE). Как раз снаружи кумекаю, можно ли его обдурить.
В принципе, csrss должен иметь хендлы ко всем процессам, можно его там найти и сдупликатить. Но я пока не разобрался, какой объектный тип отвечает хендлам процессов
Последний раз редактировалось qwm, 10.05.2012 в 18:02.