2013年2月18日

键盘过滤之内核级Hook(一)

摘要: Hook分发函数前一篇文章讲述了进行键盘过滤,截取用户输入的方法。本篇文章开始更加深入地讨论键盘的过滤与反过滤对抗。无论是过滤还是饭过滤,原理都是过滤,取胜的关键在于谁第一个得到信息。一种方发是Hook分发函数,即将键盘驱动的分发函数替换成自己的函数用来达到过滤的目的。1.获得类驱动对象首先要获得键盘类驱动对象,才能去替换下面的分发函数。这个操作较为简单,因为这个驱动的名字是“\\Device\\Kbdclass”,所以可以直接用函数ObReferenceObjectByName来获取。代码如下:view plaincopy to clipboardprint?//驱动的名字 #define 阅读全文

posted @ 2013-02-18 11:05 紫 陌 阅读(3459) 评论(0) 推荐(2) 编辑

键盘过滤之内核级Hook(二)

摘要: 键盘过滤之内核级Hook(二)如果不想让键盘过滤驱动程序或回调函数首先获得按键,则必须比端口驱动更加底层一些。早期版本的QQ反盗号驱动的原理是这样的:用户要输入密码时(比如把输入焦点移动到了密码框里),就注册一个中断服务来接管键盘中断,比如0x93中断,之后按键就不关键驱动的事了。首先就来介绍一下Hook键盘中断。1.中断:IRQ和INT学过计算机体系结构的人都知道硬件往往是通过中断来通知CPU某个事件的发生。比如按键按下了。但是中断并不一定要有任何硬件的通知,一条指令就能使CPU“发生中断”。比如,在一个.c文件写上:_asm int 3这样的代码常常来人工设置一个断点,执行到这里程序会中断 阅读全文

posted @ 2013-02-18 11:00 紫 陌 阅读(1291) 评论(0) 推荐(0) 编辑

Ramdisk源代码详解

摘要: 这篇文章来介绍一下WDK中提供的一个案例源码--Ramdisk虚拟磁盘。这个例子实现了一个非分页内存做的磁盘储存空间,并将其以一个独立磁盘的形式暴露给用户,用户可以将它格式化成一个Windows能够使用卷,并且像操作一般的磁盘卷一样对它进行操作。由于使用了内存作为虚拟的存储介质,使这个磁盘具有一个显著的特点,性能的提高。这个例子所使用的微软WDF驱动框架。入口函数1.入口函数的定义任何一个驱动程序,不论它是一个标准的WDM驱动程序,还是使用WDF驱动程序框架,都会有一个叫做DriverEntry的入口函数,就好像普通控制台程序中的main函数一样。这个函数是这样声明的:NTSTATUSDriv 阅读全文

posted @ 2013-02-18 10:55 紫 陌 阅读(3856) 评论(0) 推荐(0) 编辑

实现一个具有还原功能的磁盘卷过滤驱动

摘要: 磁盘过滤驱动的概念1.设备过滤和类过滤在之前的文章里,我们已经介绍过滤的概念,所谓过滤技术就是在本来已有的设备栈中加入自己的一个设备。由于Windows向任何一个设备发送IRP请求都会首先发送给这个设备所在设备栈的最上层设备,然后再依次传递下去,这就使得加入的设备在目标设备之前获取Irp请求称为可能,这时候就可以加入自己的处理流程。在这里把插入设备栈的用户设备叫做过滤设备,建立这个设备并使其具有特殊功能的驱动叫做过滤驱动。在前面已经展示了如何去建立一个过滤设备并将其绑定在一个有名字的设备上,这叫做设备过滤,这是对某个特定设备加以过滤的方法。但是在实际应用中,这种方法还存在一些问题,例如,Win 阅读全文

posted @ 2013-02-18 10:53 紫 陌 阅读(3351) 评论(0) 推荐(0) 编辑

导航