USB调试笔记
+ -

使用BUSHOUND手动分析USB控制传输的URB

2021-10-31 1290 0

USB的控制传输是最基本的传输类型,控制传输适用于设备的枚举和设备的状态控制。
我里我们使用BUSHOUND来抓取USB控制传输的URB。同样的,我们使用的操作系统是Windows10 x64,和同步传输的URB抓包一样,我们先抓取数据,然后再分析数据结构。
这里我插入电脑的U盘的枚举以获取设备描述符为例进行分析:
获取的数据如下:

Length    Phase  Data                                                                   Description
------ -----  ------------------------------------------------------------------------------------------------
          CTL    80 06 00 01  00 00 12 00                                             GET DESCRIPTOR
      18  IN     12 01 00 02  00 00 00 40  51 09 65 16  00 02 01 02  03 01 
      URB    CONTROL TRANSFER
88 00 08 00  00 00 00 00  d8 f2 75 a0  77 7f 00 00  00 00 00 07  88 80 ff ff  e0 60 e2 59  88 80 ff ff  
0b 00 00 00  12 00 00 00  30 cc 4b 5f  88 80 ff ff  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00                  
03 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00                  
00 00 00 00  00 00 00 00  24 00 00 00  00 00 00 00  18 00 00 00  01 00 00 00  11 4a 00 eb  1a 9b d4 11                  
80 06 00 01  00 00 12 00

同样的,我们通过分析URB结构体,发现其结应的结构体是:

struct _URB_CONTROL_DESCRIPTOR_REQUEST
            UrbControlDescriptorRequest;

对该结构体进行分析:

struct _URB_CONTROL_DESCRIPTOR_REQUEST {
    struct _URB_HEADER Hdr;
    PVOID Reserved;
    ULONG Reserved0;
    ULONG TransferBufferLength;
    PVOID TransferBuffer;
    PMDL TransferBufferMDL;
    struct _URB *UrbLink; // Reserved
    struct _URB_HCD_AREA hca; // Reserved
    USHORT Reserved1;
    UCHAR Index;
    UCHAR DescriptorType;
    USHORT LanguageId;
    USHORT Reserved2;
};

同步传输类似,对该结构体各成员字段偏移进行分析:

struct _URB_CONTROL_DESCRIPTOR_REQUEST {
    struct _URB_HEADER Hdr;  //0
    PVOID Reserved;            //24
    ULONG Reserved0;        //32
    ULONG TransferBufferLength;//36
    PVOID TransferBuffer;        //40
    PMDL TransferBufferMDL;        //48
    struct _URB *UrbLink; // Reserved  56
    struct _URB_HCD_AREA hca; // Reserved 64
    USHORT Reserved1;            //128
    UCHAR Index;                //130
    UCHAR DescriptorType;        //131
    USHORT LanguageId;            //132
    USHORT Reserved2;            //134
};

分析后的结果如下:

 Hdr 88 00 08 00  00 00 00 00  d8 f2 75 a0  77 7f 00 00  00 00 00 07  88 80 ff ff 
      Length  88 00 
     Function 08 00  //URB_FUNCTION_CONTROL_TRANSFER
     Status 00 00 00 00  
     UsbdDeviceHandle d8 f2 75 a0  77 7f 00 00  
     UsbdFlags 00 00 00 07  
     结构体对齐补充88 80 ff ff 
 Reserved  e0 60 e2 59  88 80 ff ff                 
 Reserved0 0b 00 00 00  
 TransferBufferLength 12 00 00 00  
 TransferBuffer 30 cc 4b 5f  88 80 ff ff  
 TransferBufferMDL 00 00 00 00  00 00 00 00  
 UrbLink 00 00 00 00  00 00 00 00
 hca 
     03 00 00 00  00 00 00 00  
     00 00 00 00  00 00 00 00  
     00 00 00 00  00 00 00 00  
     00 00 00 00  00 00 00 00
     00 00 00 00  00 00 00 00  
     24 00 00 00  00 00 00 00 
     18 00 00 00  01 00 00 00  
     11 4a 00 eb  1a 9b d4 11
Reserved1 80 06 
Index 00 
DescriptorType 01  
LanguageId 00 00 
Reserved2 12 00
HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

UVC 等时传输中的URB_ISOCH_TRANSFER
通过UVC规范可知,视频图像数据的读取可使用两种端点传输方式,分别为:BULK 块/批量传输方式ISO 等时/同步传输方式在Windows内核中,USB数据的读取是通过URB来进行传输的,其结构体是一个大大的共用体,根据数据传输的方式对应其不同的结构体,其内容如下:typedef _Struct_s......
BusHound的使用方法详解
在开始菜单日运行Bus Hound软件,将USB设备插入电脑U口。如图所示,进入”Devices”目录,在”Devices”内选择要监听的设备。例如:我的设备置是一个U盘,则装置为USB大容量储存设备,点选”USB大容量储存设备”图示,可以在下面的”Properties”图框内看到设备的设备树及设备......
USB 控制传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输。控制传输是一种特殊的传输方式。当USB设备初次连接主机时,用控制传输传送控制命令等对设备进行配置。同时设备接入主机时,需要通过控制传输去获取USB设备的描述符以及对设备进行识别,在设备的枚举过程中都是使用控制传输进行数据交换......
HID键盘设备数据抓包分析实践
本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理。在进行数据分析前,我们先回顾一下USB相关的基础知识。USB描述符USB 主机是通过各种描述符来识别设备的,有设备描述符,接口描述符,端点描述符,字符描述符,报告描述符(HID)等。和普通的......
USB超高速 控制传输
控制传输的目的与特点与USB2.0协议完全相同。这个规格的协议层章节详细描述了用于完成控制传输的包,总线事务处理和事务处理流程。设备架构那章定义了完整系列的设备使用的标准命令编码。每个设备需要启动默认控制管道作为一个消息管道。这个管道用来进行设备初始化和管理,用来访问设备描述符和向设备请求对其进行操......
关于UVC摄像头指示灯的调试过程总结
最近遇到了一个很是奇怪的UVC摄像头指示灯问题,现象如下:上层应用是一个会议系统软件,当需要进行会议时,点击会议按钮添加会议。这时应用软件打开摄像头,并开始与服务器进行网络连接。当然由于摄像头的打开,摄像头指示灯点亮。上层应用软件与服务器连接后,进行会议界面。这时突然摄像头指示灯熄灭,但会议正常,摄......
BusHound简介及安装
BusHound简介BusHound软件是由美国perisoft公司研制的一种专用于PC机各种总线数据包监视和控制的开发工具软件,其名“hound”的中文意思为“猎犬”,即指其能敏锐地感知到总线的丝毫变化。Bus Hound是一个超级软件总线协议分析器,用于捕捉来自设备的协议包和输入输出操作,其优......
BusHound设备窗口
使用BusHound进行数据抓包,抓包的目标为设备。BusHound提供了一个类似设备管理器的窗口,以树形的方式显示。设备树主要包括SCSI设备树和Usb设备树。设备IDBusHound为每个显示在设备窗口中的设备树分配一个ID,这个ID在设备窗口树列表中,设备名前中括号中的数字为设备ID.点击设备......
UVC 控制传输与请求处理
请求是主机软件与实体中控制器交流的一种机制。请求都是由主机向设备端发起的功能请求,所有的USB设备都需要支持标准的设备请求和与Class相关的特殊类请求。标准请求: 在标准协议中有相关描述,不做详细展开特殊类请求: 事实上特殊类请求也可以根据接口来分成两大类:视频控制请求.视频流请求。1)视......
UVC 描述符实例
通过BUSBOUND抓取USB摄像头插入电脑时的数据信息,这里只是选报设备描述符和接口描述符信息Device Phase Data Description Cmd.Phase.Ofs(rep)------ ----- ----------......
Windows下USB驱动同步URB转IRP请求函数代码
URB和IRP类似,只不过一个应用于通用的Windows驱动,一个专职于USB。USB的URB的负载是IRP,其通过负载到IRP时,然后使用通用的Windows IRP请求发向下层目标USB设备。USB与IRP的关联是通过IRP的IO_STACK_LOCATION的 IoStack->Para......
Windows下USB驱动异步URB转IRP请求函数代码
URB有同步请求,也有异步请求。这里微软官方提供了一个异步请求URB的代码示例// The SubmitUrbASync routine submits an URB asynchronously.//// Parameters://// Parameters:// Devic......
Windows下USB驱动同步URB转IRP请求函数代码-改进版
URB的同步调用一般使用:Windows下USB驱动同步URB转IRP请求函数代码 http://www.usbzh.com/article/detail-547.html但是,在某些特定的情况下,有时会因为下底设备并没有完成而挂死。这里提供一种超时取消IRP的方法,同时考虑到了线和切换的情况。这里......
BUSHOUND抓包stall pid的USTS c0000004错误
对USB设备进行数据分析,使用最多的也就是BUSHOUND了,不过经常遇到一个问题就是 USTS c0000004 stall pid 错误。USTS c0000004 stall pid在本站中搜......
Windows下虚拟USB设备数据的读写请求调试笔记
到现在为止,本人已经在Windows下确切来说是Windows10 x64下开发了以下USB虚拟USB设备:USB虚拟UVC摄像头设备USB虚拟UAC麦克风设备USB虚拟HID键盘设备USB虚拟HID鼠标设备USB虚拟HID键盘鼠标复合设备USB虚拟HID单点触摸屏设备USB虚拟HID多点触摸屏......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!