0

给定一个函数地址,如何确定它的签名?

    DWORD funcAddr = 0x63001023; // 任意地址
    char[MAX] 签名 = ? // 可以设计什么算法?  

其原因如下:

有一个exe说Calc.exe,一旦进程在PC“A”上启动

我的 exe 拦截进程的创建并将信号发送到 pc“B”

相同的 calc.exe 开始的地方。

然后用户每次点击、移动、

假设加法的内部过程从 pc“A”传递到 pc“B”,其中

它正在虚拟化。所以操作函数参数的所有资源

出现在电脑“B”上,我只需要一个完美的签名......

因此,即使是从根本上挂钩未知 dll 的危险活动也变得“有点”安全......

请不要建议任何第三方库。

4

2 回答 2

1

你不能这样做。

但是,您可以boost::function使用相同的签名存储并制作map函数地址和 boost::function 对象

在程序中存储函数指针而不是原始地址更安全。

于 2012-08-29T13:07:50.060 回答
1

嗯,第一件事——这并不容易。你可能会放弃。

您需要使用DbgHelp 函数,尤其是在Symbol Handler下。您需要确定调用约定、参数和返回类型。需要担心它需要的类型(UDF)。然后创建这些类型,将它们传递给函数,并使用适当的调用约定调用函数。

RunDLL32.EXE是加载函数、查找函数及其类型并进行调用的工具之一。尝试在命令提示符下运行以下命令:

rundll32 user32.dll LockWorkStation

阅读一些关于 API Hooking 的文章,特别是 Jeffery Ritcher 的一篇文章。

于 2012-08-29T14:50:17.040 回答