gpt4 book ai didi

c++ - GetModuleHandle(),用于另一个进程中的 DLL

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:31 26 4
gpt4 key购买 nike

标题真的解释了这一切,我有一个进程进入另一个进程。我需要能够在这个程序上为某个不是 Windows 标准的 DLL 获取模块句柄,而且我没有主程序的源代码。

我需要使用它来调用带有 GetProcAddress 的导出函数,最后在 CreateRemoteThread 中使用它来远程启动该程序上的任务。

我是否可以从另一个程序而不是它用来创建远程线程的本地程序获取 ModuleHandle?

谢谢。

最佳答案

我看到了三种可能的解决方案。据我所知,没有任何 Windows API 允许您获取另一个进程中模块的函数地址。


解决方案一:

最简单的解决方案,IMO,是将 DLL 注入(inject)目标进程并从目标进程本身检索所有需要的信息。有很多不同的方法可以让你的 DLL 进入目标进程,我最喜欢的是 Reflective DLL Injection .


解决方案 2:

解决方案 2 使用 EnumProcessModules ( Usage ) 从另一个进程获取 HMODULE 引用。您不能在直接调用 GetProcAddress 时使用它们。解决这个问题的方法是使用 LoadLibraryEx 将 DLL 加载到您的进程中。 (“MODULE_NAME”,NULL,DONT_RESOLVE_DLL_REFERENCES)。在成功加载模块后,这将为您提供一个 HMODULE 实例,您可以将其传递给 GetProcAddress

GetProcAddress 返回的地址只对您的地址空间有效,但幸运的是它也是相对于模块基址的。通过从地址中减去您的HMODULE引用,然后将其添加到目标进程中的HMODULE引用,您将获得目标进程中函数的地址。

例如:targetProc = myProc - myModule + targetModule; 其中 myProc 是一个 char *,myModule 和 targetModule 是 HMODULE


解决方案 3:

解决方案 3 是最难实现的 IMO。此解决方案需要您读取目标的进程内存以定位所需的模块,然后解析模块以找到函数地址。

可以找到此解决方案的资源 herehere .


我没有亲自测试解决方案 2 或 3,但理论上它们应该有效。我个人使用过解决方案 1,并建议将其作为实现此目的的方法。其他两个解决方案需要大量样板代码来模拟现有的 Windows API 方法。

关于c++ - GetModuleHandle(),用于另一个进程中的 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26395243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com