如何正确地使用BUSHOUND和总线分析进行USB数据抓包及抓包原理分析
2022-06-07
2662
0
bushound是我们经常需到的USB抓包工具,不过大家由于对BUSHOUND抓包的原理不清楚,故在实际中会出现一系列的问题,其中一个重要的就是抓到的数据与实际发送的数据不致,如长度和数据不一致。
其实我们先大概介绍一下BUSHOUND的原理,busHound抓包的原理其实就是USB,HID设备的过滤驱动,并且是上层类过滤驱动。这我们在BUSHOUND的INF文件中就可以看到。
[Registry]
HKLM, System\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}, UpperFilters, 0x00010008, bhound7 ; usb
HKLM, System\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}, UpperFilters, 0x00010008, bhound7 ; ide
HKLM, System\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}, UpperFilters, 0x00010008, bhound7 ; keyboard
HKLM, System\CurrentControlSet\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}, UpperFilters, 0x00010008, bhound7 ; mouse
HKLM, System\CurrentControlSet\Control\Class\{4D36E978-E325-11CE-BFC1-08002BE10318}, UpperFilters, 0x00010008, bhound7 ; ports
HKLM, System\CurrentControlSet\Control\Class\{4D36E97B-E325-11CE-BFC1-08002BE10318}, UpperFilters, 0x00010008, bhound7 ; scsi
HKLM, System\CurrentControlSet\Control\Class\{6BDD1FC1-810F-11D0-BEC7-08002BE2092F}, UpperFilters, 0x00010008, bhound7 ; firewire
可以看到,是对这个设备类驱动的过滤,所以也就是设备的IRP(URB)完成时的状态。
从上图可以看到,USB总线分析仪抓到的是USB总线上的活动,所以会有事务,令牌,包等概念,详见USB2.0令牌、事务及传输抓包分析 http://www.usbzh.com/article/forum-44.html
而BUSHOUND由于是系统软件过滤驱动级别的,而事务令牌这些都已经由USB HUB处理打包完成实际的通讯数据,故就没有事务,令牌,包等概念了,而是一次USB的传输。这个传输使用的就是IRP-URB的结构。URB的正确完成代表了数据的正确传输,但失败并不代表总线上有活动,比如pip句柄无效,会直接在驱动软件层返回。
另外,在BUSHOUND抓如鼠标数据,我们需要看到的是端点的数据,而并非鼠标的数据。因为这两个数据并不相等,因为鼠标数据是通过端点返回来的数据进行转换了的结果。
如上图所示,我们应该看的是14设备的数据,而并非是20的数据,因为14的数据是USB设备发过来的经过组包后的数据,在地址端也可以看到其端点地址为1,而24是经过驱动处理后的数据MOUSE_INPUT_DATA,与原始数据就没有关系了。
同时,也可以看到数据长度是不样的。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936