DLL 注入两次不起作用

逆向工程 dll dll注入 线 过程
2021-07-09 03:18:05

我创建了一个执行 DLL 注入的程序。它通过使用 来打开进程OpenProcess,将 DLL 路径写入进程并创建一个CreateRemoteThread以 dll 作为参数的远程线程。(DLL 只是产生一个消息框)。它工作得很好,但问题是我第二次看不到消息框。功能OpenProcessCreateRemoteThreadVirtualAllocExWriteProcessMemory都返回true,但我看不到正在创建的线程和DLL不运行。

谢谢。

1个回答

LoadLibrary使用相同的 DLL 名称调用两次只会增加负载计数器,但不会导致再次调用 DLL 入口点。文档(强调我的):

如果指定的模块是尚未为调用进程加载的 DLL,系统将使用 DLL_PROCESS_ATTACH 值调用 DLL 的 DllMain 函数。如果 DllMain 返回 TRUE,LoadLibrary 将返回模块的句柄。如果 DllMain 返回 FALSE,则系统从进程地址空间卸载 DLL,LoadLibrary 返回 NULL。从 DllMain 调用 LoadLibrary 是不安全的。有关详细信息,请参阅 DllMain 中的备注部分。

所以如果你需要再次执行你的代码,你必须明确地做,LoadLibrary不会为你做。

编辑:

一种可能的解决方案是使用(已加载)DLL 中的函数地址,而不是LoadLibrary作为第二个注入线程的地址。