没有目标DLL的钩子函数

Hook functions with no target DLL

本文关键字:子函数 DLL 目标      更新时间:2023-10-16

我正在为exe编写一个分析工具。我有这个exe的源代码,所以我知道它使用哪些函数。我需要挂钩两个特定的函数,这样我就可以检查传递的参数。我感兴趣的函数不是任何DLL的一部分,但它们是程序的一部分。

我开始使用弯路写一个钩子DLL拦截函数调用。我编写了钩子DLL,在那里我指定了要钩子的函数,但不幸的是,因为没有DLL可以引用,当我编译钩子DLL时,我无法解析函数名称。

我该如何解决这个问题?

这不是一个完美的解决方案,但它将解决您的问题:

你可以通过在目标程序中做这样的事情来获得函数的相对偏移量:

int FuncToGet()
{
    int x = 5;
    return x;
}
int main()
{
    intptr_t baseAddr = (intptr_t)GetModuleHandle(NULL);
    intptr_t relativeoffset = baseAddr - (intptr_t)&FuncToGet;
    std::cout << "Relative offset = 0x" << std::hex << &relativeoffset;
}

你可以用它打印出你想要挂钩的函数的相对偏移量。

然后将相对偏移量添加到目标进程中模块的基址,这是您在运行时获得的。

然后你可以使用这个地址来挂钩函数