吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5791|回复: 18
收起左侧

[系统底层] win10 x64键盘过滤代码分享以及一些分析

[复制链接]
hangzhouw 发表于 2022-4-17 16:38
本帖最后由 hangzhouw 于 2022-4-18 13:08 编辑

本代码来自《Windows内核编程》一书中键盘过滤那一部分,但不幸的是,书中提供的代码存在一些错误,无法直接拿来使用。错误中的大部分都可以根据文章《KbdClass键盘过滤驱动以及书中几处错误》修改,还有一个错误 屏幕截图 2022-04-17 152230.png 发生在这行代码中。本来在书中的原意是要打印ANSI字符,结果代码里确是%C即打印UNICODE字符,这样在程序运行到这里后就会触发蓝屏(win10下),文章《键盘过滤驱动遇到的蓝屏血案》虽然解决了这个问题,但是对问题的分析不够到位,因此我在该帖中将分享我自己对该问题的分析步骤,这也是我第一篇对win10的逆向贴。

首先,在程序运行触发中断之后,在windbg里会显示下图中的错误提示,接着使用!analyze -v指令查看错误细节。
1.png


可以看到,错误是IRQL_NOT_LESS_OR_EQUAL (a),即我们的IRQL太高,访问了不能访问的分页内存或无效内存。后面的分析中会发现,该驱动程序访问了处于用户态的PEB里的成员AnsiCodePageData,而此时IRQL为2,这就导致蓝屏的发生。
2.png


接着可以查看函数调用堆栈,这里显示了函数的调用顺序,从图中可以发现,问题出现在RtlpIsUtf8Process这个函数,而这个函数又是在DbgPrintEx里的,因此我们通过这一信息不仅确定了错误发生在哪个函数,而且知道了要从哪里中断来查看错误细节。
3.png


利用WinDbg对驱动进行调试,发现了在RtlpIsUtf8Process函数中,这条语句 4.png 会导致蓝屏。在这条语句上有几条很重要的语句(下图红框所围)。
现在解释一下这几条语句的意思,第一条语句将KTHREAD的地址放入rax,第二条语句将KPROCESS的地址放入rax,第三条语句将PEB的地址放入rdx。因此,cmp qword ptr [rdx+0A0h],0 的意思其实是AnsiCodePageData与0比较。


6 (2).png


实际上,当按下a键时(我是用a键测试的),驱动运行正常的流程是
1、出现一个按下a键的提示
5.png

2、驱动会运行在system进程中,在这个进程里没有PEB,因此这条语句会被跳过

3、出现a键弹起的提示,这时驱动运行在csrss.exe进程里,且PEB是存在的,AnsiCodePageData会被拿来与0比较,整个流程下来不会触发蓝屏,也就是说这个时候IRQL是PASSIVE_LEVEL。
7.png

但是,在错误的流程里,按下a键出现Down的提示后,驱动并不会运行在system进程中,而是运行在MsMpEng.exe进程里,这就导致PEB存在,原本应该跳过AnsiCodePageData与0判断的语句,结果这条语句被执行了,这样就会访问rdx+0A0h这个地址,而此时IRQL为2,一旦访问rdx+0A0h这个地址(该地址指向PEB里的成员,而PEB在用户态,IRQL为PASSIVE_LEVEL才能访问),就会触发蓝屏。

总结一下,当按下a键时,驱动应当运行在system进程,此时PEB并不存在,判断AnsiCodePageData的语句会被跳过,就不会访问rdx+0A0h,驱动正常运行,打印出a。但是当按下a键发生错误时,驱动并没有运行在system进程,导致rdx+0A0h会被访问,而此时的IRQL是2,访问了不该访问的内存,导致蓝屏。至于为什么驱动没有在system进程运行,我猜测原因是在错误的流程里,由于代码里用Unicode显示ASNI,windows会让驱动运行在MsMpEng.exe中,这个进程是反恶意软件服务可执行文件,这就导致访问了不该访问的内存。

下面给出可以在win10 x64下运行的键盘过滤代码。

MyDriver1.zip

10.18 KB, 下载次数: 24, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
cancanneed + 1 + 1 用心讨论,共获提升!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

宅の士 发表于 2022-4-19 10:23
本帖最后由 宅の士 于 2022-4-19 10:27 编辑

看楼主研究这个,我决定吧我差不多6年前基于键鼠过滤做的一个独特玩法锁屏小工具源码分享下,Win7 x64~Win10 x64自己用过都是正常的。
当时做这个锁屏玩法还是因为玩DNF偶尔离开宿舍 游戏开着 怕别人动我资产 系统自带的锁定账号和常见一些锁屏小软件存在画面遮挡或导致3D大型游戏休眠假死
不是很合我意,于是就想着锁定键盘但允许其他人动我方向键WSAD城镇逛街溜达和I看我装备,锁定鼠标点击但允许移动查看装备信息,解锁设计为键盘盲按Ctrl+L+密码+Enter即可。
不过这么多年了一直存在一个小瑕疵就是卸载驱动逻辑以及电源管理即插即用键盘插拔上在Win10 x64环境存在键盘按键失灵重启恢复正常,影响不大加没时间研究留着这个瑕疵心病至今,楼主感兴趣可以研究研究。

键鼠过滤锁屏源码.zip

36.51 KB, 下载次数: 20, 下载积分: 吾爱币 -1 CB

 楼主| hangzhouw 发表于 2022-4-19 11:18
宅の士 发表于 2022-4-19 10:23
看楼主研究这个,我决定吧我差不多6年前基于键鼠过滤做的一个独特玩法锁屏小工具源码分享下,Win7 x64~Win1 ...

谢谢分享
IBinary 发表于 2022-4-18 15:12
liziming 发表于 2022-4-18 20:19
挺好的,感谢分享
CXC303 发表于 2022-4-18 21:23
感谢分享
yippee 发表于 2022-4-19 14:12
谢谢分析和分享
h81632468 发表于 2022-4-24 23:33
感谢分享
lhglhg 发表于 2022-6-12 19:28
感谢分享,感谢分享
longkou2022 发表于 2022-7-11 13:19
每天学习一点点 进步一点点
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 01:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表