c++ - 注入的 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# - 如何将值从用户控件发送到另一个用户控件
- c# - 关于创建/声明数据类型的问题(int、string、streamreader)
- php - PHP/Symfony API 的 CORS 问题 Nelmio
- python - Numpy,Python中的“拉伸”直方图(级别)
- java - 为什么我的 JTextArea 没有从我的字符串中添加换行符?
- android - 为第三方应用授予运行时权限
- google-api - Google API 计费中 API/会话的差异
- keras - Keras Embedding index在模型训练期间导致负值
- jsf - 托管 bean viewscoped 的参数中的 JSF 空值
- html - 创建容器的最佳方法