我一直在尝试检测API Hook、内联Hook和EAT Hook。
目前为止,我还没有找到如何检测EAT Hook的方法。
关于Ring 3内联Hook,我的进展如下:
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 等等。
我想知道是否有人知道如何检测这些钩子(detours)或 API 中的修改。 还有一些方法可以检测 EAT 钩子。
谢谢。