eXeL@B —› Программирование —› GetProcAddress в АП другого процесса |
Посл.ответ | Сообщение |
|
Создано: 19 февраля 2010 07:51 · Личное сообщение · #1 Привет. Прошу мне помочь, так как уже весь извелся и не могу найти решение. Есть цикл debugapi, в котором я запускаю мой таргет, таргет подгружает свою dll через LoadLibrary, вопрос в следующем - как мне из моего цикла debugapi получить адрес функции из dll? ps. GetProcAddress не катит! т.к. он только для АП текущего процесса |
|
Создано: 19 февраля 2010 08:07 · Личное сообщение · #2 |
|
Создано: 19 февраля 2010 14:41 · Личное сообщение · #3 |
|
Создано: 19 февраля 2010 15:09 · Поправил: DenCoder · Личное сообщение · #4 Clerk, если системная dll, то большая вероятность, что да. А если нет? В одном процессе dll может быть загружена по одному адресу, в другом - по другому. Если нужен инжект, то лучше всего присвоить процессу Debug привилегию вот так Code:
Только SE_SHUTDOWN_NAME убрать, если не надо. CreateRemoteThread с LoadLibrary и разбирать секцию импорта или то же самое, только в своем процессе тоже hMod = LoadLibrary или hMod = GetModuleHandle, Addr = GetProcAddress, Disp = Addr - hMod и hDebugProcessProcAddr = hDebugProcessMod + Disp. Базу в чужом процессе можно узнать через PEB вот так Code:
Только, разумеется вставить, где надо сравнение имени модуля и при инжекте скорректировать смещения. Последняя моя версия восстановления от хуков и выгрузки инжектированной dll Code:
Только еще через WriteProcessMemory нужно прописать для всего, что кончается на 'Address' правильные адреса Code:
----- IZ.RU |
|
Создано: 19 февраля 2010 16:06 · Личное сообщение · #5 Нафиг такой изврат? Подгружаем эту же dll в адресное пространство процесса-отладчика, используя LoadLibraryA, далее через GetProcAddress ищем адрес интересующей нас функции, теперь определим через psapi адрес загрузки интересующей нас либы в отлаживаемом процессе. Далее, из значения, которое нам вернуло GetProcAddress вычитаем значение, которое вернуло LoadLibraryA, и получившееся значение плюсуем к адресу, определённого посредством psapi-функций. Всё! ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 19 февраля 2010 16:15 · Личное сообщение · #6 |
|
Создано: 19 февраля 2010 17:26 · Личное сообщение · #7 |
|
Создано: 19 февраля 2010 18:03 · Личное сообщение · #8 |
|
Создано: 19 февраля 2010 18:17 · Личное сообщение · #9 |
|
Создано: 19 февраля 2010 18:53 · Поправил: DenCoder · Личное сообщение · #10 |
|
Создано: 19 февраля 2010 18:57 · Личное сообщение · #11 |
|
Создано: 19 февраля 2010 19:14 · Личное сообщение · #12 Clerk, да приведи пример, как ты еще загрузишь в чужой процесс dll. И тупых вопросов не надо задавать!!! dll - Dynamic Link Library. Получил ты ее хендл в отладчике или загрузил, В ЧУЖОМ ПРОЦЕССЕ ЕЕ НЕТ, ЕСЛИ ОНА НЕ СИСТЕМНАЯ, или отлаживаемое приложение по умолчанию никак не пользуется ей. ----- IZ.RU |
|
Создано: 19 февраля 2010 19:19 · Личное сообщение · #13 |
|
Создано: 19 февраля 2010 19:24 · Поправил: Vitek · Личное сообщение · #14 DenCoder пишет: Ну, без инжекта кода (WriteProcessMemory) или своей dll загрузить dll в чужой процесс возможно еще тремя известными мне способами1) SetWindowHookEx (консольные не подцепляет)2) Через реестр3) Под отладчикомРазве есть еще? ога. например пролезть через окно ( |
|
Создано: 19 февраля 2010 19:28 · Поправил: DenCoder · Личное сообщение · #15 |
|
Создано: 19 февраля 2010 19:29 · Поправил: Модератор · Личное сообщение · #16 |
|
Создано: 19 февраля 2010 19:31 · Личное сообщение · #17 |
|
Создано: 19 февраля 2010 19:34 · Личное сообщение · #18 Code:
|
|
Создано: 19 февраля 2010 19:35 · Личное сообщение · #19 |
|
Создано: 19 февраля 2010 21:01 · Личное сообщение · #20 dll не системная, грузится в некоторый момент через LoadLibraryA и по разным адресам, различные способы с инжектом DLL и CreateRemoteThread требуют обработки событий LOAD_DLL_DEBUG_EVENT и CREATE_THREAD_DEBUG_EVENT соответственно, поэтому возникает дополнительное ненужное кодописание с тучей всяких проверок на валидность DLL или потока, хотелось всего этого избежать найдя какое-нибудь простое и красивое решение n0name, благодарю, похоже на это самое решение, в голову почему-то не пришло попробую |
|
Создано: 19 февраля 2010 21:39 · Поправил: Модератор · Личное сообщение · #21 |
|
Создано: 19 февраля 2010 21:45 · Личное сообщение · #22 Av0id пишет: Привет. Прошу мне помочь, так как уже весь извелся и не могу найти решение. Есть цикл debugapi, в котором я запускаю мой таргет, таргет подгружает свою dll через LoadLibrary, вопрос в следующем - как мне из моего цикла debugapi получить адрес функции из dll?ps. GetProcAddress не катит! т.к. он только для АП текущего процесса Когда-то писал такой код(тестировалось под XP SP2): Code:
|
|
Создано: 20 февраля 2010 11:40 · Личное сообщение · #23 |
|
Создано: 20 февраля 2010 13:49 · Поправил: HiEndsoft · Личное сообщение · #24 Тему вы что-то не закрыли. Я так понимаю результ - фигня. Прислушайтесь к Clerk'у у него бредовые идеи бывают. Но ведь работают. Clerk пишет: Либо удалнно исполнить свой код. _______________ n0name пишет: CreateToolhelp32Snapshot чисточушь юзать dbg ADD: интересно кто какими колесами травится.... я лично второй день шампанским ----- продавец резиновых утёнков |
|
Создано: 20 февраля 2010 15:58 · Личное сообщение · #25 |
eXeL@B —› Программирование —› GetProcAddress в АП другого процесса |
Эта тема закрыта. Ответы больше не принимаются. |