gpt4 book ai didi

c - 在进程启动时编辑 IAT(重定向到另一个 DLL)

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:10 27 4
gpt4 key购买 nike

我有一个应用程序 X,它使用 DLL 文件 A 中的函数并在其 IAT 中引用它。我想以编程方式(不是手动修补)强制 X 加载具有模拟功能的替换 DLL B,换句话说,更改 IAT,以便加载我的文件 B.dll。举例说明:

X's IAT: A.TestFunction

在流程开始之前,我想将其更改为

B.TestFunction

我想在进程启动时执行此操作:启动器修改 X.exe 的 IAT(同样,不修补 HDD 文件;我的意思是一次性更改),然后真正启动进程,所以我需要以编程方式执行此操作,仅修补 IAT 不是一种选择。

在这种情况下,IAT Hook 并不是我想要的,因为我不想覆盖 Windows 加载程序加载的过程,而是希望它在启动时加载我的 DLL。当然,可以创建一个虚拟的 A.dll,并将函数转发给 B.dll,但我希望文件尽可能少,所以我正在寻找更好的解决方案。

应用程序不是我的,我无权访问源代码,因此修改它是不可能的。

问题:我应该使用什么 API 来创建上述加载程序,能够在启动之前修补 .exe 的 IAT?

最佳答案

如果您想用自己的 DLL 替换其中一个加载的 DLL,实际上非常简单。

您可以使用 LordPE(PE 编辑器 -> 目录 -> 导入表(不是 IAT!))获取导入列表,特别是您将获得每个导入的 DLL 的“名称 RVA”。

screenshot of LordPE

这是该 DLL 名称在二进制文件中的存储地址。例如,在我的屏幕截图中,如果您查看 RVA 0x1A46C,您将看到字符串“SHELL32.dll”。使用您最喜欢的十六进制编辑器就地编辑字符串,或者在其他地方添加新字符串并更改 LordPE 中的“Name RVA”以指向您的新字符串。

现在,如果您想以编程方式做同样的事情,方法是完全相同的,但您必须完成 LordPE 的工作。即解析PE头。如果您想了解有关如何解析它的更多信息,可以查看此问题:PE File Parsing c/c++

关于c - 在进程启动时编辑 IAT(重定向到另一个 DLL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27825264/

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