`
huobengle
  • 浏览: 860359 次
文章分类
社区版块
存档分类
最新评论

使用调试钩子屏蔽全局钩子

 
阅读更多
WH_DEBUG为调试钩子,用来给钩子函数除错。在系统调用系统中与其他Hook关联的Hook钩子例程之前,系统会调用WH_DEBUG Hook钩子例程。你可以使用这个Hook来决定是否允许系统调用与其他Hook关联的Hook钩子例程。WH_DEBUG调用DebugProc钩子例程。
DebugProc语法:

nCode消息处理标识。如果nCode<0,钩子函数不能处理这个消息,需要使用CallNextHookEx函数继续传递消息,并且返回CallNextHookEx的返回值。
wParam指示当前即将被调用的钩子的类型,如WH_MOUSE,WH_KEYBOARD 参数,可支持除了低级鼠标低级键盘钩子的所有钩子。
lParam 指向DEBUGHOOKINFO 结构。

idThread 安装WH_DEBUG钩子的线程ID。
idThreadInstaller 当前即将被调用的钩子所在的线程ID。

lParam 当前即将被调用的钩子的lParam参数。
wParam 当前即将被调用的钩子的wParam参数。
Code 当前即将被调用的钩子的nCode参数。

返回值:当你已经处理了该钩子并且不希望即将被调用的钩子继续执行,则必须返回非0值 否则请返回CallNextHookEx的值。

这里顺便提下钩子回调函数的调用线程。可以在一个全局钩子中打印下GetCurrentThreadID看看返回值,可以看到得到的是一样的值,证明都是安装钩子所在的进程中的调用SetWindowsHookEx所在的线程,所以
进行程序自身反HOOK时只要知道判断idThread和idThreadInstaller是否相等就可了。如果相等,说明即将被调用的钩子是自己线程中钩子;如果不等,说明是其它线程中的钩子,只要返回非0值就可以了,这时即将被调用的钩子就不会执行了。但是要去屏蔽其他程序的钩子时,就需要写个DLL来注入了,不过这个貌似没用处吧。。。。不清楚


当然,有矛就有盾捏,比如你要用HOOK进行键盘拦截时,在安装WH_KEYBOARD时,同时安装一个WH_DEBUG钩子。这时你自己的WH_DEBUG钩子将拦截到你自己的WH_KEYBOARD,DEBUGHOOKINFO 结构中的lParam存放的是WH_KEYBOARD的lParam,wParam存放的是WH_KEYBOARD的wParam,只要在这里处理WH_KEYBOARD就可以了。因为HOOK链是按照后进先出的顺序执行的,所以你只要在反HOOK的WH_DEBUG之后安装WH_DEBUG,就可以在它之前进行处理了,目前一些简单的游戏或是即时通讯软件就是简单的安装个WH_DEBUG钩子来屏蔽一些键盘钩子,但是这很屎的,低级键盘钩子都躲不过。
顺便再提下低级键盘钩子,不需要DLL,直接这样安装SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
全局有效,调试钩子屏蔽不了,想要记录某个特定程序键盘输入信息回调函数中判断最前端窗口是否为目标窗口就可以。

分享到:
评论

相关推荐

    Windows编程循序渐进.part2

    19.4.1 实例:使用调试钩子屏蔽全局钩子 372 19.4.2 实例:检测注入模块 374 19.4.3 实例:使用DLL_THREAD_ATTACH阻止远程线程 377 19.4.4 实例:使用挂钩LoadLibraryExW屏蔽全局钩子 379 附录 光盘源码实例 ...

    Windows编程循序渐进.part3

    19.4.1 实例:使用调试钩子屏蔽全局钩子 372 19.4.2 实例:检测注入模块 374 19.4.3 实例:使用DLL_THREAD_ATTACH阻止远程线程 377 19.4.4 实例:使用挂钩LoadLibraryExW屏蔽全局钩子 379 附录 光盘源码实例 ...

    c#全局键盘钩子实现锁屏demo(win7 64位系统测试可用)

    除了ctrl+alt+delete没有屏蔽外 其他系统热键(alt+tab,win+tab,alt+F4,ctrl + shift+ esc)都实现了屏蔽,对于ctrl + alt + del 用一个timer监控 杀死任务管理器 基本实现了在win7系统下的锁屏,最近研究的,分享...

    易语言赤月神社模块 v6.80 免费版.rar

    植入代码 网页访问类 增加 命令 内联汇编 { 置汇编 ASM编译 ASM执行 ASM取代码 } 正则表达式 类 屏蔽类 脚本类 正则表达 DerourHook 驱动模拟类 底层模拟类 消息钩子类 热键编辑框 地址寄存器类 DLL全局注入类 ...

    vc++ 应用源码包_6

    VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写...

    vc++ 应用源码包_5

    VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写...

    vc++ 应用源码包_1

    VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写...

    vc++ 应用源码包_2

    VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写...

    vc++ 应用源码包_3

    VC 利用底层键盘钩子屏蔽任意按键MaskKey 动态链接库实现钩子,然后程序调用。 VC 透明窗口效果的电子标尺源代码 实现了屏幕绘图操作,实现电子标尺数据计算以及显示,有数据库操作保存数据。 VC++ ini文件读写...

    易语言 茶凉专用模块

    参数 状态, 整数型, 可空, 可空:按键(按下+放开) 1 #按键_ 3 #按下_ 4 #放开_ 如果状态大于等于5则为按下与放开之间的延时,可解决某些屏蔽 .参数 功能键方式, 逻辑型, 可空, 默认为普通键, 真:功能键方式模拟,如ctrl...

    C#编程经验技巧宝典

    4 &lt;br&gt;0008 为程序设置版本和帮助信息 4 &lt;br&gt;0009 设置Windows应用程序启动窗体 5 &lt;br&gt;0010 设置Web应用程序起始页 5 &lt;br&gt;0011 如何设置程序的出错窗口 5 &lt;br&gt;0012 如何进行程序调试 6 ...

    vc++ 开发实例源码包

    gh0st v3.6 源码 - 可下断点调试! 如题。详细见源码。 GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理单元的源码文件。完成端口通讯模块内存管理。 haisanidsV1.2-网络连接监控 IP实时数据。自绘了很多控件...

    delphi 开发经验技巧宝典源码

    0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...

    delphi 开发经验技巧宝典源码06

    0024 声明局部变量、类变量和全局变量 19 0025 有效利用条件语句和嵌套条件语句 20 0026 有效利用循环语句和嵌套循环语句 21 0027 使用GoTo跳转语句 21 0028 有效使用Case Else语句 22 0029 保证数组循环...

    1345个易语言模块

    API的使用方法.ec API 设置颜色对话框模块.ec ard.ec Arhz_自动更新.ec Base64编解码.ec BASE64编解码模块.ec Bios.ec Bios 信息.ec BMP加密数据.ec BMP滤镜模块.ec BOX.EC BPL专用更新模块.ec BPL综合模 块.ec BPL...

    1350多个精品易语言模块

    API的使用方法.ec API 设置颜色对话框模块.ec ard.ec Arhz_自动更新.ec Base64编解码.ec BASE64编解码模块.ec Bios.ec Bios 信息.ec BMP加密数据.ec BMP滤镜模块.ec BOX.EC BPL专用更新模块.ec BPL综合模 块.ec BPL...

Global site tag (gtag.js) - Google Analytics