【发布时间】:2017-02-09 02:49:21
【问题描述】:
我一直在尝试检测 API Hook、inline 和 EAT hook。
目前我没有找到任何关于如何检测 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 钩子的方法。
谢谢。
【问题讨论】:
-
如果有人挂钩了您的程序,那么他们可以挂钩您的挂钩检测器。
-
嗯,检查导出地址表是否已被挂钩的明显方法是查看表中的任何地址是否指向 EAT 所属的 DLL 之外的某个位置。虽然,我相信一些标准 DLL 通过 EAT 将一些函数转发给其他 DLL,所以你必须处理这种情况。
标签: c++ api assembly hook detection