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
Bus Hound抓包分析,基于HID设备(原创)的更多相关文章
- 实战录 | 基于openflow协议的抓包分析
<实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...
- Wireshark抓包分析TCP 3次握手、4次挥手过程
Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...
- LVS 负载均衡器理论基础及抓包分析
LVS 是 Linux Virtual Server 的简写,即 Linux 虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.(百 ...
- 抓包分析SSL/TLS连接建立过程【总结】
1.前言 最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下.开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来 ...
- Wireshark抓包分析HTTPS与HTTP报文的差异
一.什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换 ...
- Wireshark和TcpDump抓包分析心得
Wireshark和 TcpDump抓包分析心得 1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Window ...
- python编写网络抓包分析脚本
python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...
- ipv6地址抓包分析
拓扑图: 因为多路由,所以采用ospf配置将路由实现互通,从而进行抓包 ospf配置以R1为例 查看R4路由表 做完进行ping通测试 R4pingR3 R4pingR5 进行抓包分析 128报文 1 ...
- nmap参数原理抓包分析
nmap参数原理抓包分析 实验环境: Nmap7.70 实验步骤: 1.主机发现 2.端口扫描 3.服务版本探测 一.主机发现 主机发现,如果主机活跃,扫描1000个常用的tcp端口 1.Nmap i ...
随机推荐
- 为什么毕业一年了工资还是只有7K
“天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能.”. 从实习的时候开始说起吧,实习的时候是在上海的一家做winform的公司,这家公司总是会 ...
- Window下,利用Anaconda2创建jupyter-notebook的python3环境方法
随着深度学习的火热,越来越多的人去学习和了解这门技术.而做算法的同学为了能够更快,更高效的写出相关的深度学习算法出来,需要比较方便的开发环境.今天主要介绍一下在jupyter notebook中,新增 ...
- Shell 字符串处理
字符串处理方式 计算字符串长度 获取子串在字符串中的索引位置 计算子串长度 抽取(截取)字串 1.计算字符串长度,有两种方式 $ ${#string} $ expr length "$str ...
- php的array数组 -------方法foreach循环时候,利用数组里值的引用地址(& )从而改变数组里的值
/* * 把每个数组值后面都加个SQL然后返回数组 * foreach循环时候,直接用引用(&)的方式就能改变之前的数组 */public function array_foreach(){ ...
- JAVA8之数据流Stream
在JAVA8之前的传统编程方式,如果我们需要操作一个集合数据,需要使用集合提供的API,通过一个循环去获取集合的元素,这种访问数据的方式会使代码显得臃肿,JAVA8新引入的Stream类,用于重新封装 ...
- fdisk语法
Linux下的fdisk功能是极其强大的,用它可以划分出最复杂的分区,下面简要介绍一下它的用法: 对于IDE硬盘,每块盘有一个设备名:对应于主板的四个IDE接口,设备名依次为:/dev/hda,/de ...
- wpf binging Class 双向绑定 需要实现的接口
public class HuMan : INotifyPropertyChanged { private string name; private string age; private strin ...
- 安装mysql以及遇到的问题解决
首先把我使用的8.0.15版本的MySQL发上来,有需要的可以下载. 链接:https://dev.mysql.com/downloads/mysql/ 安装MySQL: 第一步:将压缩包解压后,手动 ...
- python初识模块
sys import sys print(sys.argv) #输出 $ python test.py helo world ['test.py', 'helo', 'world'] # ...
- 2018-2019-2 网络对抗技术 20165228 Exp3 免杀原理与实践
2018-2019-2 网络对抗技术 20165228 Exp3 免杀原理与实践 免杀 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. 要做好免杀,就时清楚杀毒软件( ...