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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java入门代码_java编程自学网

    Java入门代码_java编程自学网首先在配置好java环境的前提下,安装好eclipse,以下示例均在eclipse下运行,代码详解看注释一、HelloWorld示例代码:packagecom.hpe.java;//这是一个问好程序publicclassHello{//一个类只能有一个main方法publicstaticvoidmain(Stringarg[]){System.out.print(“hellowo…

    2022年10月17日
    0
  • 使用.NET Reflector

    使用.NET Reflectorl.NETReflector是一个类浏览器和反编译器,利用反射机制来分析程序集,以展示程序集中各种类型及其成员的信息。l下载.NETReflector:http://www.aisto.com/roeder/dotnetl通过菜单File->Open加载要分析的程序集,在左边的树型浏览器中可以看到该程序集包含的名字…

    2022年4月19日
    63
  • u盘0x8000FFFF_灾难性故障怎么卸载

    u盘0x8000FFFF_灾难性故障怎么卸载U盘出现两个分盘,原先是用了老毛桃的工具重置了U盘,目前成了两个分区。想要修改分区的时候,出现了磁盘已被保护。第一步,按照贴中的第二个方法用修改完注册表关机重启https://product.pconline.com.cn/itbk/software/dnyw/1707/9686607.html第二步,去磁盘管理中把剩余的磁盘都删除掉,这时候u盘的所有的空间都没有了,点击新建文件会出现0x80…

    2022年9月25日
    0
  • ubuntu16.04安装qt5_qt安装哪些组件

    ubuntu16.04安装qt5_qt安装哪些组件Qt是一个跨平台的C++图形用户界面库,我们平时所说所使用的Qt,准确的来说是它的GUI编程部分。Qt提供给应用程序开发者建立图形用户界面所需要的功能,并且Qt很容易扩展。基本上,Qt和XWindow上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCl以及ATl是相同类型的东西。一.安装Qt第一步:http://download.qt.io/ar……

    2022年10月15日
    0
  • python实现udp_python udp报文解析

    python实现udp_python udp报文解析python的udp攻击ddos攻击upd攻击主要是运用,网络套接字模块和多线程或多进程模块对一个ip不断的发送数据包,代码中都是都是自带库python可直接运行和调用。使用前请注意!!!!!!!!!!!!!!!!!!!!!未成年人请勿使用!!!!!!!!!!!!!!!!!!!请勿非法攻击任何网络!!!!!!!!!!!!!!!!!刑法里涉及计算机犯罪的在第285、286、287条,请自行查阅#coding=’utf-8’importsocket#套接字模块fromthreadingim

    2022年10月3日
    0
  • 电子设计竞赛控制组——完整旋转倒立摆程序

    电子设计竞赛控制组——完整旋转倒立摆程序以前也想过要写博客,但是却一直没有付诸于实践,作为第一篇原创,我还是选择将以前电赛时的作品拿出来,毕竟当初可是花费了好多心血的,汗~旋转倒立摆是控制组校内赛练手的题目,需要对PID非常熟悉才能调好参数,以下代码是自己搭建好结构后调试出来的程序,其中的参数会根据不同的结构作出调整。结构组成:K60开发板(带液晶屏和按键),角度编码器,直流减速电机(带编码器),12V的电机驱动,金属摆臂,…

    2022年8月18日
    3

发表回复

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

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