标题确实解释了这一切,我有一个进程利用另一个进程。我需要能够在该程序上获取某个非 Windows 标准的 DLL,并且我没有主程序的源代码。
我需要使用它通过 GetProcAddress 调用导出函数,并最终在 CreateRemoteThread 中使用它来远程启动该程序上的任务。
无论如何,我是否可以从另一个程序获取 ModuleHandle,而不是它用来创建远程线程的本地程序?
Thanks.
我看到了三种可能的解决方案。据我所知,没有 Windows API 允许您获取另一个进程中模块的函数地址。
解决方案一:
在我看来,最简单的解决方案是将 DLL 注入目标进程并从目标进程本身检索所有需要的信息。有很多不同的方法可以让你的 DLL 进入目标进程,我最喜欢的是反射DLL注入.
解决方案2:
解决方案2使用枚举进程模块 ( Usage) 获取HMODULE
来自另一个进程的引用。您不能在调用中使用这些GetProcAddress
直接地。解决这个问题的方法是使用以下命令将 DLL 加载到您的进程中加载库Ex( "MODULE_NAME", NULL, DONT_RESOLVE_DLL_REFERENCES )
。在成功加载模块后,这将为您提供HMODULE
您可以传递给的实例GetProcAddress
.
返回的地址来自GetProcAddress
仅对您的地址空间有效,但幸运的是它也相对于模块基址。通过减去你的HMODULE
从地址引用,然后将其添加到HMODULE
在目标进程中引用,就会得到目标进程中该函数的地址。
Ex: targetProc = myProc - myModule + targetModule;
其中 myProc 是char *
myModule 和 targetModule 是HMODULE
.
解决方案3:
在我看来,解决方案 3 是最难实施的。此解决方案要求您读取目标的进程内存以找到所需的模块,然后解析模块以查找函数地址。
可以找到此解决方案的资源here and here.
我没有亲自测试过解决方案 2 或 3,但理论上它们应该可行。我个人使用过解决方案 1,并建议将其作为实现此目标的方法。另外两个解决方案需要大量样板代码来模拟现有的 Windows API 方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)