我正在调试一些使用第三方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嗅探器,模拟器等)我们如何尝试验证此 unsigned short 。
更新
阅读https://reverseengineering.stackexchange.com/questions/2416/how-to-reverse-engineer-simple-usb-device-windows-linux和https://reverseengineering.stackexchange.com/questions/1786/usb-dongle-traffic-monitoring。看起来这些工具与Windows 8.1 x64不兼容。
答案 0 :(得分:0)
在处理Xbox操作系统和外围设备时,我们总是使用CATC Chief USB捕获硬件,它可以作为中间人设备使用(看起来它已经被{{3协议分析器)。
流量捕获功能对于诊断硬件和软件错误(批量,HID,等级)是必不可少的。
样本捕获视图(来自手册):