ПолезностиИсключительно для полезных тем из других разделов. Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.
Да правильно, спасибо за идеи. Я пытался использовать брутфорсный метод. Определил область памяти 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.
Привет всем. Есть вопрос по поводу перехвата UNetworkHandler:ispatchNetworkQueue(NetworkPacke t * *)
Я не могу понять как работать с "NetworkPacket * *" что значат две звездочки? указатель на указатель?
и как получить доступ к пакету если указатель на указатель? делаю так:
Клиент критует, если убрать отсылку пакета боту(закомментить IF блок) то все работает нормально. Т.е. получается перехват работает, а доступ к пакету - критует. Что не так - не могу понять подскажите?
ЗЫ: ошибки в методе SendToBot быть не может, проверяю отправку через перехваченную функцию UNetworkHandler_AddNetworkQueue_hook(UNetworkHandl er* This, int fEDX /*edx*/, NetworkPacket* packet) все отлично работает, но юзать эту функцию не хочу т.к. палится.
Я не могу понять как работать с "NetworkPacket * *" что значат две звездочки? указатель на указатель?
Да, это указатель на указатель.
Советую прочитать это тему от начала и до конца, скил по хукам возрастет в несколько раз. вопрос по перехвату этой функции задавался в этой теме несколько раз и даже приводились готовые куски кода (правда на дельфи). Не ленись, вдумчиво изучи тему, много чего полезного узнаешь
maxilam, спасибо - было дело - перечитывал тему. С пакетом разобрался - просто не всегда указатель указывает на указатель - иногда на 0 Ведь функция вызывается в цикле потока и не всегда есть пакет который нужно обрабатывать все оказалось проще.