
USBvalve v1.0.1
USBアクティビティをオンザフライで可視化する
[!NOTE] USBvalve バージョン 1.0.0
アプリケーションを全面的に書き直しました:
- Arduino IDE 環境から離れ、コードは Pi Pico SDK 向けに書かれています
- 外部ライブラリへの依存を大幅に削減しました
- Low Speed デバイス (ATTiny85、EvilCrow など) に対する USB ホストサポートがより堅牢になりました
- ハードウェアと機能はほぼ変わっていません。詳細は下記の注記を参照してください
USB アクティビティをその場で可視化
きっとあなたも私と同じように、未知のデバイスに USB ドライブを挿すよう頼まれたことがあるでしょう...そして疑問が浮かびます:
私のかわいそうなドングルは、裏で何をされたのか? ファイルを盗まれた? 暗号化された? それとも ただ マルウェアをインストールされただけ? USBvalve を使えばこれを数秒で見抜けます: 超安価な既製品ハードウェアで構築されているので、あらゆる USB ファイルシステムアクティビティを素早くテストし、手遅れになる前に何が起きているのかを理解できます!
USBvalve を使えば、ドライブに何が起きたかを即座にフィードバックできます。デバイス上に構築された偽のファイルシステムがアクセス、読み取り、書き込みされたかどうかを画面に表示します:
またバージョン 0.8.0 以降では、USB ホストとして使用して BADUSB デバイスを検出することもできます:
これはシリアルポートで利用可能な BADUSB デバッガの例です:
動画の方がよければ、私の Insomni'hack プレゼンテーションもご覧ください
USBvalve Watch
バージョン 0.15.0 以降、新しい Pi Pico Watch バージョンがサポートされています。新しいバージョンをコンパイルするには、コードの先頭にある #define PIWATCH 行のコメントを解除する必要があります。ハードウェアは RP2040 ベースの 1.28 インチ TFT ディスプレイ付き腕時計ボードです。詳細はこちらで確認できます。
これは Waveshare RP2040-LCD-1.28 とも完全に互換性があります。
リポジトリ構成
docs: プロジェクトに関するドキュメント。すべての機能を確認できるプレゼンテーションも含まれます
firmware: Raspberry Pi Pico 用のビルド済みファームウェア。これらをそのまま使用してボードに書き込むことができます。32 行または 64 行 OLED 用、Pico 1 または Pico2 用、Pi Pico Watch 用など、いくつかの異なるバージョンがあります
PCB: カスタム PCB を印刷したい場合の Gerber ファイル。必須ではなく、独自のものを使用したりブレッドボード上に構築したりできます
src と data: ソース。ファームウェアを自分で変更してビルドしたい場合に使用します
utils: カスタム FS を構築する際に使用できるユーティリティ
pictures: このドキュメントで使用されている画像とリソース
STL: エンクロージャ用の STL ファイル。1.1 と 1.2 フォルダには完全なエンクロージャがあります (WhistleMaster に感謝)。フォルダ 1.2_64 と 1.2_64_simple には 128x64 スクリーン用のエンクロージャがあります (rtmq0227 に感謝)。LCD を保護するより軽量なものが必要な場合は USBvalve_sliding_cover.stl を使用できます。
USBvalve のビルド
部品リスト
自分でビルドしたい場合、必要なものは:
- Raspberry Pi Pico 1 または 2 (または別の RP2040 ベースのボード)
- I2C OLED スクリーン 128x64 または 128x32 (SSD1306)
- (オプション) USBvalve PCB またはブレッドボード
- (オプション) スクリーンをボードから隔離するための 3D プリントスペーサー (https://www.thingiverse.com/thing:4748043)。ただし、代わりに電気テープを使用することもできます
BOOTSEL とバージョン >= 1.0.0 に関する注記
0.x.x バージョンでは、BOOTSEL はデバイスのリセットや HID イベント数の表示 (> 2 秒押す) に使用されていました。
BOOTSEL のポーリングが BADUSB 検出にいくつかの問題を引き起こしていたため、これはバージョン 1.0.0 から削除され、以下の 2 つのオプションに置き換えられました:
GP0とGNDの間にボタンをはんだ付けする (パッド 1 と 3、例は下の写真を参照) ことで同じ機能を持たせる- シリアルモニタからコマンド
r(リセット) とh(HID イベント) を使用する
PCB には、ボタンの取り付けを容易にするためにパッド 1 と 3 に穴が開けられたバージョン 1.3 のボードもあります。しかしご覧のとおり、古いバージョンも使用できます。
BADUSB 機能を使用しない場合、または検出範囲を狭めて BOOTSEL の使用を維持したい場合は、bootsel を有効にして作成したファームウェアも提供しています (フォルダとリリースを参照)。
ビルド手順
Tz1rf のおかげで、2 つの素晴らしい動画もあります: 1 つはビルドプロセスをステップバイステップで説明し、もう 1 つはファームウェアのアップロードとツールの使用方法を示しています。
作業のほとんどはソフトウェアによってボード上で直接行われるため、出力用に OLED との接続を準備するだけで済みます。
ファームウェアのバージョン 0.8.0 以降、USBvalve は HID デバイスを検出できます (BADUSB の検出に使用)。これにはホストとして動作する追加の USB ポートが必要です。これに興味がない場合は、docs フォルダにある古い手順を使用して PCB バージョン 1.1 を使用できます。そうでなければ PCB バージョン 1.2 に進んでください (USB-A または USB-B 用のバージョンがあります。フォルダを参照)。
USBvalve PCB を使用する場合
USBHエリアに USB メス ポートをはんだ付けします。これはバージョンA用ですが、好みに応じて USBMicro-B用のバージョンもあります- シルクスクリーン上に Raspberry Pi Pico を前面に配置します
- すべての PIN をはんだ付けする必要はありません。以下のみで十分です:
- D4 と D5 (左側)
- D14 と D15 (左側)
- GND (右側、上から 3 番目のピン)
- GND (右側、下から 3 番目のピン)
- 3v3_OUT (右側)
- VBUS (右側)
- 下部の 3 つの DEBUG ピン: SWCLK、GND、SWDIO
- OLED が Raspberry に触れる可能性のある部分に 3D プリントスペーサーまたはテープを貼ります
- 4 PIN スペースに OLED (ヘッダー付き) をはんだ付けします
一部の OLED は GND と VCC の PIN が入れ替わっているため、PCB は両方のバージョンと互換性があるように設計しました:
例えば、OLED の PIN1 に GND、PIN2 に VCC がある場合:
PCB の裏面にあるこれらの 2 つのパッドにはんだを盛る必要があります:
そうでない場合は逆にして、もう一方の PAD にはんだを盛ります:
USBvalve PCB を使用しない場合
ブレッドボードまたは単なる配線を使用する場合、OLED スクリーンとホスト USB ポートに適切な PIN を接続することだけを確認すればよいです。
マッピングは以下のとおりです:
- Pi の PIN6 --> OLED SDA
- Pi の PIN7 --> OLED SCL
- Pi の PIN19 --> USB ホストの D+
- Pi の PIN20 --> USB ホストの D-
- Pi の PIN23 (GND) --> USB ホストの GND
- Pi の PIN38 (GND) --> OLED GND
- Pi の PIN36 (3V3OUT) --> OLED VCC
- Pi の PIN40 (VBUS) --> USB ホストの VCC
DEBUG 機能を使用したい場合は、ボード下部の 3 つの SWD PIN にヘッダーを配置することもできます。
USBpipe PCB を使用する場合
[!CAUTION] この PCB は経験豊富な電子工作愛好家向けです 扱える自信がない場合は使用しないでください!
[!NOTE] R7 と R8 は実際には何にも接続されていません。回路デバッグ目的で追加されています。 そのため BOM には表示されません
USBpipe はこのプロジェクト専用の PCB です。
必要なものはすべて ./PCB/USBpipe/ フォルダにあります。
ファームウェアの書き込み
ファームウェアを書き込むには、以下の手順に従ってください:
- BOOTSEL ボタン (ボード上の大きな白いボタン) を押しながら USB ケーブルで Raspberry Pi Pico を接続します
- ボタンを離します
- システム上に
RPI-RP2という名前の新しいドライブが表示されます (Linux 環境では手動でマウントする必要がある場合があります) - 使用した OLED に応じて、適切なファームウェアファイル (拡張子
uf2) をフォルダにコピーします - マウントされたフォルダが消えるまで数秒待ちます
完了です!
アンチ検出
そうなるかどうかはわかりませんが、USBvalve を認識するマルウェアによる検出を避けるためにファームウェアをカスタマイズしたい場合があるかもしれません :-)
変更したい可能性のある変数のほとんどを usb_config.h のこのセクションにまとめました (再ビルドについては下記の Dockerfile を参照)
// USB anti-detection settings
//
// Set USB IDs strings and numbers, to avoid possible detections.
// Remember that you can cusotmize FAKE_DISK_BLOCK_NUM as well
// for the same reason. Also DISK_LABEL in ramdisk.h can be changed.
//
// You can see here for inspiration: https://the-sz.com/products/usbid/
//
#define USB_VENDORID 0xCAFE
#define USB_PRODUCTID 0x1337
#define USB_DESCRIPTOR "DataStore"
#define USB_MANUF "USB Acme"
#define USB_SERIAL "123456789A"
#define USB_VENDORID_STR "Acme" // Up to 8 chars
#define USB_PRODUCTID_STR "DataStore" // Up to 16 chars
#define USB_VERSION_STR "1.0" // Up to 4 chars
ファームウェアのビルド
もちろん、独自のファームウェアをビルドすることもできます。ビルドには Raspberry Pi Pico SDK とこのリポジトリが必要です。
基本的な再コンパイル手順:
export PICO_SDK_PATH=</path/to/pico-sdk>
git clone --recursive https://github.com/cecio/USBvalve.git
cd USBvalve
mkdir build && cd build
cmake -DPICO_BOARD=pico .. # or pico2 for standard build
make -j$(nproc)
# Output: build/src/USBvalve.uf2
新しい偽のファイルシステムを再作成したい場合は、新しいものを構築するためのユーティリティを配置した utils フォルダを確認するとよいでしょう。
Dockerfile
独自のファームウェアをカスタマイズした後にビルドしたい場合、完全なビルド環境を構築してファームウェアをコンパイルする Dockerfile を提供しています。
ビルドするには、メインの USBvalve フォルダで以下のコマンドを入力します:
# To Build:
# docker build -t usbvalve-sdk -f Dockerfile.sdk .
#
# To Run (default: pico, SSD1306 OLED 128x32):
# docker run --rm -v $PWD:/mnt usbvalve-sdk
#
# Options (via environment variables):
# BOARD=pico|pico2 Board target (default: pico)
# OLED_HEIGHT=32|64 OLED display height (default: 32)
# PIWATCH=1 Use GC9A01 round TFT instead of SSD1306
# USE_BOOTSEL=1 Enable BOOTSEL button (disrupts Low Speed USB)
#
# Examples:
# docker run --rm -e BOARD=pico2 -v $PWD:/mnt usbvalve-sdk
# docker run --rm -e PIWATCH=1 -v $PWD:/mnt usbvalve-sdk
# docker run --rm -e BOARD=pico2 -e OLED_HEIGHT=64 -v $PWD:/mnt usbvalve-sdk
ファームウェアは拡張子 uf2 でフォルダ USBvalve_out に配置されます。
コントリビュート
アイデアや改善点があれば、issue を開いて一緒にプロジェクトを改善しましょう! ありがとう!
サポート
質問やサポートが必要な場合は、ここで Issue を開くか、Twitter/X @red5heep で私に連絡してください
コミュニティバージョン
コミュニティは他のボードのサポートやその他の変更を実装したフォークを作成しました。USBvalve の開発に貢献してくださったすべての方に感謝します。 以下は非公式/不完全/非サポートのリストです:
安全に関する警告
[!WARNING] USBvalve と USB killer デバイスについて多くの質問を受けています。USBvalve はこれらのデバイスをテストするために作られたものではなく、いかなる種類の絶縁や保護も備えていません。したがって、これらのデバイスの 1 つを扱っている疑いがある場合は、USBvalve ではなく別のものでテストしてください。そうしないと、デバイス、自分自身、または近くの物体を損傷する可能性があります。
