首页
社区
课程
招聘
[原创] 键盘过滤之i8042prt!I8042KeyboardInterruptService深层hoook
发表于: 2023-5-9 20:45 7214

[原创] 键盘过滤之i8042prt!I8042KeyboardInterruptService深层hoook

2023-5-9 20:45
7214


当我在参考《寒江独钓 Windows内核安全编程》的键盘过滤部分时,涉及到Hook i8042prt!I8042KeyboardInterruptService 底层函数。


在查找该函数的地址时 ,书中推荐的方法是同时遍历 driver_object->device_object->DeviceExtension(此结构未公开)中的地址,只要该地址合法且存在于 Kbdclass 模块中即可。


本机环境为win10,可能存在差异?

经过测试发现,i8042prt!I8042KeyboardInterruptService 函数位于 i8042prt 模块中(通过加载调试符号号表得到的),且在 driver_object->device_object->DeviceExtension 中无法获取。。。

遂采用特征码搜索,搜先获取 i8042prt 模块的基址,然后搜索特征码得到。


(二)i8042prt!I8042KeyboardInterruptService 函数的深层 hook


通过分析该函数,发现其内部调用了 I8xQueueCurrentKeyboardInput 函数,跟进其内部发现又调用了 I8xWriteDataToKeyboardQueue。

I8xWriteDataToKeyboardQueue,顾名思义,即将 KEYBOARD_INPUT_DATA 结构写入队列中,其参数 rcx 应指向队列,rdx 指向 KEYBOARD_INPUT_DATA  结构。因此,只要修改 KEYBOARD_INPUT_DATA 结构中的参数即可实现深层hook。


其中,rdx 如下:


kd> eq ffffce0e`a8ab8768 00000000`00200000    # down
kd> eq ffffce0e`a8ab8768 00000001`00210000    # up

效果图如下:


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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2948
活跃值: (30846)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-5-10 09:12
1
游客
登录 | 注册 方可回帖
返回
//