首页
社区
课程
招聘
[原创]逆向BackInC驱动,实现虚拟键鼠模拟
发表于: 2011-3-6 16:09 20136

[原创]逆向BackInC驱动,实现虚拟键鼠模拟

2011-3-6 16:09
20136

*******************************************************
*标题:【原创】逆向BackInC驱动,实现虚拟键鼠模拟 *
*作者:踏雪流云                                                     *
*日期:2011年3月6号                                            *
*声明:本文章的目的仅为技术交流讨论                       *
*******************************************************
由于最近在做应用层程序开发,已经好几个月没搞逆向了,感觉有些生疏了,这样不好,于是便有了这篇文章;花了一周时间来分析,希望能给我等菜鸟一点帮助。
第一次逆向驱动,有什么不对的地方还望指正。
BackInC是一个想搞游戏外挂的朋友发给我的,BackInC.sys驱动实现了驱动级的键鼠模拟,NT式的,可动态卸载。为什么我会对这个技术这么感兴趣呢?这可以追溯到本人在上大学三年级时,做的一个叫做“手控鼠标”的项目。原理很简单:首先,摄像头采集到用户做出的不同手势动作;然后,进行手势识别(图像处理+BP神经网络);最后,将其转换为控制系统的不同动作,以达到操控windows的目的。因此,需要实现驱动级键鼠模拟(由于需要使用3D游戏来演示效果,因此应用层API就不太靠谱),当时的做法是将DDK Sample下的kbfiltr和moufiltr直接改造来实现的,但是这个是wdm的,感觉很不爽……
本文只是分享和探讨技术,希望BackInC作者见谅!
闲话说了不少,下面言归正传。
以键盘为例:KbdClass.sys是键盘的类驱动,无论是USB键盘,还是PS/2键盘都要经过它的处理;在键盘类驱动之下,和实际硬件打交道的驱动叫做“端口驱动”,比如:i8042prt.sys是ps/2键盘的端口驱动,Kbdhid.sys是USB键盘的端口驱动。
端口驱动与类驱动之间的协助机制:
键盘中断导致键盘中断服务例程被执行,导致最终i8042prt的I8042KeyboardInterruptService被执行。
在I8042KeyboardInterruptService中,从端口读取扫描码,放到一个KEYBOARD_INPUT_DATA结构中。并把这个结构放到i8042prt的输入队列中。最后会调用内核api函数KeInsertQueueDpc。
在这个调用中会调用上层KbdClass.sys中处理输入的回调函数KeyboardClassServiceCallback,取走i8042prt的输入数据队列里的数据。
因此,主动调用KeyboardClassServiceCallback就可以实现虚拟键盘模拟;Hook KeyboardClassServiceCallback当然就可以实现键盘记录了(kbdclass驱动是在I8042prt和kbdhid这两个驱动之上的,因此键盘记录能对PS/2和USB键盘同时生效)。
本文的重点来了,如何定位KeyboardClassServiceCallback的地址和kbdclass的DeviceObject指针呢?
代码如下:


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 306
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享,我大三也想做一个用摄像头识别手势的东西 ,用的是opencv.能分享下代码吗
2011-3-6 17:08
0
雪    币: 387
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
纯粹来顶的, 大学都搞过着玩意, 真是不一样呀, 我大一的时候刚知道电脑是啥,大四的时候vc都不会用
茶具呀
2011-3-6 17:21
0
雪    币: 440
活跃值: (119)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
采集部分用的是采集卡,调用的是采集卡的接口,所以给了你也运行不了~~~
2011-3-6 17:22
0
雪    币: 440
活跃值: (119)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
呵呵,现在不忙了?来搞UI设计器呀!
2011-3-6 17:23
0
雪    币: 419
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
很好,很强大
2012-1-29 20:54
0
雪    币: 337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
照抄寒江独钓P78,就不要说是自己逆向得到的,看着源代码,叫逆向吗?????
2012-7-22 18:49
0
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
代码一样吗?
还有就是 人家能拿出驱动样本 ,
可能思路相同 而已
别太认真了
2012-7-22 23:47
0
雪    币: 440
活跃值: (119)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
据说,很多内容与《寒江独钓——Windows内核安全编程》一些内容很相似,虽然没看过《寒江独钓——Windows内核安全编程》,但参考的链接可能参考了《寒江独钓——Windows内核安全编程》,故感谢《寒江独钓——Windows内核安全编程》!
2012-8-7 17:36
0
游客
登录 | 注册 方可回帖
返回
//