Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Как перехватить управление процессом до выполнения функции DllMain
Посл.ответ Сообщение

Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 января 2007 10:39
· Личное сообщение · #1

Вопрос такой: Делаю перехватчик функций в заданной программе. Запускаю исследуемый процесс функцией CreateProcess
с флагами CREATE_NEW_CONSOLE or CREATE_SUSPENDED. Потом с помощью функции CreateRemoteThread внедряю свою dll для перехвата Api. Потом с помощью ResumeThread запускаю иследуюмый процесс. Но вызов фунции DllMain моей dll стартует после вызова функции DllMain всех статических dll определенных в иследуемом процессе, в результате чего приложение может противодействовать перехвату заранее на этапе загрузки определив точки входа перехватываемых функций, а также возможно и начальный фрагмент кода входа в функции. Есть ли мысли как обойти данное ограничение?
P.S. На wasm.ru предложили для этих целей использовать DebugAPI (LOAD_DLL_DEBUG_EVENT)
Насколько затормозится работа приложения в режиме пассивной отладки (приложение тайм критикал -
движок Unreal) Насколько реально приложению засечь отладку?
А самое главное есть ли еще другие варианты решения данной проблемы?




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 19 января 2007 10:44
· Личное сообщение · #2

Goldy пишет:
А самое главное есть ли еще другие варианты решения данной проблемы?

Если я тебя правильно понял, то загружай длл с пом. LoadLibrary с флагом DONT_RESOLVE_DLL_REFERENCES, а потом - проинициализируй ее с пом. CreateThread(DllMain...)



Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 января 2007 10:52
· Личное сообщение · #3

Не неправильно понял Dll прилинкованы статически к запускаемому файлу и процедура DllMain в них вызывается автоматически при создании процесса функцией CreateProcess даже с CREATE_SUSPEND (системным потоком) паралельно с моим потоком внедряющим мою длл и устанавливающей перехват.
И не факт что моя длл успеет перехватить функции раньше dll программы.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 19 января 2007 11:07
· Личное сообщение · #4

Goldy
можно попробовать подменить данную длл своеи(в смысле в импорте), в которой будут переходники на функции той длл. Когда при старте твоя длл получит управление - ставь свои хуки и грузи оригинальную длл-ку.




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 19 января 2007 11:09
· Личное сообщение · #5

Goldy пишет:
Dll прилинкованы статически к запускаемому файлу

Первое что приходит в голову - убрать ее из импорта и загружать вручную



Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 января 2007 12:42
· Личное сообщение · #6

Ну это очевидный ответ. Можно вобще свой враппер написать. Просто интересовали другие варианты
решения допустим для динамических длл есть способ описанный на wasme 90210 / HI-TECH, может для CreateProcess тоже есть подобные трюки.



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 19 января 2007 14:23
· Личное сообщение · #7

посмотри на LdrGetProcedureAddress - она вызывается до загрузки всех dll


 eXeL@B —› Программирование —› Как перехватить управление процессом до выполнения функции DllMain
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати