Отладка USB чтения

Я отлаживаю некоторый код, который использует стороннюю 64-битную DLL для доступа к пользовательскому USB-устройству. Моя среда - Microsoft Visual Studio 2012 на Windows 8.1 x64.

Согласно неполному и ненадежному документу, DLL должна выпустить ioctl USBDEVFS_CONTROL для чтения 1 байта с подключенного USB-устройства. Определение включает в себя

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-linux и https://reverseengineering.stackexchange.com/questions/1786/usb-dongle-traffic-monitoring. Похоже, эти инструменты не совместимы с Windows 8.1 x64.

1 ответ

При работе с операционной системой Xbox и периферийными устройствами мы всегда использовали оборудование USB-захвата CATC Chief, которое работает как устройство "человек посередине" (похоже, оно было заменено анализаторами протокола Teledyne LeCroy).

Возможности захвата трафика были незаменимы при диагностике аппаратных и программных ошибок (объем, HID, isoch).

Пример захвата изображения (из руководства):

USB Capture Trace

Другие вопросы по тегам