windows消息钩子(什么是消息钩子)

2025-03-31 09:30:02 0

windows消息钩子(什么是消息钩子)

本文目录

什么是消息钩子

钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。 钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志钩子可以监视和记录输入事件。若在dll中使用SetWindowsHookEx设置一全局钩子,系统会将其加载入使用user32的进程中,因而它也可被利用为无进程木马的进程注入手段。

消息钩子的简介

若在dll中使用SetWindowsHookEx设置一全局钩子,系统会将其加载入使用user32的进程中,因而它也可被利用为无进程木马的进程注入手段。《/CA》 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。 SetWindowsHookEx()函数的最后一个参数决定了此钩子是系统钩子还是线程钩子。线程钩子用于监视指定线程的事件消息。线程钩子一般在当前线程或者当前线程派生的线程内。系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL) 中。系统自动将包含“钩子回调函数”的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入了那些进程。 (1)如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。(2)对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。(3)钩子特别是系统钩子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载。

怎样对Windows消息进行拦截

首先来说说windows 消息Hook,这个消息Hook就是我们常用的通过SetWindowsHookEx来设置一个Hook,这个函数通过将这个Hook插入到Hook链的最前端,而发送给我们已经Hook了的窗口的消息首先会被我们的Hook函数截获,也就是我们优先于窗体捕获到消息。Windows Message Hook 可以实现全局Hook和局部Hook。局部Hook是在自身进程中创建一个Hook,可以用来捕获自身进程中的消息;而全局Hook是可以捕获操作系统下所有的指定的消息,需要借助于DLL来实现。全局钩子必须要使用DLL,DLl存放了钩子函数的代码。在操作系统中安装了全局钩子后,只要进程收到可以发出钩子的消息后,全局钩子的DLl文件会被操作系统自动或强行地加载到该进程中。可以发现设置消息钩子也是一种导入DLl的方法。一.钩子函数:其实钩子函数也就3个:(1)设置钩子:SetWindowsHookEx(2)释放钩子:UnhookWindowsHookEx(3)继续钩子:CallNextHookEx在线程级的钩子中经常用到 GetCurrentThreadID 函数来获取当前线程的 ID1. SetWindowsHookExHHOOK SetWindowsHookEx(int idHook, // hook type(钩子类型,即它处理的消息类型)HOOKPROC lpfn, // hook procedure(回调函数的地址)HINSTANCE hMod, // handle to application instance(实例句柄,标识包含lpfn所指的子程的DLL)DWORD dwThreadId // thread identifier(线程ID));第一个参数为钩子的类型,钩子的类型一共还有14种,表示在什么时机调用钩子。下面会介绍。第二个参数为钩子的子程,实际上就是一个回调函数的地址,当相应的事件发生时系统就会调用这个回调函数。第三个参数为这个钩子绑定的进程的实例句柄,即包含回调函数的DLL的实例句柄,如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL。 可以很简单的设定其为本应用程序的实例句柄。第四个参数为线程的ID,若为全局钩子这个参数设置为0,若是线程钩子可以使用GetCurrentThreadId来获得当前线程的ID返回值:若调用成功,返回的是这个钩子过程的句柄;否则返回NULL2.UnhookWindowsHookEx钩子在使用完之后需要用UnhookWindowsHookEx()卸载,否则会造成麻烦。释放钩子比较简单,()只有一个参数。函数原型如下:UnhookWindowsHookEx( HHOOK hhk );函数成功返回TRUE,否则返回FALSE。3.CallNextHookEx在钩子子程中调用得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个 SDK中的API函数CallNextHookEx来传递它,以执行钩子链表所指的下一个钩子子程。这个函数成功时返回钩子链中下一个钩子过程的返回值, 返回值的类型依赖于钩子的类型。LRESULT CallNextHookEx(HHOOK hhk;int nCode;WPARAM wParam;LPARAM lParam;);hhk为当前钩子的句柄,由SetWindowsHookEx()函数返回。NCode为传给钩子过程的事件代码。wParam和lParam 分别是传给钩子子程的wParam值,其具体含义与钩子类型有关。钩子函数也可以通过直接返回TRUE来丢弃该消息,并阻止该消息的传递。否则的话,其他安装了钩子的应用程序将不会接收到钩子的通知而且还有可能产生不正确的结果。

windows消息钩子(什么是消息钩子)

本文编辑:admin

更多文章:


shutdown定时关机(怎样定时关机)

shutdown定时关机(怎样定时关机)

本文目录怎样定时关机怎么能设置电脑定时关机电脑可以定时关机吗怎样定时关机1、右键单击“开始”,弹出菜单选择“控制面板”,如图:2、然后点击控制面板里的“管理工具”,如图:3、在管理工具里点击“计划任务程序”,如图:4、先点击下任务计划程序库

2025年4月4日 02:40

单点登录系统实现(外部系统单点登录的实现)

单点登录系统实现(外部系统单点登录的实现)

本文目录外部系统单点登录的实现单点登录是什么如何实现外部系统单点登录的实现一般来说,有三种层次的实现机制,不能详细描述,只能探讨一下大概方向:由sso系统为第三方系统提供授权接口,修改第三方系统的权限体系,采用sso的统一接口进行权限管理、

2025年3月24日 03:40

打开网页出现乱码(win7网页打开出现乱码怎么解决)

打开网页出现乱码(win7网页打开出现乱码怎么解决)

本文目录win7网页打开出现乱码怎么解决为什么打开网页,显示的是乱码呢电脑打开网页出现乱码网页打开部分乱码如何解决为什么网页打开时是乱码浏览器出现乱码怎么解决打开网页,所有文字都变成了乱码怎么办急急急!!!win7网页打开出现乱码怎么解决方

2025年2月22日 10:40

现在用svn的多还是git的多(git和svn哪个好)

现在用svn的多还是git的多(git和svn哪个好)

本文目录git和svn哪个好Git和SVN的区别,哪个好企业使用svn和git哪个多一些Git和SVN,代码管理哪个更好git和svn哪个好GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的

2025年3月27日 05:00

jquery下载表格(jquery表格插件哪个)

jquery下载表格(jquery表格插件哪个)

本文目录jquery表格插件哪个请教如何用JQuery导入导出excel表格我在jquery mobile里怎么实现表格jQuery实现的可编辑表格完整实例jquery表格插件哪个大多数前端er都把网页中的table标签替换为div,主要就

2025年2月22日 15:00

aspectj依赖(一个简单的SpringMVC需要哪些jar包)

aspectj依赖(一个简单的SpringMVC需要哪些jar包)

本文目录一个简单的SpringMVC需要哪些jar包spring-aspects和aspectjweaver.jar,aspectjrt.jar这两个包的关系一个简单的SpringMVC需要哪些jar包spring依赖的jar包如下:下面是

2025年3月15日 10:20

嵌入式编程语言有哪些(嵌入式系统开发都用到什么语言啊)

嵌入式编程语言有哪些(嵌入式系统开发都用到什么语言啊)

本文目录嵌入式系统开发都用到什么语言啊嵌入式系统需要学什么语言嵌入式开发语言有哪些嵌入式开发要学什么嵌入式开发要学哪些东西嵌入式用什么语言编程嵌入式软件编程语言有哪些嵌入式系统开发都用到什么语言啊目前,在嵌入式系统开发过程中使用的语言种类很

2025年3月20日 20:30

gridview删除一行(如何删除gridview的所有行)

gridview删除一行(如何删除gridview的所有行)

本文目录如何删除gridview的所有行gridview 怎样删除一行删除data gridview中一行数据并刷新asp.net c#如何删除gridview选中一行数据GridView如何删除一行C#如何删除Gridview中一行数据g

2025年2月10日 12:10

任何的任意的英文(任意的的英语翻译 任意的用英语怎么说)

任何的任意的英文(任意的的英语翻译 任意的用英语怎么说)

本文目录任意的的英语翻译 任意的用英语怎么说“随意”英文怎么说三者或三者以上的“任何一个”的英语是什么任何用英文怎么说任何的英语单词怎样写“任何人”的英文是什么“随便”的英文怎么说任意的的英语翻译 任意的用英语怎么说任意的 每一个属性

2025年2月16日 00:50

内存管理有哪几种方式(为什么现在手机 256G 越来越不够用了有哪些内存管理的技巧)

内存管理有哪几种方式(为什么现在手机 256G 越来越不够用了有哪些内存管理的技巧)

本文目录为什么现在手机 256G 越来越不够用了有哪些内存管理的技巧Linux进程内存管理方法Windows内存管理的几种方式和优缺点进程内存管理方法常用的内存管理方法有哪些阐述操作系统是如何对cpu,内存和磁盘进行管理的操作系统内存管理的

2025年3月3日 00:50

web设计软件(web前端软件学习)

web设计软件(web前端软件学习)

本文目录web前端软件学习web软件的界面尺寸有什么可视化设计web界面的工具web程序设计用什么软件做题求推荐Web App原型设计、代码生成软件web app开发需要什么软件常见web程序设计的开发工具有哪些,各自的特点是什么web前端

2025年3月1日 12:50

网站编程软件(做网站和开发软件的公司为什么感觉越来越难做)

网站编程软件(做网站和开发软件的公司为什么感觉越来越难做)

本文目录做网站和开发软件的公司为什么感觉越来越难做网络工程(软件开发)与软件工程有什么区别学习内容一样吗做网站和开发软件的公司为什么感觉越来越难做其实不仅是做网站和软件开发的公司越来越难做,做系统集成的公司其实更难做。本人虽是计算机专业出身

2025年2月19日 12:20

persistence形容词(形容词,副词和介词的用法(要百分百正确的))

persistence形容词(形容词,副词和介词的用法(要百分百正确的))

本文目录形容词,副词和介词的用法(要百分百正确的)free和freedom有什么区别英语中形容词的比较级的变化规律10个词语的解释形容词,副词和介词的用法(要百分百正确的)形容词解释一。只能用作定语,不能用作表语的形容词:little,wo

2025年2月19日 19:40

js跳转页面(js脚本中如何实现页面间的跳转)

js跳转页面(js脚本中如何实现页面间的跳转)

本文目录js脚本中如何实现页面间的跳转js网页跳转问题js的几种跳转有什么区别js如何跳转页面js 怎么跳转到另外的一个页面js判断是否登录并跳转页面JS实现页面跳转的几种方式js点击按钮跳转页面有哪些方法js脚本中如何实现页面间的跳转1、

2025年2月19日 20:30

ctrl键用法大全(怎样用ctrl键)

ctrl键用法大全(怎样用ctrl键)

本文目录怎样用ctrl键Ctrl键是什么意思快捷键ctrl放大ctrl键是什么意思ctrl+n、ctrl+c、ctrl+v、ctrl+w这些快捷键都是干什么用的Ctrl加各键的用法电脑键盘ctrl键的功能ctrl用法:怎样用ctrl键ctr

2025年3月10日 20:50

automaticupdates(无法启动Automatic Updates)

automaticupdates(无法启动Automatic Updates)

本文目录无法启动Automatic UpdatesAutomatic Updates服务怎么禁用.无法启动Automatic Updates服务automatic updates 启动失败 提示“本地计算机无法启动autom

2025年3月23日 17:30

www.code123.net这个网址做的不错,源码哪里可以下啊?洛阳一拖是五年一贯制大专吗 能发毕业证吗

www.code123.net这个网址做的不错,源码哪里可以下啊?洛阳一拖是五年一贯制大专吗 能发毕业证吗

本文目录www.code123.net这个网址做的不错,源码哪里可以下啊洛阳一拖是五年一贯制大专吗 能发毕业证吗郑州轨道工程职业学院就业怎么样www.code123.net这个网址做的不错,源码哪里可以下啊这是首页的源代码:《!DOCTYP

2025年3月4日 17:50

验收测试包括哪些(软件验收测试应该完成哪些主要测试工作)

验收测试包括哪些(软件验收测试应该完成哪些主要测试工作)

本文目录软件验收测试应该完成哪些主要测试工作验收测试的介绍验收测试主要有哪些人参与测试验收测试报告谁编写软件验收测试应该完成哪些主要测试工作验收测试用来验证系统是否达到了用户需求规格说明书(可能包括项目或产品验收准则)中的要求,测试希望尽可

2025年3月14日 14:00

周易网站源码(《周易》既熟悉又陌生,这部神秘的天书暗藏了哪些智慧呢)

周易网站源码(《周易》既熟悉又陌生,这部神秘的天书暗藏了哪些智慧呢)

本文目录《周易》既熟悉又陌生,这部神秘的天书暗藏了哪些智慧呢有没有自学周易的好网站介绍怎样能审办易经预测网站平台什么是周易中华周易最准确的网站《周易》既熟悉又陌生,这部神秘的天书暗藏了哪些智慧呢儒学影响了我国两千多年,虽然中国有一些道家、法

2025年3月20日 14:20

importance可数吗(importance能加s吗)

importance可数吗(importance能加s吗)

本文目录importance能加s吗importance可数吗importance能加s吗不能,importance是不可数名词。名词 n. 1.重要,重大;重要性Here I would stress the importance of

2025年3月16日 08:00

近期文章

lender(你怎么看比特币)
2025-04-05 12:50:02
本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:18
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:6
标签列表

热门搜索