## 10.1 驱动通信
几乎每个在 Windows 上注册了的驱动程序都有一个设备名和一个符号链接。用户模式 的程序能够通过符号链接获得驱动的句柄,然后使用这个句柄和驱动进行联系。具体函数如 下:
```
HANDLE WINAPI CreateFileW(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttribute
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
```
第一个参数,填写文件名或者设备名,这里填写目标驱动的符号连接。 dwDesiredAccess 表示访问方式,读或者写(可以既读又写,也可以不读不写),GENERIC_READ (0x80000000) 读,GENERIC_WRITE (0x40000000)写。dwShareMode 这里设置成 0,表示在 CreateFileW 返回并且安全关闭了句柄之后,才能访问设备。 lpSecurityAttributes 设置成 NULL,表示使 用 默 认 的 安 全 描 述 符 , 并 且 不 能 被 子 进 程 继 承 。 dwCreationDisposition 参 数 设 置 成 OPEN_EXISTING (0x3),表示如果设备存在就打开,其余情况返回错误。最后两个参数简 单的设置成 NULL。
当 CreateFileW 成功返回一个有效的句柄之后,我们就能使用 DeviceIoControl(由 kernel32.dll 导出)传递一个 IOCTL 给设备。
```
BOOL WINAPI DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped
);
```
第 一个 参数 由 CreateFileW 返 回的 句柄 。 dwIoControlCode 是 要传 递给 设备 启动 的 IOCTL 代码。这个代码决定了调用驱动中的什么功能。参数 lpInBuffer 指向一个缓冲区,包 含了将要传递给驱动的数据。这个缓冲区是我们后面要重点操作的地方,fuzz 数据将存在这。 nInBufferSize 为传递给驱动的缓冲区的大小。 lpOutBuffer 和 lpOutBufferSize,和前两个参 数一样,不过是用于接收驱动返回的数据。lpBytesReturned 为驱动实际返回的数据的长度。 最后一个参数简单的设置成 NULL。
现在对于驱动的交互,大家应该不陌生了,接下来就祭出我们的 Immunity,用它 Hook 住 DeviceIoControl 然后变形输入缓冲区内的数据,最后 fuzzing every driver。
- 序
- 1 搭建开发环境
- 1.1 操作系统准备
- 1.2 获取和安装 Python2.5
- 1.3 配置 Eclipse 和 PyDev
- 2 调试器设计
- 2.1 通用 CPU 寄存器
- 2.2 栈
- 2.3 调试事件
- 2.4 断点
- 3 自己动手写一个 windows 调试器
- 3.2 获得 CPU 寄存器状态
- 3.3 实现调试事件处理
- 3.4 全能的断点
- 4 PyDBG---纯 PYTHON 调试器
- 4.1 扩展断点处理
- 4.2 处理访问违例
- 4.3 进程快照
- 5 IMMUNITY----最好的调试器
- 5.1 安装 Immunity 调试器
- 5.2 Immunity Debugger 101
- 5.3 Exploit 开发
- 5.4 搞定反调试机制
- 6 HOOKING
- 6.1 用 PyDbg 实现 Soft Hooking
- 6.2 Hard Hooking
- 7 Dll 和代码注入
- 7.1 创建远线程
- 7.2 邪恶的代码
- 8 FUZZING
- 8.1 Bug 的分类
- 8.2 File Fuzzer
- 8.3 改进你的 Fuzzer
- 9 SULLEY
- 9.1 安装 Sulley
- 9.2 Sulley primitives
- 9.3 猎杀 WarFTPD
- 10 Fuzzing Windows 驱动
- 10.1 驱动通信
- 10.2 用 Immunity fuzzing 驱动
- 10.4 构建 Driver Fuzzer
- 11 IDAPYTHON --- IDA 脚本
- 11.1 安装 IDAPython
- 11.2 IDAPython 函数
- 11.3 脚本例子
- 12 PyEmu
- 12.1 安装 PyEmu
- 12.2 PyEmu 一览
- 12.3 IDAPyEmu