驱动开发
费玉清
编程无难事,只要有心人
展开
-
第四章 键盘的过滤(1)
4.1.1预备知识 并不是所有设备都可以通过绑定设备的方法进行过滤,其中硬盘就是一个例子,即使使用了IoAttachDevice,结果还是截获不到任何IRP. 符号链接是对象的一个别名. PDO是物理设备的简称,是设备栈最下面的那个设备对象. nt!ObpCreateHandel.这是WinDbg中使用的表示方法,!号前的内容表示模块名,翻译 2014-11-25 15:21:10 · 1294 阅读 · 0 评论 -
寒江独钓-第二章 驱动基础知识
2.1.2共享的内核空间 进程的空间被分成两部分:一部分供进程独立使用,称为用户空间;另一部分容纳操作系统的内核,称为内核空间. 在32位系统上,低2GB是用户空间,高2GB是内核空间. x86架构下r0层的代码才能访问内核空间,普通应用程序都运行在r3层,要访问r0层的功能一般通过操作系统提供的一个入口(在该入口调用sysenter指令)翻译 2014-11-23 11:12:28 · 890 阅读 · 0 评论 -
寒江独钓 第四章 按键信息 扫描码和Ascii码
4.4.1从缓冲区中获得KEYBOARD_INPUT_DATA 请求完成之后,读到的信息在Irp->AssociatedIrp.SystemBuffer中,这个缓冲区可能含有n个KEYBOARD_INPUT_DATA结构 这个结构定义如下typedef struct _KEYBOARD_INPUT_DATA{ //对设备\Device\Keyboa翻译 2014-11-26 15:32:55 · 1098 阅读 · 0 评论 -
寒江独钓 第二章(3)Hook分发函数和回调函数
前面两节讲的是通过在设备栈上绑定一个新的设备实现键盘过滤.这是非常正统的方法,是合法软件行为.一般黑客软件不会采用这么正道的方法. 黑客可以通过修改一个已经存在的驱动对象(比如前面提到的KbdClass)分发函数的指针来实现过滤所有请求的目的.4.5.1获得类驱动对象 首先要获得键盘类驱动对象,才能替换下面的分发函数.这个驱动的名字是"\\Driver\\K转载 2014-11-28 15:01:39 · 1613 阅读 · 0 评论 -
第四章 Hook键盘中断和IOAPIC重定位
如果不想让键盘过滤驱动程序或回调函数首先获得按键,则必须比端口驱动更加底层一些.端口驱动再往下,USB和PS/2就不同了. 早期版本QQ的反盗号驱动的原理是这样的:在用户要输入密码时(比如把输入焦点移动到密码框里),就注册一个中断服务来接管键盘中断,比如0x93中断,之后按键就不关键盘驱动的事了.为此这个程序必须处理那些扫描码,并得出用户输入了什么密码,然后交给QQ.翻译 2014-11-29 15:33:24 · 1064 阅读 · 0 评论 -
寒江独钓 第三章 串口的过滤
3.1.1设备绑定API 根据设备的名字进行绑定: NTSTATUS IoAttachDevice{ IN PDEVICE_OBJECT SourceDevice, //用来过滤的虚拟设备 IN PUNICODE_STRING TargetDevice,//要被绑定的设备的名字 OUT PDEVICE_OBJECT *AttachedDevice //返回绑定翻译 2014-11-24 14:37:17 · 603 阅读 · 0 评论 -
第四章5 直接用端口操作键盘
4.8.1读取键盘数据和命令端口 PS/2键盘的数据端口是0x60,直接读取这个端口就能取到数据.但是前提是,键盘必须处于可读状态. 在驱动中没有对端口的读取进行限制,直接汇编指令就可以读取.请注意每次只能读取1字节.//定义1字节P2C_U8 sch;__asm in all,0x60__asm mov sch,al 上面的代码把端口翻译 2014-12-02 15:51:04 · 5423 阅读 · 0 评论