带有远程线程的DLL代码注入:将DLL文件名/位置存储在目标进程地址空间中的何处?

时间:2018-06-26 19:46:31

标签: c dll code-injection createremotethread

可能没有对此问题的(有用的)答复,但无论如何。 我想通过DLL代码注入将代码注入应用程序。 该计划是:

  1. 在目标进程中查找LoadLibrary函数的地址。

  2. 使用目标进程地址空间中某处的WriteProcessMemory()编写一个带有要加载的DLL名称/文件路径的字符串。

  3. 使用CreateRemoteThread()以LoadLibrary()的地址作为入口点,并指向包含要加载的DLL名称/文件路径的字符串的指针作为LoadLibrary()函数的参数来启动远程线程

问题不存在。 2。 我在目标进程地址空间中的什么地方存储字符串(不破坏内容)?

如果以前曾问过这个问题,请随时指向我。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

VirtualAllocEx允许您指定分配内存的过程。您将使用它来分配一块内存。请注意,您不能直接写入返回的地址-它处于不同的过程中。您可以通过WriteProcessMemory来写DLL名称。

如果您打算将代码放置在DllMain中,则不应这样做。 Windows在执行DllMain时会持有内部锁,这会增加死锁的风险,具体取决于您打算在挂钩代码中执行的操作。您可以在DLL中获取函数的地址,并在加载DLL之后再次使用CreateRemoteThread在单独的线程上运行它。

建议您使用已经有人编写的库,例如EasyHook,而不是自己实现所有这些功能,它同时支持托管和非托管注入。