加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何检测API挂钩?

发布时间:2020-12-16 07:20:32 所属栏目:百科 来源:网络整理
导读:我一直在尝试检测API Hook,内联和EAT钩子. 现在我没有找到任何关于如何检测EAT钩子的东西. 对于Inline Ring 3钩子,我到目前为止: FARPROC Address = GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitProcess");if (*(BYTE*)Address == 0xE9 || *(BYTE
我一直在尝试检测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 hookedn");
}

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

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

谢谢.

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读