Bus Hound抓包分析,基於HID設備(原創)

Bus Hound數據分析:spa

 

CTL:表示8字節的USB控制傳輸的Setup包----------------------------重點分析.net

控制傳輸setup(token包)和對應數據包(DATA0)來告訴設備目的和要求,結束以數據流的反方向通知DATA1包.3d

setup包有5個參數,分別是bmRequestType,bRequest,blog

wValue:此字段的內容因請求而異。它用於向設備傳遞特定於請求的參數。索引

wIndex:Windex字段常常用於指定端點或接口的請求。token

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

 

 

    

 

 

 

如下是對設備在Bus Hound捕獲到的數據進行分析:事務

bmRequestType  ——  80:數據方向從USB到PC;標準的請求;USB設備接收ip

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內的設置

傳輸事務過程以下:

一、Setup事務,傳輸Setup數據格式包,告訴設備接下要獲取USB描述符,但不知道描述符的類型,並指明瞭接下來的數據傳輸方向和傳輸的數據大小

二、IN傳輸事務,表示設備傳輸數據到PC,傳輸中指明瞭此次傳輸的數據大小,類型是設備描述符以及其餘相關的設備信息

三、Setup事務,改變了讀取描述符的偏移地址和傳輸數據的大小

四、IN傳輸事務,但描述符類型是配置描述符,指明瞭接口數量、供電模式、最大電流等參數

五、Setup事務,再次獲取配置描述符,僅僅改變了獲取的傳輸數據的大小爲41個字節,即下一次準備接收41個字節

六、IN事務,返回配置描述符時連並接口、端點描述符都一塊兒返回,向PC指明瞭這是個HID接口以及其使用的端點數

七、Setup事務,設置配置

八、Setup事務,設置接口閒置狀態

九、Setup事務,獲取描述符

十、IN事務,設備發送HID報告描述符給PC
---------------------

參考博文連接:https://blog.csdn.net/yhl_sophia/article/details/81875382 

相關文章
相關標籤/搜索