-
-
未解决 [求助]HID OutputReport replay首包有响应但后续始终回FF错误码 20雪币
-
发表于: 6天前 383
-
在做一个项目,需要绕过某 USB HID 外设的官方 SDK,直接用 WinUSB / HID API 与设备通信触发其核心功能。设备 HID 枚举正常,HidD_GetAttributes 读到 VID/PID,InputReport / OutputReport 长度也确认了。
用 USBPcap 抓了完整交互流程,大概能看到以下结构(脱敏处理):
// host → device(发起请求) 00 A0 xx xx [32字节 payload] 00 00 ... // device → host(中间状态回包) 00 B0 01 00 00 ... // host → device(疑似确认/轮询) 00 A0 xx 00 00 ... // device → host(结果回包) 00 B0 02 [数据] ...
多次抓包对比,A0 和 B0 应该是命令码,第3字节每次都在变,怀疑是 sequence number 或 session 相关字段。
目前卡点:
用 HidD_SetOutputReport replay 第一包,设备有回包,回的是 B0 01(和抓包一致),说明第一步请求被接受了。但后续无论怎么发确认包,设备要么无响应,要么回一个 B0 FF,始终拿不到 B0 02 的结果包。
用 x64dbg 挂了官方 DLL,在发包函数下断,确认第3字节确实每次调用都在变,但变化规律不像简单递增,也不像随机,IDA 里找到了相关函数但逻辑比较绕,还没完整还原。
想问的:
B0 FF这类错误回包,有没有办法让设备吐出更多错误信息,或者从 DLL 里找到错误码对照表的思路- 第3字节如果不是简单递增,在 DLL 逆向里一般怎么快速定位生成逻辑——跟着发包函数往上追调用栈,还是有更快的方法
- 有没有遇到过 HID 设备对 replay 有 session 绑定保护的情况,这种一般怎么处理
有做过类似 HID 私有协议分析经验的大佬欢迎交流
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
赞赏
赞赏
雪币:
留言: