一种绕过全局钩子安装拦截的思路

C语言实现Windows调试器与全局钩子:从原理到实战 调试与钩子(Hook)是软件逆向工程与系统编程中的核心技术。调试器通过操作系统提供的原生接口(如Windows Debugging API)实现对目标进程的精细控制,允许开发者以单步执行、断点等方式实时监控程序状态,其本质是对进程执行流的主动干预与观察。钩子技术则更进一步,它通过在系统消息流或函数调用链中插入自定义代码,实现对特定事件(如键盘输入、API调用)的监听与拦截,为行为分析、功能扩展提供了底层支持。这两项技术的结合,在软件安全分析、漏洞挖掘、遗留系统维护等场景中具有极高价值。本文以Windows平 阅读详情

by mj0011

本文介绍了一种思路,利用安全软件驱动和WINDOWS本身处理全局钩子安装过程的不同,以绕过安全软件对全局钩子安装的拦截。这种方法并不保证能通用于任何安全软件。

安全软件,例如HIPS,AV等,通常会安装 NtUserSetWindowsHookEx / NtUserSetWinEventHook的钩子

拦截全局钩子注入,防止键盘、消息拦截或者DLL注入。

在这两个函数的参数中,都存在一个pstrlib参数,指向了要注册全局钩子的DLL路径名,这个路径是DOS路径名,通常安全软件会分配BUFFER,将pstrlib这个UNICODE_STRING中的字符串读取出来,再加上NT路径头 (/??/),然后进行相关处理后传递给RING3的处理程序,比较常见的例如使用RtlCopyUnicodeString , 或者直接RtlCopyMemory(LocalName , pstrlib->Buffer , pstrlib->Length)

而WINDOWS函数自身,例如NtUserSetWindowsHookEx, NtUserSetWinEvnetHook,他们是怎么处理这个参数的呢?

实际上,这些函数最终会调用内部函数GetHmodTableIndex将DLL名加入一个ATOM Table中,并返回一个INDEX,记为为ihmod,等到CallNextHook2,或者分发winevent hook 时,通过 ihmod再取回这个index,得到DLL名,并通过User mode callback调用LoadLibrary加载这个DLL

GetHmodTableIndex则会调用一个UserAddAtom函数来将DLL名加入UserAtomTableHandle这个atom中。UserAddAtom这个函数接收的DLL名参数,是一个LPCWSTR类型的字符串,来自pstrlib->Buffer.UserAddAtom并不关心pstrlib->Length的长度。等到向RING3程序注入这个DLL时,调用xxxLoadHmodIndex中才在UserGetAtomName获取这个字符串后,通过调用RtlInitUnicodeString重新计算这个字符串的长度。

那么,很简单的方法就可以绕过安全软件的全局钩子拦截了:

(1).length 传入0,直接绕过检测

(2).buffer为c:/windows/system32/msctf.dllx

length传递为该字符串字节长度-sizeof(wchar)

也就是让安全软件得到错误的系统DLL名,实际注册的是其他的文件

 

SetWindowsHookEx全局钩子实战:原理、代码与避坑指南 Windows系统编程中,钩子(Hook)机制是一项强大的事件拦截技术,允许应用程序在消息流经系统时插入自定义逻辑。SetWindowsHookEx作为核心接口,被广泛用于键盘鼠标监控、UI自动化测试、输入统计等场景。许多开发者初学时只关注API签名,却容易忽略钩子链的传递机制、回调执行上下文以及32/64位进程差异等关键细节。本文通过一个基于Python ctypes的完整可运行demo,深入剖析低级键盘钩子(WH_KEYBOARD_LL)的安装、回调与卸载全流程,并对比常见钩子类型的适用场景。重点解析全 阅读详情

相关推荐

MFC全局钩子实战:WH_KEYBOARD_LL与WH_MOUSE_LL跨进程键鼠监控

全局钩子是Windows系统中跨进程捕获键盘鼠标输入的核心技术,其中低级钩子WH_KEYBOARD_LL和WH_MOUSE_LL无需DLL注入即可实现系统级事件监听。其原理是系统在安装钩子的线程上直接调用回调函数,开发者通过SetWindowsHookEx注册钩子并处理KBDLLHOOKSTRUCT、MSLLHOOKSTRUCT结构体数据。该技术广泛应用于输入采集、自动化测试、远程协助等场景,但需注意回调线程模型、消息传递机制和卸载时机等工程细节。本文以MFC对话框工程为例,详细讲解低级钩子的安装、数据解析

weixin_29189373的博客 264

在用户态防止全局钩子注入

项目需要,研究了一个礼拜,防止全局钩子注入的功能基本实现。今天偶然在网路上搜索相关主题,发现“看雪论坛”有前辈早就讨论过这个问题,且提出了解决方案,思路与在下不谋而合。不过据我的分析,该前辈的解决方案还有些缺陷。至少应该从以下角度改进: 1、当全局钩子的LoadLibraryE

lyclowlevel的专栏 2353

MFC全局钩子捕获键鼠输入:WH_KEYBOARD_LL与WH_MOUSE_LL实战指南

Windows全局钩子是一种系统级消息拦截机制,通过SetWindowsHookEx将回调函数挂入系统钩子链,实现对键盘鼠标输入的实时捕获。其核心原理在于低级钩子(WH_KEYBOARD_LL/WH_MOUSE_LL)无需DLL注入,由系统直接回调安装线程,天然兼容32/64位进程。该技术价值在于能够跨进程获取全局输入事件,广泛应用于快捷键响应、操作录制回放、输入监控等场景。在MFC工程中落地时,需重点关注回调函数的CALLBACK约定、消息循环的及时处理以及PostMessage的异步投递,避免钩子超时失

weixin_31534091的博客 276

SetWinEventHook 事件钩子

      相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等等,要截获这些事件可以使用SetWinEventHook,它的原型如下:HWINEVENTHOOK WINAPI SetWinEventHook(  __in  UINT event

magictong的专栏 1万+

SetWindowsHookEx实战:全局键盘钩子Demo与热键拦截

在Windows应用开发中,键盘输入不会直接送达窗口,而是沿系统输入链在多个钩子节点间传递。SetWindowsHookEx允许开发者将自定义回调插入这条链,实现全局输入事件的截获与转发。其中以WH_KEYBOARD_LL为代表的低级钩子,无需注入DLL即可跨进程监听键盘动作,配合消息循环与CallNextHookEx返回值控制,成为实现全局热键、输入统计、无障碍辅助等功能的常用技术。文章从消息钩子原理与选型出发,逐步讲解最小可运行Demo、常见的坑点以及将钩子改造成全局热键拦截器的实践思路,是快速上手Wi

weixin_31102231的博客 217

Interception驱动级键盘鼠标拦截:原理、安装与实战应用

在Windows输入处理领域,用户态方案如全局钩子和SendInput存在拦截能力弱、模拟易被识别等局限。驱动级拦截则能在内核层捕获和注入完整输入事件,实现更底层的控制。Interception正是这样一个工作在驱动层的键盘鼠标输入拦截框架,它支持按键过滤、重映射、鼠标平滑、键盘抖动过滤(keyboard chatter blocker)和飞鼠(flying mouse)等高级玩法。本文从驱动架构出发,讲解环境搭建、API调用,并结合实际场景演示如何实现防抖、按键映射和鼠标轨迹优化,帮助开发者构建稳定高效的

weixin_29314405的博客 325

应用SetWinEventHook截获Windows事件

应用SetWinEventHook截获Windows事件 用SetWindowsHookEx可以截获Windows中的消息,然而对于更高级一点的Windows事件(如:弹出菜单事件、ATL+TAB切换事件等等),可以用SetWinEventHook来截获. SetWinEventHook创建的钩子也分为进程内和进程外两种,进程内钩子效率高但必须以DLL形式存在,因为其须映射到别的进程中.在这个Demo中我采用进程外钩子来截获所有事件。 钩子例程如下所示: VOIDCALL...

liuyukuan的专栏 2705

Interception 1.0.1 驱动层键鼠拦截实战:从安装到输入录制回放

在 Windows 输入处理中,全局钩子常受限于用户态消息链,无法应对全屏游戏或高权限窗口。内核态过滤驱动通过插入键盘鼠标驱动栈,在硬件层截获原始 HID 事件,实现设备级输入控制。这种技术能绕过用户态限制,为按键重映射、宏工具和自动化测试提供底层支持。Interception 1.0.1 正是此类方案,包含驱动与用户态库,通过 interception_send 和 interception_receive 收发事件。适用于开发底层按键映射、输入录制回放及设备过滤的工程师,需注意驱动安装、位数匹配和多设备

weixin_28839629的博客 250

沙盘Sandboxie 原理分析

Sandboxie. Process isolation with kernel hooks. May 23rd, 2011 Posted in Uncategorized Write comment 1. Introduction: Sandboxie

xcntime的专栏 7789

MFC全局钩子实战:键盘鼠标输入监控与避坑指南

Windows消息钩子是桌面应用开发中实现全局输入监控的基础技术,其核心原理是通过SetWindowsHookEx在系统消息队列中截获键盘鼠标事件。低级钩子WH_KEYBOARD_LL和WH_MOUSE_LL无需DLL注入,可直接在MFC工程中实现跨进程输入捕获,适用于自动化测试、外设联动、工控行为审计等场景。相比Raw Input,全局钩子能突破窗口焦点限制,但需注意回调函数必须轻量化,避免阻塞系统输入。本文深入讲解MFC环境下全局钩子的安装、回调实现、组合键识别与性能优化,并给出Win10/Win11兼

weixin_31774841的博客 107

PCB设计鼠标增强:全局钩子、手势映射与宏配置避坑指南

输入钩子与键鼠映射是一类在系统消息到达应用前重写输入的技术:通过低级鼠标钩子识别前台进程与窗口类,把滚轮、中键、侧键和手势轨迹映射为EDA命令,并用宏按延时序列串联高频操作。其技术价值在于减少手离鼠标的切换成本,让多层板布局布线中的切层、打孔、改线宽等动作更连贯一致。应用场景覆盖PCB设计、远程桌面、多屏混合DPI和中文输入法等复杂环境。围绕PCB设计鼠标增强软件的落地,需要重点关注全局钩子权限、前台判定、手势识别参数、宏延时、DPI适配与配置模板化管理,避免时灵时不灵和误触发问题。

weixin_30898555的博客 179

Windows全局钩子(SetWindowsHookEx)实战:从防沉迷助手到无障碍辅助工具的开发思路

本文深入探讨了Windows全局钩子技术(SetWindowsHookEx)的实战应用,从开发防沉迷助手到无障碍辅助工具的创新思路。通过详细解析核心API和代码示例,展示了如何利用键盘鼠标监控钩子实现应用时长统计、手势识别等实用功能,同时强调技术伦理和性能优化要点。

weixin_30770783的博客 383

屏幕取词技术核心:API Hook与TextOut拦截实战

在Windows应用开发中,屏幕文字获取方式直接影响词典、划词翻译和无障碍工具的使用体验。截屏识别不仅延迟高,还难以处理滚动和动态界面;更底层的技术路线则是在文本真正绘制前,通过API Hook拦截GDI文本输出函数,直接从函数参数中拿到字符串、坐标和字体信息。这种机制正是屏幕取词能够做到精准、低延迟的基石。通过inline hook改写TextOutW与ExtTextOutW入口,配合进程注入和命中测试,即可实现轻量高效的划词取词。实际工程中还需应对64位跳转重定位、DPI坐标换算、多线程缓冲竞争以及Di

weixin_29268637的博客 272

win32 api拦截---------hips核心技术

 拦截win32 API 调用对于多数windows开发人员来说都一直是很有挑战性的课题。钩子机制就是用一种底层技术控制特定代码段的执行,它同时提供了一种直观的方法,很容易就能改变操作系统的行为,而并不需要涉及到代码。这跟一些第三方产品类似。    许多系统都通过拦截技术(spying techniques)利用现有windows应用程序。而拦截的一个重要目的,并不只是为应用程序提供更高级功能,而

xjh_Love_paopao的专栏 883

C#全局钩子实战:EasyHook实现跨进程注入与键盘监听

在Windows桌面应用开发中,经常需要捕获其他进程的用户输入或系统事件,这涉及进程注入、API Hook和全局钩子等底层技术。理解托管代码如何在非托管环境中运行、钩子回调生命周期管理,是解决跨进程拦截问题的关键。EasyHook作为用户模式挂钩库,使得C#开发者可以优雅地将代码注入指定进程,安装全局键盘钩子或拦截API调用,并支持IPC通信。本文通过一个完整Demo,展示从注入器到钩子库的实现过程,并对比原生SetWindowsHookEx与Detours的选型边界,最后给出进程位数匹配、杀毒拦截等实战避

weixin_27134495的博客 310

MFC全局键鼠钩子实战:SetWindowsHookEx原理与完整实现

在Windows桌面应用开发中,全局键盘鼠标监听是很多工具类软件的核心需求,比如全局快捷键、键鼠操作录制与回放。系统级输入事件的捕获依赖一套底层消息钩子机制,其中SetWindowsHookEx是最关键的API,它允许开发者将自定义回调函数挂入输入事件链,从而在应用失去焦点时依然能够感知和拦截键鼠行为。这种低层钩子(WH_KEYBOARD_LL/WH_MOUSE_LL)无需DLL注入,直接在进程内执行回调,兼具易用性与实时性,广泛用于自动化测试、远程协助和演示录制等场景。本文围绕MFC框架,深入讲解全局钩子

weixin_42523326的博客 292

C++实现鼠标静止:Windows全局钩子原理与恶搞程序开发

Windows API提供系统级输入控制接口,通过消息队列和钩子机制实现事件拦截。全局钩子技术允许在消息传递前捕获并处理输入事件,是输入监控、自动化测试等场景的基础。在C++开发中,利用WH_MOUSE_LL钩子可临时阻断鼠标消息,实现鼠标静止效果,适用于趣味编程或注意力测试。该技术涉及线程消息循环和回调函数设计,需注意恢复机制和系统安全边界。

weixin_42520796的博客 204

SetWinEventHook检测外部程序关闭

SetWinEventHook 检测程序关闭

上一篇: 谈谈注册表项信息隐藏
下一篇: 捆绑感染 思路实现
levellee
博客等级 码龄20年 9粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值