使用 usbpcap/wireshark 解码捕获的 HID over GATT 流量

decoding captured HID over GATT traffic with usbpcap/wireshark

我正在尝试对使用 USB HID over GATT 与主机通信的 BLE 设备进行逆向工程。我可以使用 usbpcap 捕获流量,但是当将结果加载到 wireshark 时,数据包似乎包含表示无线数据的字节(即设备描述符),但数据包未根据 USBHID 协议解码。一切都被解码为 USB,并且只包含 URB_INTERRUPT_IN、URB_BULK in/out 和 URB_CONTROL_OUT,而我正在寻找诸如 GET DESCRIPTOR Request/Response DEVICE 之类的东西。我可以采取额外的步骤来正确格式化和解析数据包吗?

使用中有几个特点。您有一个包含报告地图的特征。这通常只在设备配对时读取一次。此映射包含稍后通过报告通知发送的数据的 layout/specification。这主要是 "copy-paste" 从 USB 规范到 BLE 的规范。

现在,当您 运行 HID-over-GATT 和您的蓝牙控制器通过 USB 与主机通信时,您将在 usbpcap 中看到的是包含 L2CAP 数据的 ACL 数据,其中包含 GATT 数据,它又包含 HID 的报告数据。然后主机上的蓝牙堆栈将对此进行解码并将其提供给内核的 HID 解析器。

我建议您改为将 HID-over-GATT 设备连接到 Android phone,然后查看 HCI 侦听日志发生了什么,它可以在 Wireshark 中解码(但它不会解析您的 HID 数据)。