Windows Hook链机制详解

Windows内核驱动Hook入门 开启 Event Tracing 后,当用户层程序进行系统调用时,首先会调用PerfInfoLogSysCallEntry函数来对此次系统调用进行记录。然后才调用系统调用函数。PerfInfoLogSysCallEntry内部又会调用驱动注册的WMI_LOGGER_CONTEXT结构中的GetCpuClock指向的函数。这样就可以通过修改GetCpuClock指针为自己的代理函数,而且此时系统调用函数被放置在栈上,因此在该函数中能从栈中获取系统调用函数的值并进行修改为自己的hook函数。 阅读详情

Windows Hook链

本文是Windows hook系列的一文。
上一文:《手把手教你用SetWindowsHookEx做一个键盘记录器》.
是本文hook的实例!

引入

hook是Windows操作系统消息处理机制的一个平台,应用程序可以通过设置Hook对某个进程或窗口进行监视,即对特定事件“挂钩”;

一旦预定义特定事件发生,Windows操作系统即会向钩子hook发送通知消息,这时,应用程序可进行响应。

HOOK的处理主要有以下三个阶段:

阶段1:定义Hook;

阶段2:在Hook链表中传递Hook;

阶段3:卸载Hook。

今天主要学习第二阶段的 HOOK链

HOOK链

我一直以来的方法论,就是学习一个东西,要搞清楚五件事情:

1.它是什么?

2.它的作用是什么?

3.它怎么使用?

Hook链是什么?

每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。

这个列表的指针指向指定的,应用程序定义的。

Hook链的作用

被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

Hook链怎么使用

Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。

hook链并不单独使用,需要hook的安装与释放

hook安装

使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的Hook链的开头的Hook子程。

HHOOK SetWindowsHookEx( 
     int idHook,      // 钩子的类型,即它处理的消息类型
     HOOKPROC lpfn,   // 钩子子程的地址指针。如果dwThreadId参数为0
			   // 或是一个由别的进程创建的线程的标识,
			   // lpfn必须指向DLL中的钩子子程。
			   // 除此以外,lpfn可以指向当前进程的一段钩子子程代码。
			   // 钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。
     HINSTANCE hMod,  // 应用程序实例的句柄。标识包含lpfn所指的子程的DLL。
			   // 如果dwThreadId 标识当前进程创建的一个线程,
			   // 而且子程代码位于当前进程,hMod必须为NULL。
			   // 可以很简单的设定其为本应用程序的实例句柄。
     DWORD dwThreadId // 与安装的钩子子程相关联的线程的标识符。
			   // 如果为0,钩子子程与所有的线程关联,即为全局钩子。
                 );  
CallNextHookEx()

实现传递Hook,具体解释如下:(MSDN定义链接:CallNextHookEx function)

在钩子子程中调用得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个 SDK中的API函数CallNextHookEx来传递它,以执行钩子链表所指的下一个钩子子程。这个函数成功时返回钩子链中下一个钩子过程的返回值, 返回值的类型依赖于钩子的类型。

LRESULT CallNextHookEx
			(
				HHOOK hhk;
				int nCode;
				WPARAM wParam;
				LPARAM lParam;
			 ); 
  • hhk为当前钩子的句柄,由SetWindowsHookEx()函数返回。
  • NCode为传给钩子过程的事件代码。
  • wParam和lParam 分别是传给钩子子程的wParam值,其具体含义与钩子类型有关。

这里留一个问题:如果没有CallNextHookEx(),hook机制会怎么样?

卸载Hook

钩子在使用完之后需要用UnHookWindowsHookEx()卸载,否则会造成麻烦。释放钩子比较简单,UnHookWindowsHookEx()只有一个参数。函数原型如下:

UnHookWindowsHookEx
(
	HHOOK hhk;
);

函数成功返回TRUE,否则返回FALSE。

系统钩子和线程钩子

SetWindowsHookEx()函数的最后一个参数决定了此钩子是系统钩子还是线程钩子。

线程勾子用于监视指定线程的事件消息。线程勾子一般在当前线程或者当前线程派生的线程内。

系统勾子监视系统中的所有线程的事件消息。因为系统勾子会影响系统中所有的应用程序,所以勾子函数必须放在独立的动态链接库(DLL) 中。系统自动将包含"钩子回调函数"的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入了那些进程。

几点说明:

(1)如果对于同一事件(如鼠标消息)既安装了线程勾子又安装了系统勾子,那么系统会自动先调用线程勾子,然后调用系统勾子。

(2)对同一事件消息可安装多个勾子处理过程,这些勾子处理过程形成了勾子链。当前勾子处理结束后应把勾子信息传递给下一个勾子函数。

(3)勾子特别是系统勾子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装勾子,在使用完毕后要及时卸载。

思考题

是否可以根据Hook链的先后顺序,来实现AntiHook,欢迎交流。

Java超市采购管理系统设计与实现:进销存数据库到JSP全流程 从B/S架构与JSP/JavaBean技术出发,梳理三层结构下浏览器、服务器与数据库的分工协作原理,强调业务逻辑与表示层分离的工程价值。在此基础上,聚焦进销存系统中最核心的数据库设计环节,结合SQL Server实践,展示从E-R图推导至六张核心业务表的完整过程,说明主外键约束、decimal金额类型选择等关键设计对数据一致性与报表精度的影响。此类以数据库为骨架、以JSP页面为交互入口的经典JavaWeb项目,是超市采购管理系统从需求分析到落地实现的典型路径,其模块划分与事务处理思路同样适用于毕业设计或中小 阅读详情

相关推荐

基于winhook的键盘记录器

用hook实现的键盘记录功能 在全局钩子中 可以拦截所有的消息 任意处理,大概这个是windows下的一大利器

Windows核心编程篇——Hook编程(钩子编程)(C#版)

应用程序有自己的截获方式,那么操作系统呢,也有自己的截获方式,那就是使用钩子技术。(这里以windows系统为例)

csdn2990的博客 3548

Hadoop实战:用MapReduce分析YouTube视频数据集(附完整代码)

本文提供了一个完整的Hadoop MapReduce实战教程,指导读者使用MapReduce框架分析YouTube视频数据集,统计不同视频类别的数量分布。教程涵盖从数据获取、预处理、HDFS操作到Java代码编写、作业提交及结果可视化的全流程,并附有完整代码,帮助开发者深入理解分布式计算思想。

lilh34434的博客 200

『网络安全科普』Windows安全之HOOK技术机制

如你所知,Windows系统是建立在事件驱动的机制上的,而每一个事件就是一个消息,每个运行中的程序,也就是所谓的进程,都维护着一个或多个消息队列(消息队列的个数取决于进程内包含的线程的个数)。网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!HWND hwnd;//接受消息的窗口句柄//消息常量标识符(消息号)//32位消息特定附加信息//32位消息特定附加信息DWORD time;//消息创建时的时间POINT pt;//消息创建时的光标位置}MSG;

Galaxy_0的博客 4087

【论文导读】ICDM2018|SASRec---基于自注意力机制的序列推荐(召回)

前言本次分享2018年发表在ICDM上的论文----「Self-Attentive Sequential Recommendation」。主要是应用self-attention机制来做一...

Blank_Space 8033

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南

本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。

study的专栏 774

Windows Hook原理与实现

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

安全杂货铺 4万+

优快云积分获取与管理全攻略

技术社区积分系统是知识共享生态的核心激励机制,通过量化用户贡献实现资源交换。其底层逻辑遵循Web2.0时代的UGC经济模型,用户通过内容创作、社区互动等行为积累虚拟资产。在开发者社区场景中,积分体系能有效促进技术文档、工具源码等资源的流通,优快云作为国内头部平台,其积分规则具有典型参考价值。掌握签到策略、内容互动技巧和资源上传规范等实操方法,可系统性提升积分获取效率。2023年新规强化了连续签到奖励和互动质量检测机制,结合GitHub等开源平台资源互补,能构建更高效的技术资源获取路径。

weixin_34233974的博客 218

[学习笔记] Windows编程——窗口和消息 ——(八)Hook

Hook 是应用程序截获消息、鼠标操作和击键等事件的机制。截获特定类型的事件的函数称为Hook 程序。Hook 程序可以对其接收的每个事件执行操作,然后修改或放弃该事件。Hook 往往会降低系统速度,因为它们会增加系统必须对每条消息执行的处理量。应仅在必要时安装 Hook ,并尽快将其删除。

cxsydzn的博客 1722

【Creo】关于Creo一换网络就报错许可证丢失问题解决方案

依照我的个人理解,Creo只要一更换网络,则其许可证里面的网卡参数和现在的网络就对不上了,所以就会出现报错,并且有可能是报错代码(-9),提示许可证激活有问题。

weixin_52002180的博客 6042

第十四节《OpenCascade集成Qt》

将 OpenCascade 与 Qt 集成是开发图形界面应用的常见需求。通过将 OpenCascade 的几何建模与 Qt 的图形用户界面(GUI)功能结合,可以创建强大而灵活的 CAD 或建模工具。OpenCascade 提供了与 Qt 的集成接口,允许你在 Qt 应用程序中嵌入 OpenCascade 的视图,执行几何操作,并与用户进行交互。以下是 OpenCascade 与 Qt 集成的详细步骤:首先,确保已安装 OpenCascade 和 Qt。你可以从 OpenCascade 官方网站或通过包管理

yumeiguo的博客 597

HOOK初步

本文将试图以下面的顺序讲解HOOK的大部分内容:  1、 WINDOWS的消息机制  2、 HOOK介绍  3、 HOOK链  4、 HOOK钩子的作用范围  5、 HOOK类型  6、 回调函数  7、 HOOK钩子的安装与卸载  8、 HOOK实例演示  +++++++++++++++++++  WINDOWS的消息机制  +++++++++++++++++++  Windows系统是以消息处

amd k_7的专栏 2588

【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

1 坐标系定义及转换   首先介绍一下世界坐标系和相机坐标系之间的转换,它们之间是存在一个转换关系的。现假设空间中一点X,它在相机坐标系下的坐标是Xcamera,在世界坐标系下的坐标是Xworld。假设它通过R和t实现从相机坐标系到世界坐标系之间的转换: Xworld = RXcamera + t   那么,由上式,我们可以推得从世界坐标系向相机坐标系的转换关系(RT=R-1,所以通常直接使用RT即可): Xcamera = RTXworld - RTt   所以,两个坐标系之间的转换,需要看其具体

zeeq的博客 2万+

Hook 机制(转帖, 一直很想知道的)

本文转贴自http://armystone.bokee.com/,访问地址为http://armystone.bokee.com/viewdiary.14189069.html无意冒犯,如有侵权,请提前通知,本博客将及时处理。 本文将试图以下面的顺序讲解HOOK的大部分内容:  1、 WINDOWS的消息机制  2、 HOOK介绍  3、 HOOK链  4、 HOOK钩子的作用范围

xiaodongdehome的专栏 1162

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Windows Hook机制

转自 https://blog.youkuaiyun.com/xkdcc/article/details/1531779本文将试图以下面的顺序讲解HOOK的大部分内容:  1、 WINDOWS的消息机制  2、 HOOK介绍  3、 HOOK链  4、 HOOK钩子的作用范围  5、 HOOK类型  6、 回调函数  7、 HOOK钩子的安装与卸载  +++++++++++++++++++  WINDOWS的...

wqfhenanxc的专栏 2008

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ Windows Hook 消息钩子 详解

C++ Windows Hook 消息钩子 详解

2401_87429224的博客 1455

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Windows Hook机制(转贴一)

最近想写个监视系统的小软件,需要Windows Hook的知识,所以会陆续贴几个关于Hook的文章做参考。 本文将试图以下面的顺序讲解HOOK的大部分内容: 1、WINDOWS的消息机制 2、HOOK介绍 3、HOOK链 4、HOOK钩子的作用范围 5、HOOK类型...

weixin_34320724的博客 74

Windows Hook钩子机制及键盘钩子实例(转)

本文将试图以下面的顺序讲解HOOK的大部分内容:  1、 WINDOWS的消息机制  2、 HOOK介绍  3、 HOOK链  4、 HOOK钩子的作用范围  5、 HOOK类型  6、 回调函数  7、 HOOK钩子的安装与卸载  +++++++++++++++++++  WINDOWS的消息机制  +++++++++++++++++++

齐分享 6755

hook

<br />转:http://hi.baidu.com/techicey/blog/item/e0fdb7a47702c7f49052eeb9.html<br /> <br />最近想写个监视系统的小软件,需要Windows Hook的知识,所以会陆续贴几个关于Hook的文章做参考。<br /> <br />本文将试图以下面的顺序讲解HOOK的大部分内容: <br /><br /> 1、 WINDOWS的消息机制 <br /> 2、 HOOK介绍 <br /> 3、 HOOK链 <br />

abin_gha的专栏 629

Windows Hook 学习1

      windows hook是windows消息处理机制中的一个切入点,通过它,应用程序可以设置一个子过程来监视系统的消息流,并在某个特定的消息到达对应窗口前,对该消息进行处理。     钩子会降低系统的速度,因为它增加了处理过程,这些过程是是系统必须为每个消息处理而调用的。你必须在必要的时候使用钩子,而且尽快的释放它。    钩子链(Hook Chains)    系统迟滞许

longlong_ago的专栏 600

深入浅出HOOKS(之零)

HOOKS 说明书 hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。下面将介绍WINNDOWS HOOKS并且说明如何在WINDOWS 程序中使用它。 =========================关于HOOKS======================使用HOOK 将会降低系统效率,因为它增加

1307

关于HOOK基础知识(windows API ,C++)

hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。 下面将介绍WINNDOWS HOOKS并且说明如何在WINDOWS 程序中使用它。 关于HOOKS 使用HOOK 将会降低系统效率,因为它增加了系统处量消息的工作量。建议在必要时才使用HOOK,并在消息处理完成后立即移去该HOOK。 HOOK链 WINDOWS...

weixin_33895604的博客 138

HOOK 学习指南

以下面的顺序讲解HOOK的大部分内容:<br /><br />1、 WINDOWS的消息机制<br />2、 HOOK介绍<br />3、 HOOK链<br />4、 HOOK钩子的作用范围<br />5、 HOOK类型<br />6、 回调函数<br />7、 HOOK钩子的安装与卸载<br />8、 HOOK实例演示<br /><br />+++++++++++++++++++<br />WINDOWS的消息机制 <br />+++++++++++++++++++<br />Windows系统是以消息处

博客转移到个人主站,请大家移步 http://www.soskp.com/ 983
上一篇: Windows系统中文乱码,最简单解决方案,调用函数即可!
下一篇: json11详细使用教程,持续更新!
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值