介绍

Wireshark是世界上最流行的网络协议分析软件,并且是一个免费的、开源的工具。相信做过网络开发的一定用过这个工具进行过抓包分析。

借助USBPcap还可以进行USB的抓包和分析,USBPcap参考:https://desowin.org/usbpcap/

USBPcap从I/O请求包(IRP)中携带的USB请求块(URBs)中捕获数据。Wireshark将报文以帧的形式呈现。USBPcap的数据包与USB规范的数据包不完全相同,Wireshark的帧与USB帧也不同。

由于USBPcap捕获的是功能设备对象(FDO)和物理设备对象(PDO)之间传递的URBs,如下图

pYYBAGRREfKAG4D4ACX2w5P37-k481.png

以下信息USBPcap可以抓取:

- 控制传输:

SETUP阶段只能抓取DATA,不能抓取SETUP和ACK

DATA阶段:USBPcap包包含来自事务的DATA包的组合数据。

STATUS阶段:与STATUS阶段相关的USBPcap包不包含任何数据。

- 同步传输:

单个IRP通常携带多个等时数据包。每个同步数据包都包含来自data数据包的数据。对于每个IRP都有两个USBPcap包。第一个包含IRP从FDO到PDO时捕获的数据,第二个包含从FDO到PDO的数据。在OUT传输的情况下,第一个USBPcap包包含完整的数据,第二个包包含有关事务完成状态的信息。在In传输的情况下,第一个USBPcap包仅包含有关用于接收数据的分配缓冲区的信息,第二个包包含接收到的数据。

- 中断传输:只能抓取DATA包,不能抓取IN,OUT和ACK。

- 批量传输:每次批量传输都会产生一个USBPcap数据包,包含来自属于给定传输的所有事务的所有数据包的组合数据。

- 大容量存储设备:每次与USB大容量存储设备的数据交换都会产生三个USBPcap数据包,其中第一个包含命令,第二个包含数据,最后一个包含状态。

以下一些信息不能通过USBPcap抓取:

- 总线状态 (Suspended, Power ON, Power OFF, Reset, High Speed Detection Handshake)

- 包ID (PID)

- 拆分事务 (CSPLIT, SSPLIT)

- 总线状态的持续时间和用于在线路上传输数据包的时间

- 传输速度 (Low Speed, Full Speed, High Speed)

另外也不能够抓取完整的USB枚举过程,只能看到USB控制传输发送到设备后,设备已分配其地址。

官网

https://www.wireshark.org/

安装

从官网下载最新版

poYBAGRREfuARP_0ACmpKz86LpA789.png

我这里下载的是Wireshark-win64-4.0.5.exe,直接双击打开,安装

pYYBAGRREgGAcN8HAC2eVZBtihA248.png

poYBAGRREgeAQFe8AC2eVQ_YQjg991.png

poYBAGRREg2AMoyRAC2eVdZEWLI689.png

我们可以把所有选项都勾选

pYYBAGRREhGAMwQkAC2eVaYtR9U158.png

勾选安装桌面图标和快速启动图标

pYYBAGRREheAEVvUAC2eVQExeig054.png

指定安装路径

poYBAGRREhuABjCHAC2eVZzMw34042.png

pYYBAGRREiCAdvtlAC2eVb2irRQ466.png

注意这里勾选安装USBPcap

poYBAGRREiSAFhQcAC2eVXWKieE485.png

poYBAGRREiiASEjAAC_7z5vIEnQ444.png

pYYBAGRREiyADMglAC_7zw0vcB0304.png

pYYBAGRREjKATedkAC_7z796DcA809.png

poYBAGRREjWAERWEAC_7z-LOKSg183.png

安装USBPcap

pYYBAGRREjqAF0KTAB5trHv1xyA877.png

poYBAGRREj2AE1scAB5trGuETK8621.png

poYBAGRREkGABBKyAB5trA-V0X0183.png

pYYBAGRREkWAXmHwAB5trENu3Jo081.png

pYYBAGRREkmAUw9TAB5trIUP0aI428.png

poYBAGRREk2AGUkgAC2eVdUrXNg070.png

注意保存数据重启

pYYBAGRRElOAJB30AC2eVdyTAzw634.png

使用

打开wireshark程序

一个USB根集线器会对应一个USBPcap设备,如果没有可能是安装完后没有重启或者没有安装USBPcap。

poYBAGRREliAGLMdACVVFZFSwx0112.png

可以进去安装路径D:Program FilesWiresharkextcap下命令行输入.USBPcapCMD.exe查看每个根集线器挂载的设备

pYYBAGRRElyAcaGmADdfPL7ybwU672.png

设备过滤

我这里接入了一个UVC设备,可以看到对应的是USBPcap2的端口2

poYBAGRREmGAAZVyACg1msoxmxM979.png

我们双击USBPcap2可以看到抓到了数据

其中2.6.3正好对应的是我们这个设备其中2对应PORT2 6对应USB设备地址为6,3对应端点3

poYBAGRREmaAN76WACkNVPubGiU668.png

我们也可以使用usb.addr==2.6.3进行过滤

点击包可以显示解析的信息和原始数据如下

pYYBAGRREmuAd6DgACyi9TDYyEM734.png

文档

USBPcap没有完整的文档,只能去官网看一些相关的信息https://desowin.org/usbpcap/tour.html。Wireshark有完善的文档可以参考https://www.wireshark.org/docs/

https://www.wireshark.org/docs/wsdg_html_chunked/ChapterDissection.html

总结

Wireshark使用USBPcap抓包相对于Bus Hound的优点是有更详细的协议解析,缺点是不能进行数据发送调试。

Wireshark虽然以以太网抓包闻名于江湖,尤其是其包分析能力,借助USBPcap其也在USB抓包领域也占有一席之地。好比“以气为体、以剑为用”,以气御剑,气就是Wireshark强大的包解析能力,USBPcap就是剑,以USBPcap为剑即能抓取解析USBPcap,以NPcap,WinPcap为剑即能抓取分析以太网包。

---------------------------------------------

与拦截网络报文过程类似,用户也可以通过设置过滤器的方式拦截指定USB设备的报文。常见的过滤条件包括:

usb.device_address == X

usb.addr == X.X.X

usb.src==X.X.X

usb.dst == X.X.X

获取addr的过程可以参考:

 https://superuser.com/questions/1505021/determine-current-usb-address-of-device-in-windowsy

也可以使用UsbTreeView(Uwe Sieber's Homepage)获取“Device Address”

上述设备的过滤器应该设置为:usb.device_address == 10

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐