• Bus Hound抓包分析,基于HID设备(原创)


    Bus Hound数据分析:

    CTL:表示8字节的USB控制传输的Setup包----------------------------重点分析

    控制传输setup(token包)和对应数据包(DATA0)来告诉设备目的和要求,结束以数据流的反方向通知DATA1包.

    setup包有5个参数,分别是bmRequestType,bRequest,

    wValue:此字段的内容因请求而异。它用于向设备传递特定于请求的参数。

    wIndex:Windex字段经常用于指定端点或接口的请求。

    wLength:(bm指Bitmap;b指byte;w指word,即double byte.).

     

        

    以下是对设备在Bus Hound捕获到的数据进行分析:

    bmRequestType  ——  80:数据方向从USB到PC;标准的请求;USB设备接收

    bRequest  ——  06:表示接下来发送的数据时GET_DESCRIPTOR(主控器读取USB描述符)

    wValue  ——  00 01:从偏移地址0开始读取设备描述符

    wIndex  ——  00 00:一般用于说明端点号或者接口标识

    wLength  ——  12 00:下一阶段发送数据的长度为18个字节(小端格式理解)

    First  【IN】:数据传输(USB设备到PC)

    bLength  ——  12:数据字节长度为18

    bDescriptorType  ——  01:设备描述符

    bcdUSB  ——  00 02:USB设备2.0协议
    bDeviceClass  ——  ef:USB_DEVICE_CLASS_MISCELLANEOUS(杂项)

    bDeviceSubClass  ——  02

    bDeviceProtocol  ——  01

    bMaxPacketSize0  ——  40:最大包长64个字节

    idVendor  ——  1Fc9

    idProduct  ——  100B

    bcdDevice  ——  0100

    iManufacturer  ——  01

    iProduct ——  02

    iSerialNumber  ——  03

    bNumConfigurations  ——  01

    Second 【IN】

    bLength —— 09:该描述符结构体的大小为9个字节

    bDescriptorType ——02:配置描述符

    wTotalLength  ——29 00:配置返回的所有数据大小为41个字节(其实是指明下一次传输的数据字节大小)

    bNumInterfaces  ——01:此配置的接口数量

    bConfigurationValue  ——01:此配置所需要的参数值

    iConfiguration  ——00:描述该配置的字符串的索引值

    bmAttributes  ——C0:供电模式的选择USB_CONFIG_SELF_POWERED(自供电)

    bMaxPower  ——32:设备从总线提取的最大的电流100mA

    Third 【IN】(前面数据和第二个IN一样,从32后开始分析)

    bLength  ——  09:接口描述符结构体大小

    bDescriptorType  —— 04:USB_INTERFACE_DESCRIPTOR_TYPE

    bInterfaceNumber  ——  01:该接口的编号

    bAlternateSetting   ——   00:备用的接口描述符编号

    bNumEndpoints  —— 02:该接口使用的端点数,不包括端点0

    bInterfaceClass  ——  03:接口类型为USB_DEVICE_CLASS_HUMAN_INTERFACE(HID)

    bInterfaceSubClass  ——  00:接口子类型

    bInterfaceProtocol  ——  00:接口遵循的协议

    iInterface  ——  04:描述该接口的字符串索引值

    HID Class Descriptor

    bLength  ——09:该HID描述符的大小

    bDescriptorType —— 21:HID_HID_DESCRIPTOR_TYPE

    bcdHID  —— 00 01:HID类协议版本号,为1.1

    bCountryCode  —— 00:固件的国家地区代码

    bNumDescriptors  —— 01:下级描述符的个数

    bDescriptorType  —— 22:下级描述符为HID_REPORT_DESCRIPTOR_TYPE(报告描述符)

    wDescriptorLength  —— 2C 00:下级描述符的长度 

    Endpoint HID Interrupt In

    bLength  ——  07

    bDescriptorType  ——  05:端点描述符

    bEndpointAddress  ——  84:HID_EP_IN Address

    bmAttributes  ——  03:USB_ENDPOINT_TYPE_INTERRUPT

    wMaxPacketSize  ——  04

    bInterval  ——  00 20:间隔为16ms

    Endpoint HID Interrupt Out

    bLength  ——  07

    bDescriptorType  ——  05:端点描述符

    bEndpointAddress  ——  04:HID_EP_OUT Address

    bmAttributes  ——  03:USB_ENDPOINT_TYPE_INTERRUPT

    wMaxPacketSize  ——  04

    bInterval  ——  00 20:间隔为16ms

    CTL:表示8字节的USB控制传输的Setup包

    bmRequestType  —— 00:数据方向从PC到USB;标准的请求;USB设备接收

    bRequest  ——  09:表示接下来的请求是SET_CONFIGURATION (设置配置)

    wValue  ——  00 01:从偏移地址0开始读取设备描述符

    wIndex  ——  00 00:一般用于说明端点号或者接口标识

    wLength  ——  00 00

    CTL:表示8字节的USB控制传输的Setup包

    bmRequestType  —— 21:数据方向从PC到USB;Class类的请求;接口接收

    bRequest  ——  0a:表示接下来的请求是GET_INTERFACE (获取接口)

    wValue  ——  00 00:从偏移地址0开始读取设备描述符

    wIndex  ——  01 00:接口标识为01

    wLength  ——  00 00

    CTL:表示8字节的USB控制传输的Setup包

    bmRequestType  —— 81:数据方向从USB到PC;标准请求;接口接收

    bRequest  ——  06:表示接下来的请求是获取描述符

    wValue  ——  00 22:从偏移地址00 22开始读取描述符

    wIndex  ——  01 00:接口标识为01

    wLength  ——  6C 00:数据长度为108个字节

    Fourth 【IN】——HID Report Descriptor

    具体参考usbdesc.c内的设置

    传输事务过程如下:

    1、Setup事务,传输Setup数据格式包,告诉设备接下要获取USB描述符,但不知道描述符的类型,并指明了接下来的数据传输方向和传输的数据大小

    2、IN传输事务,表示设备传输数据到PC,传输中指明了这次传输的数据大小,类型是设备描述符以及其他相关的设备信息

    3、Setup事务,改变了读取描述符的偏移地址和传输数据的大小

    4、IN传输事务,但描述符类型是配置描述符,指明了接口数量、供电模式、最大电流等参数

    5、Setup事务,再次获取配置描述符,仅仅改变了获取的传输数据的大小为41个字节,即下一次准备接收41个字节

    6、IN事务,返回配置描述符时连并接口、端点描述符都一起返回,向PC指明了这是个HID接口以及其使用的端点数

    7、Setup事务,设置配置

    8、Setup事务,设置接口闲置状态

    9、Setup事务,获取描述符

    10、IN事务,设备发送HID报告描述符给PC
    ---------------------

    参考博文链接:https://blog.csdn.net/yhl_sophia/article/details/81875382 

  • 相关阅读:
    华为牛人在华为工作十年的感悟!(有点长)(转载)
    C# 10进制与16进制相互转换
    Linux必学的60个命令
    项目管理
    网络数据加密需要解决三个问题:
    DES加密/解密的应用
    一个比较牛的加密算法
    开发完成后总结心得(团队会议稿) (转载)
    相当于序列化与反序列化,但是不用借助外部文件
    软件开发设计常识
  • 原文地址:https://www.cnblogs.com/linxw-blog/p/10529505.html
Copyright © 2020-2023  润新知