c++ - 如何检测API Hook?

标签 c++ api assembly hook detection

我一直在尝试检测 API Hook、inline 和 EAT hook。

目前我没有找到任何关于如何检测 EAT hook 的信息。

对于 Inline Ring 3 hook,我目前拥有的是:

FARPROC Address = GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitProcess");
if (*(BYTE*)Address == 0xE9 || *(BYTE*)Address == 0x90 || *(BYTE*)Address == 0xC3)
{
 printf("Api hooked\n");
}

问题是有几个操作码可用于 Hook /更改函数的序言,检查 JMP/NOP/RET 是微不足道的,我见过很多 HOOK 类型,如 PUSH RET、MOV、RETN 等...

不知道有没有人知道如何检测API中的这些钩子(Hook)(弯路)或修改。 还有一些检测 EAT Hook 的方法。

谢谢。

最佳答案

GetProcAddress 也可以 Hook 。此外,由于您无法知道将要修补的确切 API,因此您将不得不检查所有导入的函数,这非常繁琐。由于入侵者有足够的权限注入(inject)您的进程地址空间并 Hook API 方法,老实说,几乎没有办法阻止他完全修补任何保护机制。通常现代软件保护系统包括内核模式驱动程序,扫描程序内存并防止 dll 注入(inject)和远程内存修改。此外,使用代码加密/混淆系统(例如 Themida)或什至具有完全外来处理器指令集的内部虚拟执行机也很常见,这使得即时修补代码非常困难。

关于c++ - 如何检测API Hook?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127385/

相关文章:

相当于 OpenLayers 的 Java

shell - 无空 Shellcode

assembly - MIPS:lw(加载字)指令

c++ - 如何在 Visual Studio 2010 中使用互斥锁

c++ - 引用重载,而不是唯一的按值传递+ std::move?

c++ - 何时以及为何将静态与 constexpr 结合使用?

c++ - 如何在 VS C++ 中使用 IA32 指令 'fabs'?

c++ - 构建命令行应用程序

api - 有电影放映时间api吗?

php - 使用 codeigniter 对 API 的理解