アップデート一覧に戻る
New releaseAug 31, 2026

USBvalve v1.0.1

USBアクティビティをオンザフライで可視化する

共有

logo, landscape, dark text, transparent background

[!NOTE] USBvalve バージョン 1.0.0

アプリケーションを全面的に書き直しました:

  • Arduino IDE 環境から離れ、コードは Pi Pico SDK 向けに書かれています
  • 外部ライブラリへの依存を大幅に削減しました
  • Low Speed デバイス (ATTiny85、EvilCrow など) に対する USB ホストサポートがより堅牢になりました
  • ハードウェアと機能はほぼ変わっていません。詳細は下記の注記を参照してください

USB アクティビティをその場で可視化

The two models The Watch 1.2

きっとあなたも私と同じように、未知のデバイスに USB ドライブを挿すよう頼まれたことがあるでしょう...そして疑問が浮かびます:

私のかわいそうなドングルは、裏で何をされたのか? ファイルを盗まれた? 暗号化された? それとも ただ マルウェアをインストールされただけ? USBvalve を使えばこれを数秒で見抜けます: 超安価な既製品ハードウェアで構築されているので、あらゆる USB ファイルシステムアクティビティを素早くテストし、手遅れになる前に何が起きているのかを理解できます!

USBvalve を使えば、ドライブに何が起きたかを即座にフィードバックできます。デバイス上に構築された偽のファイルシステムがアクセス、読み取り、書き込みされたかどうかを画面に表示します:

Selftest Readme

またバージョン 0.8.0 以降では、USB ホストとして使用して BADUSB デバイスを検出することもできます:

HID

これはシリアルポートで利用可能な 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 ファイル。必須ではなく、独自のものを使用したりブレッドボード上に構築したりできます

srcdata: ソース。ファームウェアを自分で変更してビルドしたい場合に使用します

utils: カスタム FS を構築する際に使用できるユーティリティ

pictures: このドキュメントで使用されている画像とリソース

STL: エンクロージャ用の STL ファイル。1.11.2 フォルダには完全なエンクロージャがあります (WhistleMaster に感謝)。フォルダ 1.2_641.2_64_simple には 128x64 スクリーン用のエンクロージャがあります (rtmq0227 に感謝)。LCD を保護するより軽量なものが必要な場合は USBvalve_sliding_cover.stl を使用できます。

USBvalve のビルド

部品リスト

自分でビルドしたい場合、必要なものは:

BOOTSEL とバージョン >= 1.0.0 に関する注記

0.x.x バージョンでは、BOOTSEL はデバイスのリセットや HID イベント数の表示 (> 2 秒押す) に使用されていました。 BOOTSEL のポーリングが BADUSB 検出にいくつかの問題を引き起こしていたため、これはバージョン 1.0.0 から削除され、以下の 2 つのオプションに置き換えられました:

  • GP0GND の間にボタンをはんだ付けする (パッド 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 用ですが、好みに応じて USB Micro-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 を使用しない場合

Pico Pi

ブレッドボードまたは単なる配線を使用する場合、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 USBpipe

USBpipe はこのプロジェクト専用の PCB です。

必要なものはすべて ./PCB/USBpipe/ フォルダにあります。

Front Back

ファームウェアの書き込み

ファームウェアを書き込むには、以下の手順に従ってください:

  • 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] USBvalveUSB killer デバイスについて多くの質問を受けています。USBvalve はこれらのデバイスをテストするために作られたものではなく、いかなる種類の絶縁や保護も備えていません。したがって、これらのデバイスの 1 つを扱っている疑いがある場合は、USBvalve ではなく別のものでテストしてください。そうしないと、デバイス、自分自身、または近くの物体を損傷する可能性があります。

カテゴリ