USB Mass Storage抓包学习(Bus Hound)

原贴见语雀-小森豆丁
Bus Hound抓包学习(抓取相机数据学习UVC协议)

参考文档和资料
1. Bus Hound的使用方法

在Bus Hound的界面选择easy camera时要把路径的上一级也要选择在内,才能在Settings中显示UVC协议的驱动程序,此时打开相机就可以在Capture界面实现抓包处理。
image.png
image.png
image.png
2. USB插拔数据

左侧Device后的.0,.1等代表Endpoint的组数,只有Endpoint0具有CTL功能并且支持数据传输(支持两个方向的信息传输),其他组的Endpoint只有数据传输功能(IN:提供数据,发送给主机 OUT:存储从主机接收到的数据)。
0. 控制传输相关资料

设置阶段由一个设置事务构成,将整个传输确定为控制传输,发送请求及设备完成请求所需要的其他信息。
Bus Hound中高字节在左,低字节在右,比特位高位在左低位在右。
控制传输数据为:
bmRequestType    bRequest    wValue    wlndex    wLength    Data
2(字节)    1    2    2    1    1
1. 一些基础的标准请求:

image.png
image.png
2. bmRequestType

image.png
1. Get descriptor(获取描述符)

第一个配置包数据为:
image.png
主控器不知道USB设备的描述符长度,插拔U盘之后Bus Hound出现第一行数据为抓包到的Get Descriptor,此时为主机发送Get descriptor请求,请求获取设备描述符。构成如下:
bmRequestType    bRequest    wValue    wlndex    wLength    Data
10000000B(0x80)    Get Descriptor(0x06)    0x0100    0x0000    0x40(64个字节)    0x00
1. bmRequestType 的类型:

此时数据为10000000B:接收端为设备(Device),类型为标准(Standard),方向为设备到主机。
image.png
2. bRequest类型

Get descriptor为0x06
3. wValue高字节为描述符类型,低字节为描述符索引(用于在设备具有多个重复描述符类型时选择)

描述符类型为Device(0x01),索引为0x00
image.png
image.png
image.png
4. wlndex

对于字符串描述符,该字段为语言ID(Language ID)。对于其他描述符,该字段为0x0000
5. wLength

让设备返回的字节数,设备返回的字节数小于此设定值,设定为64个字节。
6. Data

数据包请求的描述符。
2. 返回设备描述符

第二行数据类型为IN,数据从设备发往主机,此时数据为设备描数字,共有18个字节,数据为:
image.png image.png

    0x12和0x01字节为单位的描述字的常Device
    0x0200代表USB2.0(USB3.0 为0x0300)
    0x000000不使用联合描述字的类和功能
    0x40为最大信息包尺寸

image.png
image.png
3. 再次Get decriptor获取配置描述字

image.png
此时设置wValue为高字节为02h,wLength字段为总长度wTotallength(15+15*16)个字节,来去的配置描述字和附属描述字。
4. 设备向主机发送配置描述字

链接USB开发者大全(P67-70)
image.png
字节数据为:
09 02 20 00 01 01 00 80 32 09 04 00 00 02 08 06 50 00 07 05 02 02 00 02 00 07 05 82 02 00 02 00
数据为前八个代表配置描述字,剩下的为附属描述字。**sTotalLength为0020h为32个字节。 **
image.png
5. 主机Get Descriptor,请求描述符类型为String(字符串)

字符串描述字为制造商、设备名字等文字信息,主机利用Get Descriptor来请求读取字符串描述字。
image.png
6. 返回字符串描述字

image.png
7. 8.Get Descripor再次获取字符串描述字

image.png
9. Endpoint0(端点0)进行class命令,

image.png
image.png
10. Set Configuration请求选择配置

主机获取了配置字之后(wValue的高字节为02h),利用Set Configuration请求进行配置的选择。
image.png
set configuration的结构

image.png
image.png
1. bmRequestType

此时数据为10000000B:接收端为设备(Device),类型为标准(Standard),方向为设备到主机。
image.png
3. wValue低字节为所需配置,高字节为0x00:配置为0x01
4. wIndex、wLengeh和Data均为0
11. Test Unit Ready测试存储设备是否准备好

非EndPoint数据交互,属于SCSI指令,
image.png
12. Set Interface设置接口请求

image.png
有三.2.0的数据表格可知:Set Interface的目标为接口所以bmRequestType值为00000001b,bRequest类型为0bh,剩下的均为0
image.png
13. Test Unit Ready测试存储设备是否准备好
14. Get Max Lun

Mass Storage类规范定义了两个请求:Get Max LUN和Mass Storage Reset,所有的Mass Storage类设备都必须支持这两个请求。处理Get Max Lun时返回逻辑单元个数(0-15),驱动仅支持一个存储设备,返回0即可。
image.png
15. 利用端点2发送数据

枚举成功,控制传输完成,转入数据传输。
image.png
四、SCSI协议

操作系统对外部设备(如磁盘、磁带、光盘、打印机等)的I/O操作均可以通过SCSI协议来实现,SCSI协议嵌入在设备驱动器或者主机适配器的板载逻辑中。
————————————————
版权声明:本文为CSDN博主「小森豆丁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37769256/article/details/115672688

posted @ 2023-02-13 22:50  jiftle  阅读(983)  评论(0编辑  收藏  举报