我正在使用C++
将DLL注入正在运行的进程中。 here是一个很好的源代码库(这是我正在使用的代码库)。举一个简短的例子,您可以使用this问题中的代码。我的问题是注入后,DLL
立即被再次卸载。我可以观察到x64Dbg
中加载的DLL
的情况,例如,当调试器连接时,它显示以下内容:
Thread 7CC8 created, Entry: <kernel32.LoadLibraryA>
DLL Loaded: 0000000001110000 D:\MyDLL.dll
DLL Unloaded: 0000000001110000 mydll.dll
Thread 7CC8 exit
我调试了注入,它总是在CreateRemoteThread()
或类似的设置和运行线程的方法上发生。
为什么会发生这种情况,以及如何防止进程卸载DLL
?我已经看到像this one这样的注释,建议使用GetModuleHandleEx
,但是我不确定在代码中的何处以及如何使用它。在目标进程中找到LoadLibrary
的地址时,还是需要在注入的DLL
中调用它?这样的方法调用会是什么样子?
loadLibAddr = GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryA");
Another suggestion was to repeatedly call LoadLibrary
,但是什么时候?创建线程后,该过程已经卸载了DLL
,所以我不确定该怎么做。
Reflective injection
不起作用(例如GetReflectiveLoaderOffset()
返回0
)。我还正在处理完全64-bit
个应用程序。
我知道这是可能的,因为我已经看到另一个应用程序进行了持久注入。