-
-
[原创]键盘模拟原理及重构kbdclassServiceCallBack
-
发表于:
2025-4-29 18:27
4121
-
[原创]键盘模拟原理及重构kbdclassServiceCallBack
由于鄙人是个网络自闭患者,对于被动的知识接受信任度几乎为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直播授课