Как правильно выгрузить саму DLL?

Я делаю DLL-инъекцию в процесс после загрузки ntdll.dll. Затем в DllMain (случай события DLL_PROCESS_ATTACH) я вызываю LdrRegisterDllNotification и подождите, когда будет загружена конкретная DLL (например, statistic.dll), функции, которые я хочу подключить. Если statistic.dll не был загружен, мне нужно выгрузить внедренную DLL из процесса.

Главный вопрос: как правильно выгрузить внедренную DLL?

Я хотел реализовать это через другой поток, который будет проверять (через некоторое время) библиотеку statistic.dll в процессе (или конкретный флаг, который я могу установить после statistic.dll loading) и выгрузить внедренную DLL, если она не была загружена. Но насколько я знаю, мы не можем создать поток в DllMain.


person slinkin    schedule 26.05.2019    source источник
comment
насколько я знаю, мы не можем создать поток в DllMain - да, можно. Просто не заставляйте DllMain ждать в потоке или заставляйте поток ждать Dllmain. Это то, что проблематично, а не сам процесс создания потока.   -  person Remy Lebeau    schedule 27.05.2019
comment
вы можете создать собственный поток, и в конце он должен вызвать _ 1_   -  person RbMm    schedule 27.05.2019
comment
Спасибо, парни. Я сомневался в создании темы и хотел выслушать альтернативное мнение о последствиях этого. Я реализовал выгрузку самой dll через FreeLibraryAndExitThread, и она отлично работает.   -  person slinkin    schedule 27.05.2019


Ответы (1)


Чтобы выгрузить свою DLL, используйте FreeLibraryAndExitThread. , убедитесь, что вы отключили все перехватчики и удалили все, что могло вызвать проблемы.

person GuidedHacking    schedule 17.04.2020