Сейчас на форуме: zds (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› База модуля в остановленном процессе |
Посл.ответ | Сообщение |
|
Создано: 09 сентября 2012 18:28 · Поправил: tomac · Личное сообщение · #1 Здравствуйте, уважаемые форумчане! Прошу прощения, если такой вопрос уже был, и я недостаточно качественно воспользовался поиском. Стоит задача узнать базовый адрес главного модуля остановленного процесса. Зачем: надо исправить код на точке входа процесса до старта, для этого надо узнать, куда точка входа попала. RVA знаю, базу не знаю в силу ASLR. Процесс запускаю с CREATE_SUSPENDED. Если попробовать перечислить модули процесса через CreateToolhelp32Snapshot, данные я не получаю. Только для процессов с живым потоком работает. Могу получить список модулей изнутри процесса (CreateRemoteThread), но тогда первым потоком процесса оказывается не главный поток, а мой созданный удаленно. В результате, подгрузка статически прилинкованных библиотек идет из этого потока, и в результате common controls в процессе перестает работать. Возможно, что-то еще, чья инициализация зависит от потока (или activation context'a). Собственно, решение вижу несколькими способами: 1. Найти базу главного модуля до старта потоков (есть одно решение в инете, но оно мне кажется крайне кривым - перечисление всех выделенных для процесса регионов памяти с проверкой флагов). Когда база найдена, на EP сделать jmp eip; внедрить поток. 2. Внедрить поток до старта основного потока, потвикать activation context, или перехватить все isolation-aware функции и перевызвать все DllMain всех библиотек (comctl32.dll, в основном). Почему-то, кстати, у меня не получилось это сделать с CreateWindowEx, он всё равно ругается на отсутствие класса окна. Главный вопрос - можно ли узнать базу главного модуля остановленного процесса? Альтернативно - остановить процесс ровно на EP, не до инициализации библиотек. Спасибо! Vovan666 Спасибо, то, что надо! ![]() |
|
Создано: 09 сентября 2012 18:46 · Поправил: Vovan666 · Личное сообщение · #2 |
|
Создано: 09 сентября 2012 19:05 · Поправил: ARCHANGEL · Личное сообщение · #3 |
|
Создано: 10 сентября 2012 14:22 · Личное сообщение · #4 |
|
Создано: 10 сентября 2012 14:43 · Личное сообщение · #5 ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 10 сентября 2012 15:28 · Личное сообщение · #6 ClockMan If the module list in the target process is corrupted or not yet initialized, ... EnumProcessModules may fail or return incorrect information. Судя по исправленному первому посту, вопрос решён, закрою тогда. ![]() |
![]() |
eXeL@B —› Программирование —› База модуля в остановленном процессе |
Эта тема закрыта. Ответы больше не принимаются. |