首页
社区
课程
招聘
[原创]键盘模拟原理及重构kbdclassServiceCallBack
发表于: 2025-4-29 18:27 4121

[原创]键盘模拟原理及重构kbdclassServiceCallBack

2025-4-29 18:27
4121

由于鄙人是个网络自闭患者,对于被动的知识接受信任度几乎为0,故研究设备堆栈,从键盘类到具体的小端口设备,结合gpt解惑及毛教授的《Windows内核编程》一书,将键盘输入的整个逻辑进行归纳:小端口设备注册中断例程,键盘按键触发中断,回调小端口设备的中断例程,小端口设备将实际工作函数插入dpc队列,dpc队列进行数据收集,然后通过小端口设备扩展中记录的上层键盘类提供的ClassServer进行数据上报,上层类设备收到下层的数据后从类设备的设备扩展中取出windows子系统发送过来的READ IRP,然后将数据写入IRP->AssociatedIrp.SystemBuffer,最后完成IRP。windows子系统从pending状态切换至completed状态,从而完成一次完整的键盘输入。在这个过程中可以看出最关键的就是数据上报,也就是ClassService函数,在Recatos中,这个函数就叫什么ClassService(我也忘了 大差不差),如果能直接调用ClassService函数岂不是就相当于我按了一次键盘么?思路打开说干就干。


在windows中,它可能不叫这个名字。随便找个win10的kbdclass.sys,打开IDA,搜索ClassService,发现一个好像相关的函数:KeyboardClassServiceCallback

用ida看看吧~

初看函数有四个参数,和Recatos中的ClassService一样欸,难道?为了验证猜想,将相关参数按照对应结构体转换了下,好像是那么回事,逻辑有点像

为了验证将ida反编译代码和之前泄露的nt5src中关于kbdclass模块的源码进行比对,相似度高达90%!!!那还逆个p啊,直接上才艺。

对这个函数的定义如下:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
最新回复 (6)
雪    币: 534
活跃值: (960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
直接调硬件模拟的键鼠不香嘛
2025-4-29 19:10
0
雪    币: 227
活跃值: (681)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
mb_hzfcelhs 直接调硬件模拟的键鼠不香嘛
你是说调用别人实现的硬件模拟么? 哈哈 想着可能没免费的 用着也不顺手 就直接自己实现了
2025-4-29 20:56
0
雪    币: 5205
活跃值: (5430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
fdgs 你是说调用别人实现的硬件模拟么? 哈哈 想着可能没免费的 用着也不顺手 就直接自己实现了[em_014]
他说的是kmbox这些吧
2025-5-2 07:07
0
雪    币: 227
活跃值: (681)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
木志本柯 他说的是kmbox这些吧
soga
2025-5-6 11:05
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
求代码啊大神
2025-5-6 11:27
0
雪    币: 227
活跃值: (681)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
学习的态度 求代码啊大神
没必要吧...  kbdclass的设备扩展定义wdk和泄露的那个源码里都有定义  有些函数通过名字应该也能猜出来是咋写的哇
2025-5-9 14:06
0
游客
登录 | 注册 方可回帖
返回