首页 > 解决方案 > 注入的 DLL 立即被卸载

问题描述

我正在使用C++将 DLL 注入到正在运行的进程中。一个很好的源代码库在这里(这是我正在使用的)。对于一个简短的示例,您可以使用问题中的代码。我的问题是注入后,DLL立即再次卸载。例如,当附加调试器时,我可以观察到加载DLL的 s ,它说以下内容:x64Dbg

Thread 7CC8 created, Entry: <kernel32.LoadLibraryA>
DLL Loaded: 0000000001110000 D:\MyDLL.dll
DLL Unloaded: 0000000001110000 mydll.dll
Thread 7CC8 exit

我调试了注入,它总是发生在CreateRemoteThread()设置和运行线程的类似方法上。

为什么会发生这种情况以及如何防止进程卸载DLL?我已经看到类似这样的评论建议使用GetModuleHandleEx,但我不确定在代码中的何处以及如何使用它。在目标进程中查找地址时LoadLibrary还是需要在注入时调用DLL?那么方法调用会是什么样子呢?

loadLibAddr = GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryA");

另一个建议是反复打电话LoadLibrary,但究竟是什么时候?该过程已经在线程创建后卸载了DLL,所以我不确定如何做到这一点。

Reflective injection不起作用(例如GetReflectiveLoaderOffset()返回0)。我也在使用完整的64-bit应用程序。

我知道这是可能的,因为我已经看到另一个应用程序发生了持久注入。

标签: c++windowsdebuggingdll-injection

解决方案


推荐阅读