【USB协议分析-基于U盘】

使用wireshark抓包

环境要求

安装wireshark,并且安装usbpcap插件,安装wireshark的过程中会有提示,直接安装即可

抓包过程

不多说直接上图,勾选USBPcap1,点击开始即可
在这里插入图片描述
进入抓包界面,因为我使用的台式机,已经插入了USB键盘和鼠标,所以上来就有大量数据涌现。
所以我加了过滤条件用来过滤只属于U盘通信的数据包,过滤方法是,打开抓包之后,先看看目前鼠标和键盘的地址,只要移动鼠标或者击键就能看到数据包,插入U盘后,会出现新的数据包,这时记下U盘的地址便可以过滤了.

注意: USB设备接入之后,USB数据线电平会发生变化,usb主机会根据电平状态判断是否有设备接入以及设备的类型,主要是区分全速还是低速设备,并且通过地址0获取设备描述符,根据描述符得到设备最大控制传输的字节长度,一般主机会对设备进行复位,复位完成后给设备分配地址,并用新地址获取设备描述符.由于我这里无法用wireshark抓取到枚举过程的数据包,我们的usb数据包分析只能从分配完地址之后开始。

下面是过滤好的结果,如下所示:
在这里插入图片描述
我的U盘地址是4,这里wireshark source给出的地址是 1.4.0,这里面1是总线号,4是usb设备地址,0是端点号。

关于设备地址: usb最多挂载127个设备,就有127个地址
关于设备端点: 我的简单理解就是一个端点代表usb设备的一个基本功能,是与主机通信的基本单位,每个sub设备都必须有一个端点0,用于基本控制功能实现,所以也称为控制端点,其数据传输也可以是双向的,其他端点均为单向,所以我们分析的U盘设备,至少具备三个端点。

包解析

URB包解析

通过wireshark抓取的第一个U盘设备的包,如下所示
在这里插入图片描述
蓝色背景选中的内容,就是USB URB包了,那么什么是URB包,它有什么用呢?URB包全名USB REQUEST BLOCK,顾名思义可得这个是usb请求数据块,这是一个可变长度的数据块,用于描述一个请求的详细信息以及已完成请求的状态信息。这个数据包不是分析的重点,每个数据包的内容根据请求类型不同有些许差异,但是根据抓包软件的标注也都好理解。

下面开始具体字段解析:
在这里插入图片描述

  • 长度:前两个字节描述了URB请求的长度,这里为0X001C,表示URB请求块长度为28字节
  • IRP ID :主机host生成的一个可以称作帧ID的一段数据,数据长度为8个字节,这个数据usb设备收到之后需要记下来,响应请求块的时候还需要一模一样的返回给主机,确保数据不出现异常
  • USBD_STATUS:描述请求块请求状态信息,0为成功,其他值可以参考usb.h中的定义
  • URB Function:请求类型
  • Irp information:一个字节,最低位表示方向,PDO一般是总线上的设备,FDO是主机功能驱动,0表示 主机到设备,1表示设备到主机
  • BUSID: 总线ID,这里是1,两个字节
  • 设备地址:两个字节
  • ENDPOINT:第8位表示数据方向1 表示IN 0表示OUT,IN为主机接收数据;低四位表示断点号,这里为0,表示控制端点
  • Transfer Type:传输类型;
    USB共有四种传输类型 :中断传输 控制传输 大容量数据传输bulk 同步传输
  • Packet Data Length: 共四个字节,表示本次传输的数据长度。
  • control transfer stage:控制传输的阶段,这里是第一个控制传输的setup包,处于第一阶段;控制传输的事务包含setup stage,data stage,status stage

SETUP包结构解析

控制传输的setup包都是有8个字节的数据组成的,具体8个字节代表的含义,我们结合抓包的数据进行详细分析

大小1byte1byte2byte2byte2byte
字段bRequestTypebRequestwValuewIndexwLength
含义请求特性请求类型设置值(参数)一般表示端点或接口号数据阶段的数据长度

对应的C语言结构体定义如下:

typedef struct _USB_SETUP_PACKET
{
 	REQUEST_TYPE bmRequestType;
 	BYTE         bRequest;
 	WORD_BYTE    wValue;
 	WORD_BYTE    wIndex;
 	WORD         wLength;
} USB_SETUP_PACKET;
  • bmRequestType解析
    • D7数据传输的方向
      • 0:Host-to-device
      • 1:Device-to-host
    • D6D5:type

–未完 待续–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风里雨里守护着你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值