USB调试笔记
+ -

使用BUSHOUND手动分析USB批量传输的URB

2021-10-31 1033 6

使用BUSHOUND抓取U盘的批量传输的URB数据,我们对其其进行数据分析:

13  IN     55 53 42 53  40 0b ac 57  00 00 00 00  00   
URB
80 00 09 00  00 00 00 00  d8 f2 75 a0  77 7f 00 00  00 00 00 00  00 00 00 00  20 a3 9c 5f  88 80 ff ff
03 00 00 00  0d 00 00 00  18 9a ef 5c  88 80 ff ff  f0 f6 4e 06  88 80 ff ff  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 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

在Windows内核中,对批量传输中断传输,使用的是同一个结构体。

typedef _Struct_size_bytes_(UrbHeader.Length) struct _URB {
    union {
            struct _URB_BULK_OR_INTERRUPT_TRANSFER
            UrbBulkOrInterruptTransfer;
    }
}

所以URB_BULK_OR_INTERRUPT_TRANSFER的结构体定义,并对结构体各成员的偏移地址进行分析如下:

struct _URB_BULK_OR_INTERRUPT_TRANSFER {
    struct _URB_HEADER Hdr;          //0
    USBD_PIPE_HANDLE PipeHandle;    //24
    ULONG TransferFlags;            //32
    ULONG TransferBufferLength;        //36
    PVOID TransferBuffer;            //40
    PMDL TransferBufferMDL;            //48
    struct _URB *UrbLink; // Reserved    //56
    struct _URB_HCD_AREA hca; // Reserved //64
};

对批量的数据进分析如下:

Hdr
Length  80 00 
Function  09 00   //URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER
Status  00 00 00 00  
UsbdDeviceHandle d8 f2 75 a0  77 7f 00 00  
UsbdFlags 00 00 00 00  
结构体对齐补 00 00 00 00  

PipeHandle   20 a3 9c 5f  88 80 ff ff
TransferFlags 03 00 00 00  
TransferBufferLength 0d 00 00 00  
TransferBuffer 18 9a ef 5c  88 80 ff ff  
TransferBufferMDL f0 f6 4e 06  88 80 ff ff  
UrbLink 00 00 00 00  00 00 00 00
hca
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 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

这里的数据结构TransferBufferLength成员为13字节,和IN的数据长度一致。
而对于中断传输,由于其结构体一致,而只是数据不一样。所以我们可以自己抓取一个鼠标或者键盘的数据对照URB_BULK_OR_INTERRUPT_TRANSFER结构体的偏移进行分析。

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......
USB 中断传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输中断传输一般用于小批量的和非连续的数据传输,通俗的来说就是用于数据量小的数据不连续的但实时性高的场合的一种传输方式,主要应用于人机交互设备(HID)中的USB鼠标和USB键盘等。USB中断传输和我们传统意义上的中断不一样。......
UVC摄像头批量传输的StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输和同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
USB超高速 中断传输
中断传输类型用来支持带有轮询服务间隔需要高可靠性传输小数量数据的设备。这个规格的协议层章详细描述了与中断传输相关的包,总线事务和事务处理流程。超速中断传输类型一般提供以下方面:能保证最大的服务间隔能保证在下一次服务间隔中尝试重新传输在每个服务周期中为中断端点尝试中断传输,保留一定带宽保证在每个服务间......
BusHound的使用方法详解
在开始菜单日运行Bus Hound软件,将USB设备插入电脑U口。如图所示,进入”Devices”目录,在”Devices”内选择要监听的设备。例如:我的设备置是一个U盘,则装置为USB大容量储存设备,点选”USB大容量储存设备”图示,可以在下面的”Properties”图框内看到设备的设备树及设备......
HID键盘设备数据抓包分析实践
本文使用 Bus Hound 工具对 USB HID 设备数据包进行分析,并结合官方手册及网上文章进行整理。在进行数据分析前,我们先回顾一下USB相关的基础知识。USB描述符USB 主机是通过各种描述符来识别设备的,有设备描述符,接口描述符,端点描述符,字符描述符,报告描述符(HID)等。和普通的......
UVC批量传输中的dwMaxVideoFrameSize和dwMaxPayloadTransferSize关系
上一节看了UVC等时/同步传输的关系,这里我们介绍一相批量传输批量传输在这里相对于同步传输要简单的多。uvc_video_start_transfer中的代码如下: else { /* Bulk endpoint, proceed to URB initialization. */ ......
关于UVC摄像头指示灯的调试过程总结
最近遇到了一个很是奇怪的UVC摄像头指示灯问题,现象如下:上层应用是一个会议系统软件,当需要进行会议时,点击会议按钮添加会议。这时应用软件打开摄像头,并开始与服务器进行网络连接。当然由于摄像头的打开,摄像头指示灯点亮。上层应用软件与服务器连接后,进行会议界面。这时突然摄像头指示灯熄灭,但会议正常,摄......
BusHound简介及安装
BusHound简介BusHound软件是由美国perisoft公司研制的一种专用于PC机各种总线数据包监视和控制的开发工具软件,其名“hound”的中文意思为“猎犬”,即指其能敏锐地感知到总线的丝毫变化。Bus Hound是一个超级软件总线协议分析器,用于捕捉来自设备的协议包和输入输出操作,其优......
USB超高速批量传输
批量传输类型是用来支持想要跟相当大的海量数据通信设备,传输能使用任何可用的超速带宽。超速批量传输功能端点提供以下:对基于有限带宽的超速总线访问保证数据的发送,但是不保证带宽和发送时间超速维持下面的批量传输管道特征:对批量传输管道通信流没有强制固定的数据结构批量传输管道是一个流式管道,因此总是有通信流......
BusHound设备窗口
使用BusHound进行数据抓包,抓包的目标为设备。BusHound提供了一个类似设备管理器的窗口,以树形的方式显示。设备树主要包括SCSI设备树和Usb设备树。设备IDBusHound为每个显示在设备窗口中的设备树分配一个ID,这个ID在设备窗口树列表中,设备名前中括号中的数字为设备ID.点击设备......
USB 批量/块传输方式
USB协议规定了四种传输类型:控制传输、批量传输、同步传输、中断传输批量传输一般用于批量的和非实时的数据传输,通俗的来说就是用于数据量大但对时间要求又不高的场合的一种传输方式,类似用于USB打印机和USB扫描仪等等。批量传输使用批量传输事务,一次批量传输事务分为三个阶段:令牌包阶段、数据包......
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......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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