C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”

Posted

技术标签:

【中文标题】C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”【英文标题】:C++ Detours 3.0 express on MVS 2012 error "identifier not found" 【发布时间】:2013-04-15 11:03:59 【问题描述】:

我的编译器:Microsoft Visual Studio 2012。 我的代码在 detours 2.1 上可以正常工作,但我不能再用我的编译器编译它(模块对 SAFESEH 图像不安全。)。我需要使用像 MVS2005 这样的旧编译器,但我不想这样做。

所以我需要更新我的代码并使用 detours 3.0。

编辑了一些东西,得到了 4 个错误。

error C3861: 'DetourFunction': identifier not found
error C3861: 'DetourFunction': identifier not found
error C3861: 'DetourRemove': identifier not found
error C3861: 'DetourRemove': identifier not found

这是代码块:

此处出现DetourFunction错误

o_NtQuerySystemInformation = (t_NtQuerySystemInformation)DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation"), (PBYTE)My_NtQuerySystemInformation);
o_ZwOpenProcess = (t_ZwOpenProcess)DetourFunction((PBYTE)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwOpenProcess"), (PBYTE)My_ZwOpenProcess);

DetourRemove 此处的错误

    DetourRemove((PBYTE)o_NtQuerySystemInformation, (PBYTE)My_NtQuerySystemInformation);
    DetourRemove((PBYTE)o_ZwOpenProcess, (PBYTE)My_ZwOpenProcess);

更新

所以我尝试将其更改为 DetourAttach 和 DetourDetach,但我收到 PBYTE to PVOID 错误。

【问题讨论】:

你从哪里得到这个错误?显示代码。 这是完整的代码:pastebin.com/XtfSHxBL 嘿,任何人点击这个页面我可能有同样的 pbyte/pvoid 错误,可能看这里:[link]***.com/questions/21591698/… 【参考方案1】:

DetourFunctionDetourRemove 已替换为 DetourAttachDetourDetach。使用它们并不难,并且该库附带了一组示例,您可以在其中了解如何使用这些 API。您的代码应如下所示:

BOOL APIENTRY DllMain( HANDLE hModule, 
                      DWORD  ul_reason_for_call, 
                      LPVOID lpReserved
                      )

   if (ul_reason_for_call == DLL_PROCESS_ATTACH)
   
      o_NtQuerySystemInformation = (t_NtQuerySystemInformation)DetourAttach(&(PVOID&)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation"), My_NtQuerySystemInformation);
      o_ZwOpenProcess = (t_ZwOpenProcess)DetourAttach(&(PVOID&)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwOpenProcess"), My_ZwOpenProcess);

      MyModuleHandle = (HMODULE)hModule;
      MyPid = GetCurrentProcessId();
   
   if (ul_reason_for_call == DLL_PROCESS_DETACH)
   
      DetourDetach(&(PVOID&)o_NtQuerySystemInformation, My_NtQuerySystemInformation);
      DetourDetach(&(PVOID&)o_ZwOpenProcess, My_ZwOpenProcess);
   

   return TRUE;

【讨论】:

我知道这个帖子是个墓地,但 detours 真的让我头疼。 o_NtQuerySystemInformation 是对什么的引用? ntdll.dll 中指向 t_NtQuerySystemInformation 的指针的指针?这将如何定义?

以上是关于C++ Detours 3.0 express on MVS 2012 错误“找不到标识符”的主要内容,如果未能解决你的问题,请参考以下文章

Detours 3.0 钩子 GetProcAddresss()

C++——Detours(Win32 API劫持)——劫持类方法

C++——Detours(Win32 API劫持)——劫持类方法

如何在 C++ 中使用 Detours 扩展程序内函数而不进入无限循环?

Detours Hook:GetVolumeInformation 随机卷序列

Detours改动段属性漏洞