USBHound驱动开发笔记
+ -

USBHound开发简介-跟我一起写USB抓包工具

2022-07-22 51 0

USBHound就是USB抓包工具,起的名字来源于BUSHOUND,不过人家实现的是USB、HID、SCSI,1394等总线的抓包工具,而对于我们仅用于实现USB设备(后期可能会增加HID类)。

以前我们讨论过BUSHOUND抓包工具的原理:http://www.usbzh.com/article/detail-1049.html 所以这里我们也使用此相同的原理来实现,即设备类过滤驱动的方式实现数据的抓包。

Windows总线过滤驱动分为上层过滤驱动和下层过滤驱动。

  • 上层过滤驱动可通过完成函数获取IRP完成时的数据信息,当然了,我们也可以获取请示下发时的默认参数信息。这其实可以作为一个亮点来做,对比一个URB中下发时和完成时的参数信息。
  • 下层过滤驱动一般用的很少,其可以理解为总线驱动程序的上层过滤驱动。

过滤驱动设备对象栈

USBHound安装

编译后的驱动文件为:

2022/07/22  11:25               784 USBHound.cer
2022/07/24  05:08             2,508 USBHound.inf
2022/07/22  11:25            47,408 USBHound.sys

当时是开发过程中的版本,故只需要右键INF文件安装即可。
安装后会在注册表中写入如下值:
USBHound注册表

其中INF文件中的注册表内容如下:

[ClassFilter_AddReg]
HKLM, System\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}, UpperFilters, 0x00010008, USBHound ; usb

驱动安装后,这里重启了一下机器后,打开任意一个USB设备,通过设备管理器可以看该设备的驱动程序:
设备管理器

并且我们通过我的内核打印日志显示出了系统中所有USB设备类的相关信息:
其中一项的内容如下:

DevicePropertyDeviceDescription:USB Composite Device
DevicePropertyHardwareID:USB\VID_1A2C&PID_2124&REV_0110
DevicePropertyManufacturer:(Standard USB Host Controller)

而我们的代码如下:

    KdPrint(("-------------------------\n"));
    status = IoGetDeviceProperty(PhysicalDeviceObject, DevicePropertyDeviceDescription, sizeof(PropertyBuffer), PropertyBuffer, &ResultLength);
    if (status == STATUS_SUCCESS)
    {
        KdPrint(("DevicePropertyDeviceDescription:%S\n", PropertyBuffer));
    }

    status = IoGetDeviceProperty(PhysicalDeviceObject, DevicePropertyFriendlyName, sizeof(PropertyBuffer), PropertyBuffer, &ResultLength);
    if (status == STATUS_SUCCESS)
    {
        KdPrint(("DevicePropertyFriendlyName:%S\n", PropertyBuffer));
    }

    status = IoGetDeviceProperty(PhysicalDeviceObject, DevicePropertyHardwareID, sizeof(PropertyBuffer), PropertyBuffer, &ResultLength);
    if (status == STATUS_SUCCESS)
    {
        KdPrint(("DevicePropertyHardwareID:%S\n", PropertyBuffer));
    }

    status = IoGetDeviceProperty(PhysicalDeviceObject, DevicePropertyManufacturer, sizeof(PropertyBuffer), PropertyBuffer, &ResultLength);
    if (status == STATUS_SUCCESS)
    {
        KdPrint(("DevicePropertyManufacturer:%S\n", PropertyBuffer));
    }

这里在调试的时候发现了一个知识点:

  • AddDevice会对所有设备来回调,不过我们可以只对感兴趣的设备来创建我们的过滤驱动设备,然后再堆栈。而对于我们不感兴趣的,就直接返回STATUS_SUCCESS就可以了。
  • 如果所有设备都不创建设备栈,那系统会有大量的DRIVER_ENTRY和DriverUnload函数。这样会对所有设备安装该类驱动,但是都没有生成栈,故会卸载掉该驱动。

参考资料

0 篇笔记 写笔记

USB设备抓包工具BusHound的Windows驱动抓包
BusHound可以抓包的设备类型有硬盘、1394火线和USB设备数据,并且抓到的数据并非是各总线上的,而是经过各总线传递到Windows内核的内核数据。BusHound采用的是Windows过滤驱动的方式进行抓包的,并且可以区分各总线上相关的数据协议,如USB的输入输出事务,同步传输,CTRL请求......
USB Packet Viewer 简介
USB Packet Viewer是一款便携式USB协议分析仪,能够捕捉USB通讯的底层数据包以及总线事件。它由USB 数据包抓包设备和配套的协议解析软件组成,能够对 USB 通讯数据进行可视化分析。更多的详细介绍可见:http://www.usbzh.com/article/detail-74......
USB Packet Viewer 连接方式及驱动安装
典型的设备连接方式监听 PC 上运行 USB Packet Viewer 协议解析软件,通过 Type-C 数据线与抓包设备相连,同时也向抓包设备提供电源。待测试的 USB 主设备通过 Type-C 数据线与抓包设备的 Host 接口相连待测试的 USB 从设备通过 USB-A 数据线与抓包设备......
USB抓包工具Bus Hound,USBlyzer 和USBTrace
Bus Hound官方下载地址:http://perisoft.net/bushound/USBlyzer官网下载地址:http://www.usblyzer.com/download.htmUSBlyzer在Windows10下兼容有点问题USBTrace官网下载地址:http://www.......
以华为耳机UAC音频设备44100采样率2通道每通道2字节的数据传输实例分析
呃,,,群里有人说,怎么还是华为,,,确实是华为耳机,因为手中经常使用的就是这个手机自带的TYPE-C华为耳机,所以也就是顺手的事。不要在乎是什么设备,其实我觉地华为耳机挺好的,手机当然也一样,同时也能帮我们抓包分析学习一些UAC的协议,多么让人感谢啊。言归正转,华为耳机以前的文章我们知道,其支持多......
USBHound开发简介-跟我一起写USB抓包工具
USBHound就是USB抓包工具,起的名字来源于BUSHOUND,不过人家实现的是USB、HID、SCSI,1394等总线的抓包工具,而对于我们仅用于实现USB设备(后期可能会增加HID类)。以前我们讨论过BUSHOUND抓包工具的原理:http://www.usbzh.com/article/......
USBHound开发调试笔记-数据的过滤打印
上周说要搞一个和BUSHOUND一样的USB数据抓包工具USBHOUND,专门来抓USB的数据。说干就干,就开始写代码,一个简易的工程就如下:通过注册表,将该驱动通过注册表安装到系统中。最开始的时候,是和BUSHOUND一样,弄成了上层过滤驱动:HKLM, SystemCurrentContr......
自研BUSHOUND工具USBHound开发调试笔记-USB控制传输的数据抓包实现
本想着搞一个自研的BUSHOUND应该是一件比较简单的事,但没想到也麻烦了。搞了一天upperfilter,最终还是投降,换成了lowerfilter.前面搞的时候,对系统中所有USB设备进行过滤,导致系统中的数据打印太多,无法分清谁是谁。当然也可以分清,每个设备的地址不一样,并且设备栈也是明确的,......
作者信息
USB中文网
B站搜索 站长漫谈 看视频。
pnpon内核开网,USB中文网,
busrom硬核技术网站长
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!