gpt4 book ai didi

c - 是否可以调用驻留在 exe 中的非导出函数?

转载 作者:可可西里 更新时间:2023-11-01 12:18:39 27 4
gpt4 key购买 nike

我想调用驻留在第 3 方 .exe 中的函数并获取其结果。似乎应该有办法,只要我知道函数地址、调用约定等...但我不知道怎么做。

有人知道我该怎么做吗?

我知道任何解决方案都是非标准的 hack,但必须有办法!


我的非恶意用例:我正在为我的软件逆向工程文件格式。这个函数中的计算太复杂了,我的小脑袋无法理解;我已经能够将汇编代码直接拉到我自己的 DLL 中进行测试,但我当然不能发布它,因为那样会被窃取。我假设用户已经预装了这个特定的应用程序,所以我的软件可以运行。

最佳答案

这是可能的,但并非微不足道。是的,这是一个非常肮脏的 hack。

在某些情况下,使用 LoadLibrary 加载 EXE 文件就足够了。返回的 HMODULE 实际上是加载的 EXE 的基地址。将其转换为合适的 int 类型,将您的相对函数地址添加到该类型,将其转换回函数指针并通过该指针调用该函数。

不幸的是,EXE 文件的重定位信息可能已被删除。这意味着 EXE 将期望从特定地址运行。在这种情况下,您必须更改自己程序的基地址以避免冲突。查看链接器的文档,应该有一个选项可以做到这一点。之后,LoadLibrary 会将 EXE 加载到其首选基地址,希望一切正常。

关于这个 here 有一些非常有用的信息.请务必检查页面末尾的更新,了解在某些情况下可能效果更好的不同技术。

编辑:正如 Alex 在下面的评论中正确指出的那样,如果该函数依赖于某个初始化值,或者它调用这样的函数,包括大多数 C 运行时函数,那么制作起来会困难得多这行得通。可以识别初始化函数并预先调用它们,但使用 debug API在这些情况下可能是您最好的选择。

关于c - 是否可以调用驻留在 exe 中的非导出函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10487165/

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