使用远程线程注入 DLL 代码:目标进程地址 space 中的 DLL filename/location 存储位置?

DLL code injection with remote Thread: Where to store DLL filename/location in target process address space?

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

  1. 找到目标进程中LoadLibrary函数的地址

  2. 在目标进程地址 space.

    [= 的某处使用 WriteProcessMemory() 编写一个包含我要加载的 DLL 的 name/filepath 的字符串30=]
  3. 使用 CreateRemoteThread() 启动一个远程线程,以 LoadLibrary() 的地址作为入口点,并指向包含要加载的 DLL 的 name/filepath 的字符串的指针作为参数对于 LoadLibrary() 函数。

问题在第。 2. 我在目标进程地址 space 中的什么位置存储字符串(不破坏某些东西)?

如果以前有人问过这个问题,请随时指点我。

非常感谢您的帮助。

VirtualAllocEx allows you to specify the process in which memory is allocated. You would use this to allocate a block of memory. Note that you cannot write directly to the returned address--it is in a different process. You would write the DLL name via WriteProcessMemory.

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

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