Назад к обновлениям
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
  • зависимости от внешних библиотек значительно сокращены
  • поддержка USB-хоста для Low Speed устройств теперь более надёжна (ATTiny85, EvilCrow и т.д.)
  • аппаратное обеспечение и функциональность почти не изменились, подробности см. в примечаниях ниже

Выявляйте 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 в начале кода. Аппаратное обеспечение — это плата часов с 1,28-дюймовым TFT-дисплеем на базе RP2040. Дополнительную информацию можно найти здесь. Это также полностью совместимо с Waveshare RP2040-LCD-1.28.

Структура репозитория

docs: документация по проекту, включая презентацию, где вы можете ознакомиться со всеми функциями

firmware: готовые прошивки для Raspberry Pi Pico. Вы можете просто использовать их и прошить плату. У нас есть несколько различных версий: для 32 или 64 строк OLED, для Pico 1 или Pico2, Pi Pico Watch и т.д.

PCB: файл Gerber, если вы хотите напечатать кастомную печатную плату. Это не обязательно, вы можете использовать свою собственную или собрать на макетной плате

src и data: исходники, если вы хотите изменить и собрать прошивку самостоятельно

utils: некоторые утилиты, которые могут пригодиться для создания кастомной файловой системы

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 или макетная плата
  • (опционально) напечатанная на 3D-принтере прокладка для изоляции экрана от платы (https://www.thingiverse.com/thing:4748043), но вместо неё можно использовать кусочек изоляционной ленты

Примечания о BOOTSEL и версии >= 1.0.0

В версиях 0.x.x BOOTSEL использовался для сброса устройства или вывода количества HID-событий (нажатие > 2 с). Опрос BOOTSEL создавал некоторые проблемы для обнаружения BADUSB, поэтому это было удалено из версии 1.0.0 и заменено следующими двумя опциями:

  • припаяйте кнопку между GP0 и GND (контакты 1 и 3, пример см. на фото ниже), чтобы получить те же функции
  • используйте команды r (сброс) и h (HID-события) из монитора последовательного порта

В папке PCB вы также найдёте версию платы 1.3 с отверстиями на контактах 1 и 3 для облегчения монтажа кнопки. Но, как видите, вы также можете использовать свою старую версию.

Если вы не используете функции BADUSB или предпочитаете меньшее покрытие обнаружения, но хотите сохранить использование BOOTSEL, я также предоставляю прошивку, созданную с включённым bootsel (см. папку и релизы).

Инструкции по сборке

Благодаря Tz1rf у нас также есть два отличных видео: одно пошагово объясняет процесс сборки, а другое показывает, как загрузить прошивку и использовать инструмент.

Почти вся работа выполняется непосредственно на плате программным обеспечением, поэтому вам нужно только организовать подключение к OLED для вывода.

Начиная с версии прошивки 0.8.0, USBvalve может обнаруживать HID-устройства (используется для обнаружения BADUSB). Для этого требуется дополнительный USB-порт, работающий как хост. Если вас это не интересует, вы можете использовать старые инструкции в папке docs и использовать версию платы 1.1. В противном случае используйте версию платы 1.2 (у нас есть версии для USB-A или USB-B, см. папку).

С печатной платой USBvalve

  • припаяйте USB-порт «мама» в области USBH. Это для версии A, но есть также версия для USB Micro-B, если предпочитаете
  • разместите Raspberry Pi Pico по шелкографии на лицевой стороне
  • вам не нужно припаивать все контакты. Только следующие:
    • D4 и D5 (левая сторона)
    • D14 и D15 (левая сторона)
    • GND (правая сторона, третий контакт сверху)
    • GND (правая сторона, третий контакт снизу)
    • 3v3_OUT (правая сторона)
    • VBUS (правая сторона)
    • 3 контакта DEBUG внизу: SWCLK, GND и SWDIO
  • разместите прокладку, напечатанную на 3D-принтере, или кусочек ленты на тех частях OLED, которые могут касаться Raspberry
  • припаяйте OLED (с гребёнкой) на место для 4 PIN

У некоторых OLED-экранов контакты GND и VCC поменяны местами, поэтому я спроектировал плату совместимой с обеими версиями:

Например, если у вашего OLED GND на PIN1 и VCC на PIN2, вот так:

Вам нужно нанести каплю припоя на эти две площадки на обратной стороне платы:

В противном случае нужно сделать наоборот и нанести припой на другие площадки:

Без печатной платы USBvalve

Pico Pi

Если вы используете макетную плату или просто провода, всё, что вам нужно сделать, — это убедиться, что вы подключили нужные контакты к OLED-экрану и к USB-порту хоста.

Схема подключения следующая:

  • PIN6 Pi --> OLED SDA
  • PIN7 Pi --> OLED SCL
  • PIN19 Pi --> D+ USB-хоста
  • PIN20 Pi --> D- USB-хоста
  • PIN23 (GND) Pi --> GND USB-хоста
  • PIN38 (GND) Pi --> OLED GND
  • PIN36 (3V3OUT) Pi --> OLED VCC
  • PIN40 (VBUS) Pi --> VCC USB-хоста

Если вы хотите использовать функции DEBUG, вы также можете разместить гребёнку на 3 контактах SWD внизу платы.

С печатной платой USBpipe

[!CAUTION] Эта печатная плата предназначена для опытных электронщиков НЕ ИСПОЛЬЗУЙТЕ ЕЁ, ЕСЛИ НЕ УВЕРЕНЫ, ЧТО СПРАВИТЕСЬ!

[!NOTE] R7 и R8 на самом деле ни к чему не подключены. Они добавлены для отладки схемы. Поэтому они не отображаются в BOM

USBpipe PCB USBpipe

USBpipe — это специализированная печатная плата для этого проекта.

Всё необходимое вы найдёте в папке ./PCB/USBpipe/.

Front Back

Прошивка

Чтобы прошить прошивку, выполните следующие шаги:

  • Подключите Raspberry Pi Pico с помощью USB-кабеля, удерживая нажатой кнопку BOOTSEL (большая белая кнопка на плате)
  • отпустите кнопку
  • вы увидите новый диск в системе с именем RPI-RP2 (в средах Linux вам, возможно, придётся смонтировать его вручную)
  • скопируйте соответствующий файл прошивки (с расширением uf2) в папку, в зависимости от используемого OLED
  • подождите несколько секунд, пока смонтированная папка не исчезнет

Готово!

Анти-обнаружение

Я не знаю, будет ли это когда-либо актуально, но вы можете захотеть настроить прошивку, чтобы избежать обнаружения вредоносным ПО, осведомлённым о 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 не предназначен для тестирования таких устройств, у него нет никакой изоляции или защиты, поэтому если у вас есть подозрение, что вы имеете дело с одним из таких устройств, тестируйте его чем-то другим, НЕ USBvalve, иначе вы можете повредить устройство, себя или предметы рядом с вами.

Категории