zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    hlgoj 1766 Cubing
    Reverse Linked List
    String to Integer
    Bitwise AND of Numbers Range
    Best Time to Buy and Sell Stock III
    First Missing Positive
    Permutation Sequence
    Next Permutation
    Gray Code
    Number of Islands
  • 原文地址:https://www.cnblogs.com/linxw-blog/p/10529505.html
Copyright © 2011-2022 走看看