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中检测这些钩子(绕道)或修改. 谢谢. 解决方法
GetProcAddress也可以被挂钩.此外,由于您无法知道要修补的确切API,因此您必须检查所有导入的函数,这非常繁琐.由于入侵者有足够的权限注入你的进程地址空间和钩子API方法,老实说,几乎没有办法阻止他完全修补任何保护机制.通常,现代软件保护系统包括内核模式驱动程序,它扫描程序存储器并防止DLL注入和远程内存修改.此外,使用代码加密/混淆系统(例如Themida),甚至是具有完全异类处理器指令集的内部虚拟执行机器也很常见,这使得在运行中修补代码非常困难.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |