钩子函数没有目标DLL

时间:2014-03-24 14:56:15

标签: c++ dll hook dll-injection detours

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

我开始使用Detours编写一个拦截函数调用的挂钩DLL。我编写了挂钩DLL,我在其中指定了要挂钩的函数,但遗憾的是,由于没有DLL可供参考,当我编译挂钩DLL时,我无法解析函数名称。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

您可以通过在目标程序中执行以下操作来获得函数的相对偏移量:

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;
}

您可以使用它来打印要挂接的功能的相对偏移量。

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

然后您可以使用该地址挂接功能