HOOK消息钩子

HOOK消息钩子大致的过程是当系统I/O上发生一个事件时,系统捕获该事件,并向指定的应用程序的消息队列发送一个消息,应用程序从消息队列中顺次取出一个消息,交由系统调度相应的窗口回调程序进行消息处理。这里可以看到,从OS捕捉到消息开始处理,到最后交还给OS调度回调函数,就像走了一个循环,我自己理解这也是为什么叫做“回调函数”的原因之一。接下来我们要进行的HOOK就是在上面的第二步和第三步之间进行的额外工作。钩子机制允许应用程序截获(且或)处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

大致的过程是当系统I/O上发生一个事件时,系统捕获该事件,并向指定的应用程序的消息队列发送一个消息,应用程序从消息队列中顺次取出一个消息,交由系统调度相应的窗口回调程序进行消息处理。

这里可以看到,从OS捕捉到消息开始处理,到最后交还给OS调度回调函数,就像走了一个循环,我自己理解这也是为什么叫做“回调函数”的原因之一。接下来我们要进行的HOOK就是在上面的第二步和第三步之间进行的额外工作。

钩子机制允许应用程序截获(且或)处理window消息或特定事件。

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

可以把Hook理解为Windows操作系统消息处理机制的一个平台;应用程序可以通过设置Hook对某个进程或窗口进行监视,即:对特定事件“挂钩”;一旦预定义特定事件发生,Windows操作系统即会向钩子hook发送通知消息,这时,应用程序可进行响应。
**

Windows HOOK机制

**

HOOK(钩子)的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入到系统。钩子的种类有很多,每一种钩子负责截获并处理相应的消息。钩子机制允许应用程序截获并处理发往指定窗口的消息或特定事件,其监视的窗口既可以是本进程内的也可以是由其他进程所创建的。在特定的消息发出并到达目的窗口之前,HOOK程序先行截获此消息并得到对其的控制权。此时在钩子函数中就可以对截获的消息进行各种修改处理,甚至强行终止该消息的继续传递。

钩子的应用范围非常广泛,比如输入监控、API拦截、消息捕获、改变程序执行流程等方面。
1、杀毒软件会用Hook技术钩住一些API函数,比如钩住注册表读写函数,从而防止病毒对注册表进行写入;
2、病毒使用Hook技术有针对性的捕获键盘的输入,从而记录用户的密码等敏感信息;
3、文件加密系统通过Hook技术在不改变用户操作的情况下对用户的文件进行透明加密。

这些都属于Hook范畴的知识。

每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程序。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。
Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159476.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月26日 上午11:00
下一篇 2022年7月26日 上午11:00


相关推荐

  • 面向对象编程与面向过程编程的基本区别

    面向对象编程与面向过程编程的基本区别面向对象 面向对象编程 ObjectOrient 面向对象程序设计 的主要思想是把构成问题的各个事务分解成各个对象 建立对象的目的不是为了完成一个步骤 而是为了描叙一个事物在整个解决问题的步骤中的行为 面向对象程序设计中的概念主要包括 对象 类 数据抽象 继承 动态绑定 数据封装 多态性 消息传递 通过这些概念面向对象的思想得到了具体的体现 面向对象是一种解决问题的思想类就是具备某些共同特征的实体的集合 它是一种抽象的数据类型 它是对所具有相同特征实体的抽象 在面向对象的程序

    2026年3月20日
    3
  • origin画图数据_origin多元线性回归拟合

    origin画图数据_origin多元线性回归拟合制图完成效果图如下。1.原始数据为真实值与预测值。2.另外两列是制作中间的标准线。优化直线。3.4.对预测值与真实值的图进行优化。5.将标准线图层复制到当前页面,ctrl+C,V就行了。将标准线的网格删除。将线移动到该有的位置即可。对周围的字体大小等修正后即可。…

    2026年2月7日
    5
  • 如何把pyc反编译成py_exe文件反编译源码工具

    如何把pyc反编译成py_exe文件反编译源码工具将pyc文件反编译成python源代码

    2022年8月23日
    7
  • JavaScript页面跳转

    JavaScript页面跳转JavaScript 实现页面跳转

    2026年3月19日
    4
  • mysql学习—查询数据库中特定的值对应的表

    遇到一个问题,我将问题抽象简单描述如下: 循环查询数据库所有表,查出字段中包含tes值的表,并且将test修改为hello? 因为自己不才找了很久也没有找到很好的方法,又对mysql的游标等用法不是很了解,在时间有限的情况下,发现了下面的方法,分享给大家:

    2022年2月25日
    46
  • 关于SSDT

    关于SSDT百度上比较好的解释是 SSDT 的全称是 SystemServic 系统服务描述符表 这个表就是一个把 ring3 的 Win32API 和 ring0 的内核 API 联系起来 SSDT 并不仅仅只包含一个庞大的地址索引表 它还包含着一些其它有用的信息 诸如地址索引的基地址 服务函数个数等 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 说白了 SSDT 就是把系统两个不同级别的函数给关联起来 因为为了安

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号