HidReportParserV2.0正式发布
2025-10-23
本文链接为:http://www.usbzh.com/article/detail-1594.html ,欢迎转载,转载请附上本文链接。
前面提到过USB中文网开发了一系列相关的USB调试及数据分析工具,其中也包括早期的HidReportParser。
HidReportParser的主要功能是通过十六进制解析出报告描述符的信息,有类像反汇编工具,将十六进制数据信息翻译成汇编指令。例如我们通过BUSHOUND等工具抓包到有一段HID设备报告描述符,其内容如下:
05 01 09 02 A1 01 09 01 A1
00 95 03 75 01 05 09 19 01
29 03 15 00 25 01 81 02 95
01 75 05 81 03 95 03 75 08
05 01 09 30 09 31 09 38 15
81 25 7F 81 06 C0
通过HidReportParser就可以解析了如下的内容:
HID报告描述符分析工具
USB中文网 http://www.usbzh.com
-----报告描述符--------------
05 01 //0 GLOBAL_USAGE_PAGE(Generic Desktop Controls)
09 02 //2 LOCAL_USAGE(Mouse)
A1 01 //4 MAIN_COLLECTION(Applicatior)
09 01 //6 LOCAL_USAGE(Pointer)
A1 00 //8 MAIN_COLLECTION(Physical)
95 03 //10 GLOBAL_REPORT_COUNT(3)
75 01 //12 GLOBAL_REPORT_SIZE(1)
05 09 //14 GLOBAL_USAGE_PAGE(Button)
19 01 //16 LOCAL_USAGE_MINIMUM(1)
29 03 //18 LOCAL_USAGE_MAXIMUM(3)
15 00 //20 GLOBAL_LOGICAL_MINIMUM(0)
25 01 //22 GLOBAL_LOCAL_MAXIMUM(1)
81 02 //24 MAIN_INPUT(data var absolute NoWrap linear PreferredState NoNullPosition NonVolatile ) Input 0.3
95 01 //26 GLOBAL_REPORT_COUNT(1)
75 05 //28 GLOBAL_REPORT_SIZE(5)
81 03 //30 MAIN_INPUT(const var absolute NoWrap linear PreferredState NoNullPosition NonVolatile ) Input 1.0
95 03 //32 GLOBAL_REPORT_COUNT(3)
75 08 //34 GLOBAL_REPORT_SIZE(8)
05 01 //36 GLOBAL_USAGE_PAGE(Generic Desktop Controls)
09 30 //38 LOCAL_USAGE(X)
09 31 //40 LOCAL_USAGE(Y)
09 38 //42 LOCAL_USAGE(Wheel)
15 81 //44 GLOBAL_LOGICAL_MINIMUM(-127)
25 7F //46 GLOBAL_LOCAL_MAXIMUM(127)
81 06 //48 MAIN_INPUT(data var relative NoWrap linear PreferredState NoNullPosition NonVolatile ) Input 4.0
C0 //50 MAIN_COLLECTION_END
这样我们就可通过解析出的内容,很容易的分出这是一个鼠标的设备,并大致分析出数据格式。
当然,以上都是老的版本的功能,其后续的主要工作是解决BUG,和更新一些小的功能。没有特别大的突破。
时间如逝,以上的功能虽然解决了HID报告描述符分析工具从无到有,并且无法精准地分析出数据长度和格式等相关的信息,这需要对HID报告描述符很熟悉的人才能做到,所以本此更新,我们先解决长度和ReportId的问题。
HidReportPasrserV2.0.exe此次更新后的界面如下:
我们对过分如下的报告描述符分析:
05 01 09 02 A1 01 85 A0 09 01 A1 00 05 09 19 01 29 03 15 00 25 01 95 08 75 01 81 02 05 01 09 30 09 31 09 38 15 81 25 7F 75 08 95 03 81 06 C0 C0 05 01 09 06 A1 01 85 A1 05 08 19 01 29 03 15 00 25 01 75 01 95 03 91 02 95 05 91 01 05 07 19 E0 29 E7 95 08 81 02 75 08 95 01 81 01 19 00 29 91 26 FF 00 95 06 81 00 C0 05 01 09 02 A1 01 85 A2 09 01 A1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 03 05 01 09 30 09 31 15 00 26 FF 7F 75 10 95 02 81 02 C0 C0 06 00 FF 09 01 A1 01 09 01 85 05 15 00 26 FF 00 75 08 96 FF 00 91 02 C0
除了解析出以往的报告描述符注释信息外,还解析出了ReportId等信息:
ReportId:160(A0)
UsagePage:0x0001 Uage:0x0002
InputLength:5 OutputLength:0 FeatureLength:0
ReportId:161(A1)
UsagePage:0x0001 Uage:0x0006
InputLength:9 OutputLength:2 FeatureLength:0
ReportId:162(A2)
UsagePage:0x0001 Uage:0x0002
InputLength:6 OutputLength:0 FeatureLength:0
ReportId:5(05)
UsagePage:0xFF00 Uage:0x0001
InputLength:0 OutputLength:256 FeatureLength:0
这样我们对照UsagePage和Uage的索引信息,很容易知道这是一个什么设备。
而ReportId和InputLength OutputLength FeatureLengt长度信息,帮助我们可以更快的组织数据结构。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936
HID开发笔记





