1

サードパーティの 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で、bRequestwValue、およびはwIndex、デバイスの製造元によって提供される定数であり、特定のコマンドを含むバッファーです。ByteArrayuint8_t[64]

DLL は、アプリケーション固有のパラメーターを受け取り、それらを にパックして、-> ->ByteArrayを呼び出します。ユーザーモードで見ることができる最後の分解は、ksproxy.axKernelbase.dllntdll.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 OS と周辺機器に取り組んでいる間、私たちは常に中間者デバイスとして機能するCATC Chief USB キャプチャ ハードウェアを使用しました ( Teledyne LeCroyプロトコル アナライザーに取って代わられたようです)。

トラフィック キャプチャ機能は、ハードウェアおよびソフトウェア エラー (バルク、HID、isoch) の診断に不可欠でした。

キャプチャ ビューの例 (マニュアルから):

USB キャプチャ トレース

于 2014-05-25T16:52:10.523 に答える