如何检测 API 挂钩
How to detect API Hook?
我一直在尝试检测API Hook,inline和EAT钩子。
目前,我没有找到有关如何检测EAT钩子的任何内容。
对于内联环 3 钩子,到目前为止我有什么:
FARPROC Address = GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitProcess");
if (*(BYTE*)Address == 0xE9 || *(BYTE*)Address == 0x90 || *(BYTE*)Address == 0xC3)
{
printf("Api hookedn");
}
问题是有几个操作码可以用来钩子/更改函数的序幕,检查 JMP/NOP/RET 是微不足道的,我见过很多钩子类型,如 PUSH RET、MOV、RETN 等......
我想知道是否有人知道如何检测 API 中的这些钩子(弯路(或修改。还有某种检测EAT钩子的方法。
谢谢。
GetProcAddress
也可以上钩。此外,由于您无法知道要修补的确切API,因此您必须检查所有导入的功能,这非常乏味。由于入侵者有足够的权限注入您的进程地址空间和钩子 API 方法,老实说,几乎没有办法阻止他完全修补任何保护机制。通常,现代软件保护系统包括内核模式驱动程序,该驱动程序扫描程序内存并防止dll注入和远程内存修改。此外,使用代码加密/混淆系统(例如Themida(甚至具有完全陌生处理器指令集的内部虚拟执行机也很常见,这使得动态修补代码变得非常困难。
我相信
您应该将磁盘中的 kernel32.dll 与内存中的当前 dll 进行比较,您还应该忽略 IAT 并修复重定位,否则您将获得不同的哈希。
如果您想要一个更简单的解决方案,只需重命名 kernel32.dll然后从重命名的 DLL 进行 API 调用。
您需要挂钩当前进程的 IAT 地址,然后立即保存字节。
在此之后,您就有了原始字节,因此您可以稍后尝试再次复制它们并使用 memcmp(( 将旧的(原始(字节与新字节进行比较,如果它们不同,那么您的 IAT 地址已被另一个进程钩住。
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- WinAPI挂钩鼠标
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- C++win32 API创建多个类似视口的窗口
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 如何将真正的字符串从python c-api转换为python脚本
- 使用Qt框架在c ++类中创建API调用
- 父进程中的挂钩 api 调用
- 如何检测 API 挂钩
- x64 API挂钩没有反汇编程序库
- 带 API 挂钩"Access Violation writing location 0x0000000000"的反 dll 注入
- 为什么API在c++中挂钩extextout和DrawText只输出垃圾
- API挂钩在整个过程中生效,包括EXE和DLL
- 数据结构,用于在挂钩到 API 时跟踪和存储对象