我一直在尝试检测 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/