Отладка 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).
Пример захвата изображения (из руководства):