如何将HID USB描述符与总线上实际发送的USB帧绑定在一起

如何将HID USB描述符与总线上实际发送的USB帧绑定在一起,usb,wireshark,hid,Usb,Wireshark,Hid,我正试图解密通过HID设备(确切地说是伊顿电源)在USB总线上发送的数据 使用Wireshark,我可以捕获USB流量。连接设备时,我可以看到HID描述符正在发送。我可以很好地解析它,多亏了一个外部引用(和),我得到了一些关于描述符不同字段的信息 然而,我似乎无法将描述符链接到我用Wireshark实际捕获的帧内的数据:我无法真正理解消息中与描述符相关的任何清晰的标题或模式。 在本例中,我看到相当多的URB控制响应消息,这些消息可能包含我想要的数据,但哪些消息包含哪些信息尚不清楚 是否有人有某种

我正试图解密通过HID设备(确切地说是伊顿电源)在USB总线上发送的数据

使用Wireshark,我可以捕获USB流量。连接设备时,我可以看到HID描述符正在发送。我可以很好地解析它,多亏了一个外部引用(和),我得到了一些关于描述符不同字段的信息

然而,我似乎无法将描述符链接到我用Wireshark实际捕获的帧内的数据:我无法真正理解消息中与描述符相关的任何清晰的标题或模式。 在本例中,我看到相当多的URB控制响应消息,这些消息可能包含我想要的数据,但哪些消息包含哪些信息尚不清楚

是否有人有某种方法来对USB HID设备发送的数据进行反向工程和解析

感谢

不久前我写了一篇文章,帮助我解码HID报告描述符,并创建C语言结构定义来描述每个报告。我要做的是:

  • 使用Wireshark捕获USB数据
  • “usb.request\u in”上的过滤器
  • 选择“获取描述符响应HID报告”数据包
  • 右键单击“HID报告”并选择“复制”和“…作为十六进制流”
现在运行解码软件并在“-c”选项后粘贴十六进制流。例如:

rexx rd.rex -c 05010906a101854b050719e029e7250175019508810275089501810326ff0019002aff0081007501950305081901290325019102750595019103c005010902a1010901a100854d09301581257f750895018106c0c0
默认情况下,它将打印C结构(见下文)。如果还想解码HID报告描述符,请使用“-d”选项

//--------------------------------------------------------------------------------
//键盘/小键盘页面输入端口4B(设备-->主机)
//--------------------------------------------------------------------------------
类型定义结构
{
uint8_t reportId;//报告ID=0x4B(75)'K'
//收藏:键盘
uint8_t KB_Keyboard keyboardleftcontrol:1;//用法0x000700E0:键盘左控件,值=0到1
uint8_t KB_Keyboard Keyboard leftshift:1;//用法0x000700E1:键盘左移,值=0到1
uint8\u t KB\u Keyboard Keyboard leftalt:1;//用法0x000700E2:Keyboard leftalt,值=0到1
uint8\u t KB\u Keyboard Keyboard leftGUI:1;//用法0x000700E3:键盘左GUI,值=0到1
uint8\u t KB\u Keyboard Keyboard rightcontrol:1;//用法0x000700E4:键盘右键控件,值=0到1
uint8\u t KB\u键盘KeyboardKeyboardRightShift:1;//用法0x000700E5:键盘右移,值=0到1
uint8\u t KB\u Keyboard Keyboard RightAlt:1;//用法0x000700E6:Keyboard Right Alt,值=0到1
uint8\u t KB\u Keyboard KeyboardRightGUI:1;//用法0x000700E7:键盘右GUI,值=0到1
uint8\u t pad\u 2;//pad
uint8\u t KB\u键盘;//值=0到255
}输入报告4b_t;
//--------------------------------------------------------------------------------
//LED指示灯页面输出端口4B(设备主机)
//--------------------------------------------------------------------------------
类型定义结构
{
uint8_t reportId;//报告ID=0x4D(77)'M'
//集合:鼠标指针
int8\u t GD\u MousePointerX;//用法0x00010030:X,值=-127到127
}输入报告4d_t;
现在,您已经清楚地了解了可能出现的报告,您可以返回Wireshark跟踪(仍然在“usb.request\u in”上过滤)并选择“URB\u INTERRUPT in”数据包。“剩余捕获数据”应该包含一个C结构所描述的有效负载

希望这能有所帮助。

不久前我写了一篇文章,帮助我解码HID报告描述符,并创建C语言结构定义来描述每个报告。我要做的是:

  • 使用Wireshark捕获USB数据
  • “usb.request\u in”上的过滤器
  • 选择“获取描述符响应HID报告”数据包
  • 右键单击“HID报告”并选择“复制”和“…作为十六进制流”
现在运行解码软件并在“-c”选项后粘贴十六进制流。例如:

rexx rd.rex -c 05010906a101854b050719e029e7250175019508810275089501810326ff0019002aff0081007501950305081901290325019102750595019103c005010902a1010901a100854d09301581257f750895018106c0c0
默认情况下,它将打印C结构(见下文)。如果还想解码HID报告描述符,请使用“-d”选项

//--------------------------------------------------------------------------------
//键盘/小键盘页面输入端口4B(设备-->主机)
//--------------------------------------------------------------------------------
类型定义结构
{
uint8_t reportId;//报告ID=0x4B(75)'K'
//收藏:键盘
uint8_t KB_Keyboard keyboardleftcontrol:1;//用法0x000700E0:键盘左控件,值=0到1
uint8_t KB_Keyboard Keyboard leftshift:1;//用法0x000700E1:键盘左移,值=0到1
uint8\u t KB\u Keyboard Keyboard leftalt:1;//用法0x000700E2:Keyboard leftalt,值=0到1
uint8\u t KB\u Keyboard Keyboard leftGUI:1;//用法0x000700E3:键盘左GUI,值=0到1
uint8\u t KB\u Keyboard Keyboard rightcontrol:1;//用法0x000700E4:键盘右键控件,值=0到1
uint8\u t KB\u键盘KeyboardKeyboardRightShift:1;//用法0x000700E5:键盘右移,值=0到1
uint8\u t KB\u Keyboard Keyboard RightAlt:1;//用法0x000700E6:Keyboard Right Alt,值=0到1
uint8\u t KB\u Keyboard KeyboardRightGUI:1;//用法0x000700E7:键盘右GUI,值=0到1
uint8\u t pad\u 2;//pad
uint8\u t KB\u键盘;//值=0到255
}输入报告4b_t;
//-----------------------------------------------