windows全局消息钩子的一个BUG

windows全局消息钩子的一个BUGWindows中设置消息钩子,SetWindowsHookEx和UnhookWindowsHook函数,但是系统在我测试的条件下,会调用Unhook错误的消息钩子。应该是微软的一个小BUG,最终的原因应该还是句柄(HHook)没有对应到相应的HOOK结构。

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

Jetbrains全系列IDE稳定放心使用

Windows操作系统全局消息钩子Bug

场景:

Process A与Process B是同一个程序的两个实例,

1、 两个进程都设置了WH_CBT消息钩子,钩子的消息处理都在TSVulFw.dat模块的同一个函数。

2、 两个进程具有相同的名称,但是PID不同。

当进程通过以下流程执行时,就会出现一个BUG

windows全局消息钩子的一个BUG

BUG分析:

Process A首先设置了全局的WH_CBT钩子,SetWindowsHookEx最终会调用到win32k.sys的zzzSetWindowsHookEx函数,GetHmodTableIndex(UNICODE_STRING)可以定义到模块名称。创建一个新的HOOK结构地址0xbbe566e8

模块地址:

C:/Documents and Settings/All Users/Application Data/Tencent/TSVulFw/TSVulFw.dat

模块Index: 

GetHmodTableIndex()的到 ihmod = 3

Process B也设置了全局的WH_CBT钩子,SetWindowsHookEx最终会调用到win32k.sys的zzzSetWindowsHookEx函数,GetHmodTableIndex(UNICODE_STRING)可以定义到模块名称。创建一个新的HOOK结构地址0xbbe5ef58

windows全局消息钩子的一个BUG

Process A 执行UnhookWindowsHookEx操作,最终调用win32k.sys的zzzUnhookWindowsHookEx函数,该函数Unhook的Hook结构竟然是Process B的,结构的地址0xbbe5ef58从图中“dd edi”命令可以看到Hook结构的内容,地址是0xbbe5ef58,下一个结构的地址是Process A设置的Hook结构0xbbe566e8。

Process A没有Unhook自己的Hook结构,反而Unhook了Process B设置的Hook结构,BUG啊~~~~~

windows全局消息钩子的一个BUG

最后Process A退出的时候,调用xxxDestroyThreadInfo -> FreeThreadsWindowHooks -> UnlinkHook(PHOOK) ,将Process A自己设置的WH_CBT全局消息钩子给Unhook了。

windows全局消息钩子的一个BUG

Process B UnHook时,HHook句柄已经为NULL了

windows全局消息钩子的一个BUG

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

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

(0)
上一篇 2022年10月21日 下午3:16
下一篇 2022年10月21日 下午3:36


相关推荐

  • vue的安装和使用_如何正确使用

    vue的安装和使用_如何正确使用前言Vue(读音/vjuː/,类似于view)是一套用于构建前后端分离的框架。刚开始是由国内优秀选手尤雨溪开发出来的,目前是全球“最”流行的前端框架。使用vue开发网页很简单,并且技术生态环境完善

    2022年7月31日
    7
  • autossh安装和连接

    autossh安装和连接安装 autosshyumin yautossh 创建公钥和密钥 ssh keygen 密钥拷贝到跳转服务器 ssh copy id p15178root 148 70 111 203 自动检测脚本 bin shps fe grepautossh grep 148 70 111 203 grep vgrepif ne0 thenecho startprocess usr bin autossh p15178

    2026年3月19日
    2
  • 读懂spring源码_如何阅读spring源码

    读懂spring源码_如何阅读spring源码最近工作需要,使用到spring框架,想对spring框架进行深入的学习一下,看看源代码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建环境吧。环境搭建sping源码环境的搭建,当然了不想下载源码的话,就直接debug源码也可以的。

    2022年8月12日
    11
  • oleDbCommand访问Excel

    oleDbCommand访问ExceloleDbCommand访问Excel:_oleCmdSelect=newOleDbCommand(“SELECT*FROM[Sheet1$A2:A5]”,_oleConn);objValue=_oleCmdSelect.ExecuteScalar();usingSystem;usingSystem.Collections.Generic;usingS…

    2022年5月12日
    46
  • 解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网

    解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网最近在VMware虚拟机里玩Centos,装好后发现上不了网。经过一番艰辛的折腾,终于找到出解决问题的方法了。最终的效果是无论是ping内网IP还是ping外网ip,都能正常ping通。方法四步走:第一步,我们进入/etc/sysconfig/network-scripts目录,查看该目录有没有形如ifcfg-XXX的文件:如果你看不到以ifcfg-打头的文件(ifcfg-lo除外),…

    2022年5月12日
    42
  • HDU 4331 Image Recognition

    HDU 4331 Image Recognition

    2021年8月19日
    52

发表回复

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

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