调试USB读取

时间:2014-05-25 12:36:22

标签: winapi usb ntdll deviceiocontrol

我正在调试一些使用第三方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;

此处bmRequestTypebRequestwValuewIndex是设备制造商提供的常量,ByteArrayuint8_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-linuxhttps://reverseengineering.stackexchange.com/questions/1786/usb-dongle-traffic-monitoring。看起来这些工具与Windows 8.1 x64不兼容。

1 个答案:

答案 0 :(得分:0)

在处理Xbox操作系统和外围设备时,我们总是使用CATC Chief USB捕获硬件,它可以作为中间人设备使用(看起来它已经被{{3协议分析器)。

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

样本捕获视图(来自手册):

USB Capture Trace