-
-
[原创] 键盘过滤之i8042prt!I8042KeyboardInterruptService深层hoook
-
发表于:
2023-5-9 20:45
7213
-
[原创] 键盘过滤之i8042prt!I8042KeyboardInterruptService深层hoook
当我在参考《寒江独钓 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
效果图如下:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!