1

我正在调试一些使用第 3 方 64 位 DLL 访问自定义 USB 设备的代码。我的环境是 Windows 8.1 x64 上的 Microsoft Visual Studio 2012。

根据不完整且不可靠的文档,DLL 应该发出 USBDEVFS_CONTROL ioctl 以从连接的 USB 设备读取 1 个字节。该定义涉及

ctrl.bRequestType = bmRequestType;
ctrl.bRequest     = bRequest;
ctrl.wValue       = wValue;
ctrl.wIndex       = wIndex;
ctrl.data         = ByteArray;
ctrl.wLength      = 64;
ctrl.timeout      = 1000;

这里bmRequestType, bRequest, wValue, 和wIndex是设备制造商提供的常量,是包含特定命令ByteArray的缓冲区。uint8_t[64]

DLL 接受特定于应用程序的参数,将它们打包到ByteArray, 并调用ksproxy.ax-> Kernelbase.dll-> ntdll.dll。我在用户模式下看到的最后一个反汇编是

mov     r10,rcx
mov     eax,47h
syscall
ret

根据文档,使用分步调试器,我可以很容易地看到它的ByteArray构造完全符合预期。但我找不到该usbdevfs_ctrltransfer结构或其 Windows 等效项。

具体来说,我们怀疑wIndex文档中指定的 的值适用于旧版本的硬件,并且 Windows DLL 实际上使用0x0400而不是0x0402.

任何提示(包括硬件或软件 USB 嗅探器、仿真器等)我们如何尝试验证此无符号短路将不胜感激。

更新

阅读https://reverseengineering.stackexchange.com/questions/2416/how-to-reverse-engineer-simple-usb-device-windows-linuxhttps://reverseengineering.stackexchange.com/questions/1786/usb-dongle - 交通监控。看起来这些工具与 Windows 8.1 x64 不兼容。

4

1 回答 1

0

在开发 Xbox 操作系统和外围设备时,我们总是使用CATC Chief USB 捕获硬件,它作为中间人设备工作(看起来它已被Teledyne LeCroy协议分析器取代)。

流量捕获功能对于诊断硬件和软件错误(批量、HID、isoch)是必不可少的。

示例捕获视图(来自手册):

USB 捕获跟踪

于 2014-05-25T16:52:10.523 回答