BOOL GetProcHookStatus(LPCSTR lpModuleName, LPCSTR lpProcName)
{
HMODULE hModule = GetModuleHandleA(lpModuleName);
if (NULL == hModule)
{
hModule = LoadLibraryA(lpModuleName);
if (NULL == hModule)
return -;
} FARPROC farProc = GetProcAddress(hModule, lpProcName);
if (NULL == farProc)
return -; BYTE buffer[] = {};
if (!ReadProcessMemory(GetCurrentProcess(), farProc, &buffer, , NULL))
return -; if (buffer[] == 0x8B && buffer[] == 0xFF && buffer[] == 0x55 && buffer[] == 0x8B && buffer[] == 0xEC)
return FALSE;
if (buffer[] == 0xEB || buffer[] == 0xE9 || buffer[] == 0xEA)
return TRUE; return -;
}

注意,此函数只能用于检测系统API的InlineHook,因为使用到了MS的系统API函数的特点: 每个正常系统API的开头前五个字节必为8B FF 55 8B EC,

这是MS为热补丁技术留下的接口,也是Detours库留下的接口,具体可以自行搜索

另外判断InlineHook的关键是,buffer第一个字节是否为EB E9 EA,因为直接的JMP分成三种,

Short Jump 短跳转 机器码 EB 只能跳转到256字节的范围内
Near Jump 近跳转 机器码 E9 可跳至同一个段的范围内的地址
Far Jump 远跳转 机器码 EA 可跳至任意地址,使用48位/32位全指针

检测API函数的InlineHook的更多相关文章

  1. Socket 之 API函数介绍

    1.创建套接字──socket() 应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下: SOCKET PASCAL FAR soc ...

  2. Zigbee协议栈OSAL层API函数【转载】

              OSAL层提供了很多的API来对整个的协议栈进行管理.主要有下面的几类:信息管理.任务同步.时间管理.中断管理.任务管理.内存管理.电源管理以及非易失存储管理.看到这些管理是不是感 ...

  3. 2、FreeRTOS任务相关API函数

    1.任务相关的API函数 函数存在于task.c中,主要的函数有: xTaskCreate():使用动态的方法创建一个任务: xTaskCreatStatic():使用静态的方法创建一个任务(用的非常 ...

  4. Visual C++中最常用的类与API函数

    这篇文章能让初学者快速了解visual C++ MFC中常见的核心的类与函数,虽然全部看下来有点枯燥,但对初学者快速了解MFC的框架结构很有好处. 常用类 CArchive类:用于二进制保存档案 CB ...

  5. MySql接口API函数综述

    C API函数概述 函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换 a ...

  6. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  7. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  8. Appium常用的API函数

    在学习应用一个框架之前,应该了解一下这个框架的整体结构或是相应的API函数.这篇文章还不错:http://blog.sina.com.cn/s/blog_68f262210102vzf9.html,就 ...

  9. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

随机推荐

  1. 表格table隔行变色

    if($('.p03-s2').find('table').length >= 2) {$('table:last-child').css({'borderTop': 'none'});}if( ...

  2. 阿里云物联网边缘计算加载MQTT驱动

    写在前面 本文在LinkEdge快速入门样例驱动的基础上,加载了MQTT订阅的客户端,使得边缘端容器可以通过MQTT获得外部数据. 1. 系统需求 物联网边缘计算平台,又名Link IoT Edge[ ...

  3. Eclipse中安装SVN插件的艰难旅程

    我们写Java程序的人都知道Eclipse,也装过一些插件,比如Android开发的使用需要安装ADT等,如果代码提交的话我们可能需要安装git和svn的插件,但是这个插件我以前听过,但是一直没有安装 ...

  4. 前端使用vue-i18n做中英文翻译

    vue-i18n 仓库地址:https://github.com/kazupon/vue-i18n 兼容性: 支持 Vue.js 2.x 以上版本 安装方法:(此处只演示 npm) npm insta ...

  5. 上传漏洞-js验证

    关于文件上传漏洞,想必玩web安全的同学们都有接触,之前本站也发布过一篇文章介绍文件上传漏洞的各种绕过方法,但是只是有文档却没有演示代码, 最近给公司一客户培训,就照文档中的绕过写出了相应的代码,方便 ...

  6. 学 Win32 汇编[20]: 洞察标志寄存器

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NT IOPL OF DF IF TF SF ZF AF PF CF 未使用 嵌套标志 I/O权限标志占2位 溢出标志 方向 ...

  7. 记Selenium HTMLTestRunner 无法生成测试报告的总结

      使用Python ,HTMLTestRunner 生成测试报告时,遇到很奇怪的问题,明明运行的结果,没有任何报错,就是不生成测试报告,纠结好久.google+baidu搜索结果也不满意,最后终于解 ...

  8. CSS:CSS 分组 和 嵌套 选择器

    ylbtech-CSS:CSS 分组 和 嵌套 选择器 1.返回顶部 1. CSS 分组 和 嵌套 选择器 Grouping Selectors 在样式表中有很多具有相同样式的元素. h1 { col ...

  9. SPSS把一个数据样本随机分为两部分

    SPSS把一个数据样本随机分为两部分 1.  打开SPSS数据文件. 2.  选择DATA>SELECT CASES,打开"Select Cases"对话框 3. 选择&qu ...

  10. UVA 10005 Packing polygons(最小圆覆盖)

    裸的模板题 AC代码: #include<cstdio> #include<cmath> #include<algorithm> #include<iostr ...