c – 如何检测API挂钩?

我一直在尝试检测API Hook,内联和EAT钩子.

现在我没有找到任何关于如何检测EAT钩子的东西.

对于Inline Ring 3钩子,我到目前为止:

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

问题是有几个操作码可用于挂钩/更改函数的序言,检查JMP / NOP / RET是微不足道的,我已经看到很多HOOK类型,如PUSH RET,MOV,RETN等…

我想知道是否有人知道如何在API中检测这些钩子(绕道)或修改.
还有一些方法来检测EAT钩子.

谢谢.

最佳答案 GetProcAddress也可以被挂钩.此外,由于您无法知道要修补的确切API,因此您必须检查所有导入的函数,这非常繁琐.由于入侵者有足够的权限注入你的进程地址空间和钩子API方法,老实说,几乎没有办法阻止他完全修补任何保护机制.通常,现代软件保护系统包括内核模式驱动程序,它扫描程序存储器并防止DLL注入和远程内存修改.此外,使用代码加密/混淆系统(例如Themida),甚至是具有完全异类处理器指令集的内部虚拟执行机器也很常见,这使得在运行中修补代码非常困难.

点赞