windows - Hook技术介绍

article/2025/10/11 23:56:25

hook 介绍

Hook技术被广泛应用于安全的多个领域,比如杀毒软件的主动防御功能,涉及到对一些敏感API的监控,就需要对这些API进行Hook;窃取密码的木马病毒,为了接收键盘的输入,需要Hook键盘消息;甚至是Windows系统及一些应用程序,在打补丁时也需要用到Hook技术。接下来,我们就来学习Hook技术的原理。

分类
在这里插入图片描述

1、 SetWindowsHookEx

Windows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。Windows操作系统提供的钩子机制的作用就是用来截获和监视这些系统中的消息。

应用程序可以通过设置Hook对某个进程或窗口进行监视。键盘、鼠标、日志、窗口。是一个队列,CallNextHookEx

该API在简单高效的同时也有一个弊端,就是它只能监视较少的消息,如:击键消息、鼠标移动消息、窗口消息。想要对系统更全面的进行Hook就要使用以下介绍的两种Hook方法。

2、调试Hook

该Hook方法的原理跟调试器的工作机制相似,核心思想都是让进程发生异常,然后自己捕获到该异常,对处于被调试状态下的级才能进行恶意操作。

调试Hook的核心思路就是将API的第一个字节修改为0xCC(INT 3),当API被调用时,由于触发了异常,控制权就被转交给调试器。

3、注入Hook

Hook的核心思想就是修改API的代码,但是,比如我A进程要Hook一个B进程的CreateProcess函数,A是没有权限修改B内存中的代码的,怎么办?这时候使用DLL注入技术就可以解决这问题,我们将Hook的代码写入一个DLL(或直接一个shellcode),将此DLL注入到B进程中,此时因为DLL在B进程的内存中,所以就有权限直接修改B内存中的代码了。

3.1IAT Hook

IAT Hook顾名思义就是通过修改IAT里的函数地址对API进行Hook。 IAT 是函数的导入表,在动态库加载过程中,可以找到函数导入表,修改导入表中的数据。
在这里插入图片描述

3.2 Inline Hook

内联Hook相比于IAT Hook,显得更简单粗暴,它直接修改内存中任意函数的代码,将其劫持至Hook API。同时,它比IAT Hook的适用范围更广,因为只要是内存中有的函数它都能Hook,而后者只能Hook IAT表里存在的函数(有些程序会动态加载函数)。

属于硬编码,也就改变了函数的执行逻辑,将函数前5个字节进行覆盖,在使用完成后还需要恢复前5个字节

我们会发现Code Hook存在一个效率的问题,因为每次Code Hook都要进行“挂钩+脱钩”的操作,也就是要对API的前5字节修改两次,这样,当我们要进行全局Hook的时候,系统运行效率会受影响。而且,当一个线程尝试运行某段代码时,若另一个线程正在对该段代码进行“写”操作,这时就会程序冲突,最终引发一些错误。

3.3 HotFix Hook (程序员最喜欢使用的方法)

以上累出的API起始代码有如下两个明显的相似点:
[1]API代码以“MOV EDI,EDI”指令开始。
[2]API代码上方有5个NOP指令。
在这里插入图片描述
MOV EDI,EDI用于将EDI的值再次复制给EDI,这没有什么实际意义。也就是说,API起始代码的MOV指令(2个字节)与其上方的5个NOP指令(5个字节)合起来共7个字节的指令没有任何意义。所以我们就可以通过修改这7个字节来实现Hook操作。这种方法因为可以在进程处于运行状态时临时更改进程内存中的库文件,所以微软也常用这种方法来打“热补丁”。如下图:
在这里插入图片描述
第一个 jmp FUNCTION 占用5个字节,0xE9是跳转指令,后边跟4字节的偏移量

第二个 jmp label 只占用2个字节呢,因为本身LABEL 很近,可以翻译成近跳指令(0x0xF9EB ), 0xF9就是 近跳指令,0xEB 就 -4 的补码。
下面是一段obs 中function_hook 的实现,可以通过代码加深下印象

#define X86_NOP 0x90
#define X86_JMP_NEG_5 0xF9EB
static inline void hook_reverse_new(struct func_hook *hook, uint8_t *p)
{hook->call_addr = (void *)(hook->func_addr + 2);hook->type = HOOKTYPE_REVERSE_CHAIN;hook->hooked = true;p[0] = 0xE9;*((uint32_t *)&p[1]) = (uint32_t)(hook->hook_addr - hook->func_addr);*((uint16_t *)&p[5]) = X86_JMP_NEG_5;
}

http://chatgpt.dhexx.cn/article/CFMjAOBc.shtml

相关文章

灯塔工厂 | 璞华大数据HawkEye设备数字化管理平台助力建设灯塔工厂

**编辑者按:**灯塔工厂、黑灯工厂、智能工厂、智慧工厂、工业互联网平台、工业4.0、全球化4.0,这些概念在内涵和建设内容上有关联、有交集,或者有相似之处,其核心都是数字化转型。不管是哪一种,璞华大数据HawkEye都可以…

遥感测深方法综述(二)CZMIL 机载LiDAR 测深系统

机载激光雷达测深测量是集激光测距、GNSS定位/姿态测量、航空摄影等多种技术于一体的新型主动机载激光测绘,可应用于海滩和海岸线、浅海编图、海岛、岛礁、水下障碍物的调查,是高效获取高精度近岸海底地形的重要技术,尤其对“人下不去、船上不…

VEH HOOK

相关函数 我们只需要用到 AddVectoredExceptionHandler 设置VEH异常捕获 PVOID WINAPI AddVectoredExceptionHandler(_In_ ULONG FirstHandler,_In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler );ULONG WINAPI RemoveVectoredExceptionHandler(_In_ P…

Docker方式部署Github监控系统Hawkeye

Docker方式部署Github监控系统Hawkeye 依赖 Python 3.x MongoDB > 3.x Flask 创建python3依赖包 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel 安…

Vue+高德地图API的使用(插件的使用)

接上次地图显示 官方文档:根据自己需求引入想要的插件 在AMapLoader.load中的plugins引入你所需要的插件 //这里是我引入的插件 plugins: ["AMap.ToolBar", //工具条"AMap.Scale", // 比例尺"AMap.Geolocation", //定位"AMap.H…

Hawk-and-Chicken详解

题目描述: Kids in kindergarten enjoy playing a game called Hawk-and-Chicken. But there always exists a big problem: every kid in this game want to play the role of Hawk. So the teacher came up with an idea: Vote. Every child have some nice hand…

Webhook介绍和应用

Webhook概念 Webhook本质上也是API,只不过是反向调用。 Webhook 产生背景 正常调用API是由应用去调用对方服务器的API,为了实现最大程度利用好资源以及并发,通常这个API可能是异步调用,这样,在调用的过程中&#xf…

【论文笔记】—毫米波雷达穿雾式高分辨率成像—Supervised—HawkEye系统—2020-CVPR

题目:Through Fog High-Resolution Imaging Using Millimeter Wave Radar 利用毫米波雷达进行穿雾式高分辨率成像 DOI:10.1109/CVPR42600.2020.01148时间:2020会议:2020-CVPR机构:伊利诺伊大学厄巴纳-香槟分校 论文…

Hi3518ev200:byun hawkeye刷机与配网

背景:从浩峰大佬那拿的boyun hawkeye互联网摄像机,听说是从闲鱼上淘的,被淘汰的产品;买来用来二次开发。 1)拆开外面的外壳,然后将串口线引出,接usb转ttl,usb供电,用xsh…

Hawkeye: Towards a Desired Directed Grey-box Fuzzer 论文阅读笔记

中文译名:hawkeye: 需求导向的灰盒模糊测试 作者:Hongxu Chen 单位:南洋理工大学 国家: #新加坡 年份: #2018年 来源: #ccs 关键字: #定向fuzzing #fuzzing #灰盒 代码地址: https:/…

璞华大数据HawkEye设备数字化管理之远程协助功能

应用背景 对于设备制造厂商或者设备使用企业而言,在日常的设备维修管理过程中,多长时间到达现场和多长时间排除故障,是考核工厂维修工和售后维修人员工作绩效的重要指标。 在设备专业程度和精密度不断提高以及国内外新冠疫情的影响下&#x…

论文阅读_Hawkeye: Towards a Desired Directed Grey-box Fuzzer

作者: Hongxu Chen, Yinxing Xue, Yuekang Li, Bihuan Chen, Xiaofei Xie, Xiuheng Wu, Yang Liu 出处:CCS 2018 背景 定向模糊测试就是引导模糊测试朝着目标代码块的方向探索,让已覆盖的代码块越来越接近目标代码块,最终测试目标…

新产品发布 | HawkEye作业票管理系统

作业票是电力、石化、工程现场等行业的重要管理制度之一,但是长期以来一直是手工、纸质的方式申请和签发。这种方式耗时,出错率高,数据记录和统计不完整,是一种效率很低的管理方法。 2021年,国家应急管理部办公厅印发…

HawkEye产品深受市场认可,与多家行业龙头企业达成合作,共同开拓行业市场

2023年6月,日立(中国)有限公司与璞华大数据正式签订合作协议,双方将在产品和技术领域进行深度合作,共同开拓国内智能制造市场。 这是继方正国际、浪潮等行业龙头企业之后,又一家选择与璞华大数据HawkEye产…

HawkEye-20G:20 Gbps Arria-10 FPGA加速卡

HawkEye-20G:20 Gbps Arria-10 FPGA加速卡 HawkEye是基于Intel Arria 10 FPGA的薄型PCIe加速卡。该平台拥有高达18 GB的DDR4板载内存,2条SFP +链接,最高速度为28 Gb / s,以及一个PCIe x8 Gen 3主机接口。 Arria 10 FPGA可提供多达480K LE和IEEE浮点功能。 HawkEye的内存方…

基于PyTorch、易上手,细粒度图像识别深度学习工具库Hawkeye开源

转载自丨机器之心 鉴于当前领域内尚缺乏该方面的深度学习开源工具库,南京理工大学魏秀参教授团队用时近一年时间,开发、打磨、完成了 Hawkeye——细粒度图像识别深度学习开源工具库,供相关领域研究人员和工程师参考使用。本文是对 Hawkeye 的…

高德地图marker自定义图标只显示一半

直接从高德那里搬过来代码,这里的偏移量是因为偏移量有问题,所以出现了图片只显示一半的情况。 加上imageOffset即可解决

原 matplotlib散点scatter学习2,参数测试(marker1)

续上篇 绘制散点图的函数,x,y分别对应点的x轴坐标和y轴坐标 plt.scatter(x,y) matplotlib.pyplot.scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, vertsNone, edgecolorsNone, , dataNon…

python画图(标记、marker、设置标记大小、marker符号大全)

初衷 本人由于平常写论文需要输出一些结果图,但是苦于在网上搜python画图时,详细的教程非常多,但是就是找不到能马上解决自己问题那一行代码,所以打算写一些适合需求简单的朋友应急用的教程,应急就必须方便搜索&#x…

matplotlib画布中属性设置常用函数及其说明

绘图时设置坐标轴属性 data np.arange(0,1,0.01) plt.title(my lines example) plt.xlabel(x) plt.ylabel(y) plt.xlim(0,1) plt.ylim(0,1) plt.xticks([0,0.2,0.4,0.6,0.8,1]) plt.yticks([0,0.2,0.4,0.6,0.8,1]) plt.tick_params(labelsize 12) plt.plot(data,data**2) pl…