如何使用DetourAttach()作为十六进制函数的指针?

时间:2013-06-07 09:55:04

标签: c++ detours

我正在尝试使用绕道库制作教程。

在旧版本的绕行库v1.5中,函数DetourFunction用于定义地址,因此DLL知道在哪里查找函数。

例如可以使用如下:

         InsertDateTime = (int (__stdcall*)(int))DetourFunction((PBYTE)0x01006F10,       (PBYTE)MyInsertDateTime)

请参阅http://www.moddb.com/groups/ibepex/tutorials/function-hooking

但是在较新版本中,该功能更改为

     LONG DetourAttach(
        PVOID * ppPointer,
        PVOID pDetour
     );

其中ppPointer是指向绕行的目标指针的指针。

现在我知道十六进制格式的目标函数地址0x01006F10,我想以某种方式将其用作ppPointer的参数。我试着写一下:

               InsertDateTime = (int (__stdcall*)(int))DetourAttach((PVOID*)0x01006F10, MyInsertDateTime);

它编译得很好但是我的程序没有像我想的那样工作。似乎程序从未从该地址中获取功能。

所以基本上我的问题是,我是否正确使用指向十六进制地址的指针,其次,我在使用DetourAttach()的方式中是否有一些基本错误?

1 个答案:

答案 0 :(得分:3)

您错误地使用了DetourAttach。您案例中的正确用法是:

int(__stdcall* InsertDateTime)(int) = (int(__stdcall*)(int))(0x01006F10);

LONG errorCode = DetourAttach((PVOID*)(&InsertDateTime), (PVOID)MyInsertDateTime);
if(!errorCode) {
    //Detour successful
}

请注意,在ASLR等技术存在的情况下;您应该使用GetProcAddress之类的东西在运行时检索函数的地址,否则您可能会导致损坏或崩溃。