快速入门
DriverBuddy 安装说明
- 将 DriverBuddy 文件夹和 DriverBuddy.py 文件复制到 IDA 插件文件夹中,例如 C:\Program Files (x86)\IDA 6.8\plugins 或你安装 IDA 的位置
DriverBuddy 使用说明
- 启动 IDA 并打开一个 Windows 内核驱动程序
- 转到 Edit->Plugins 并选择 Driver Buddy,或按 ctrl-alt-d
- 在 Output 窗口中查看 DriverBuddy 分析结果
- 要解码 IOCTL,请高亮可疑的 IOCTL 并按 ctrl-alt-i
DriverBuddy
DriverBuddy 是一个 IDAPython 插件,可帮助自动化 Windows 内核驱动程序逆向工程中的一些繁琐工作。它有许多方便的功能,例如:
- 识别驱动程序类型
- 定位 DispatchDeviceControl 和 DispatchInternalDeviceControl 函数
- 填充 WDF 和 WDM 驱动程序的常见结构体
- 尝试识别并标记 IRP 和 IO_STACK_LOCATION 等结构体
- 标记通常未被标记的 WDF 函数调用
- 查找已知的 IOCTL 代码并对其进行解码
- 标记容易被误用的函数
查找 DispatchDeviceControl
能够自动定位和识别 DispatchDeviceControl 函数是驱动程序逆向工程中一项节省时间的任务。此函数用于将所有传入的 DeviceIoControl 代码路由到与该代码关联的特定驱动程序函数。自动识别此函数可以更快地找到每个驱动程序的合法 DeviceIoControl 代码。此外,在因崩溃而调查驱动程序中的潜在漏洞时,了解此函数的位置有助于将焦点缩小到与崩溃的 DeviceIoControl 代码相关联的特定函数调用。
标记 WDM 结构体
所有 WDM 驱动程序共享若干驱动程序结构体。能够自动识别这些结构体(例如 IO_STACK_LOCATION、IRP 和 DeviceObject 结构体)有助于在逆向工程过程中节省时间。DriverBuddy 尝试定位并识别其中许多结构体。
标记 WDF 函数
与 WDM 驱动程序一样,所有 WDF 驱动程序共享若干函数和结构体。自动识别这些函数和结构体将在逆向工程过程中节省时间,并为驱动程序中使用这些函数的未识别区域提供上下文。
解码 DeviceIoControl 代码
在逆向驱动程序时,在分析过程中遇到 IOCTL 代码是很常见的。这些代码经解码后会向逆向工程师揭示有用信息,并可能将焦点引向驱动程序中更可能存在漏洞的特定部分。
未来的事情:
- 添加某种 obref 和 deref 检查,以帮助发现引用计数问题
- 完善输出,GUI?
- 加强/完善当前功能
- 提高 DispatchDeviceControl 查找器的可靠性
- 为标记内容编写简短说明
- MSDN 文档导入器
延伸目标:
- 自动查找 IOCTL
- IRP 污点分析,即跟踪 sysbuf/inbuf、size 的别名
- 识别其他常见结构体
- 未初始化变量等
致谢
许可证
本软件以 MIT 许可证发布,请参阅 LICENSE。