C ++函数钩子里面的DLL源代码

时间:2011-07-03 11:00:07

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

我有来自C ++ DLL的源代码。此DLL是应用程序的一部分。我想挂钩由另一个DLL加载到内存中的函数,以便我的钩子函数被所有其他DLL而不是原始函数调用。我把这段代码放在我的代码中:

#include <windows.h>
#include "detours.h"
#pragma comment(lib, "detours.lib")

//Function prototype
int (__stdcall* OriginalFunction)(); 

//Our hook function
int FunctionHook()
{
    //Return the real function
    return OriginalFunction(); 
}

//On attach set the hooks
OriginalFunction = (int (__stdcall*)())DetourFunction((PBYTE)0x0100344C, (PBYTE)FunctionHook);

问题是:如果我在一个DLL中搜索偏移量并通过此偏移量修补函数是不是错误(我认为它更复杂,因为我在另一个DLL中并想要挂钩所有DLL的函数)?顺便问一下,有人知道如何在IDA PRO中获得标准(fex.0x0100344C)偏移吗?

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试使用微软,这是Windows平台上的一个钩子系统。 Detours正在使用“trampline hook”。简单来说,它会尝试“重写”函数的前面几个ASM指令,并将真实调用重定向到您的特定函数,就像这样。 Detours可以帮助您处理这些细节。但是我没有看到任何关于弯路的代码,所以我认为你需要学习一些关于弯路基本用法的文档。

对于你的问题:
  OriginalFunction只是指向特定地址的变量。重写此变量不会影响实际调用。因为你的程序仍然会使用原始地址调用,你只需更改变量,而不是内部程序    当您将内存重写为钩子函数时,这种正常只会影响当前进程,因为Windows NT下的程序使用的是虚拟地址,而不是真实的内存地址。