
[!NOTE] USBvalve 版本 1.0.0
应用程序已完成全面重写:
- 已脱离 Arduino IDE 环境,现在代码基于 Pi Pico SDK 编写
- 对外部库的依赖已大幅减少
- 对低速设备的 USB 主机支持现在更加稳健(ATTiny85、EvilCrow 等)
- 硬件和功能几乎未变,详情请参阅下方的说明
我相信,和我一样,你曾被要求将 U 盘插入一个未知设备……然后心生疑虑:
我那可怜的 U 盘在幕后到底遭遇了什么?窃取我的文件?加密它们?还是仅仅安装恶意软件?有了 USBvalve,你可以在几秒钟内查明真相:它基于极其廉价且现成的硬件构建,你可以快速测试任何 USB 文件系统活动,在一切为时已晚之前了解正在发生什么!
使用 USBvalve,你可以立即获得关于 U 盘所发生情况的反馈;屏幕会显示设备上构建的伪造文件系统是否被访问、读取或写入:
从 0.8.0 版本起,你还可以将其用作 USB 主机来检测 BADUSB 设备:
以下是串口上可用的 BADUSB 调试器示例:
如果你更喜欢视频,也可以看看我的 Insomni'hack 演讲
从 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:Gerber 文件,如果你想打印定制 PCB。这不是必需的,你可以使用自己的 PCB 或在面包板上搭建
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。
如果你想自己构建,你需要:
在 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 的固件(参见文件夹和发布版本)。
几乎所有工作都由软件直接在板子上完成,因此你只需安排与 OLED 的连接以进行输出。
从固件 0.8.0 版本起,USBvalve 可以检测 HID 设备(用于检测 BADUSB)。这需要一个额外的 USB 端口作为主机。如果你对此不感兴趣,可以使用文档文件夹中的旧说明并使用 PCB 1.1 版本。否则请继续使用 PCB 1.2 版本(我们有适用于 USB-A 或 USB-B 的版本,参见文件夹)。
USBH 区域焊接一个 USB 母口。这是 A 版本,但如果你愿意,也有适用于 USB Micro-B 的版本有些 OLED 的 GND 和 VCC 引脚是互换的,因此我将 PCB 设计为兼容两种版本:
例如,如果你的 OLED 的 PIN1 是 GND、PIN2 是 VCC,像这样:
你需要在 PCB 背面的这两个焊盘上点一团焊锡:
否则你应该反过来,将焊锡点在另外的焊盘上:
如果你使用面包板或只是接线,你只需确保将正确的引脚连接到 OLED 屏幕和主机 USB 端口。
映射关系如下:
如果你想使用 DEBUG 功能,还可以在板子底部的 3 个 SWD 引脚上放置一个排针。
[!CAUTION] 此 PCB 适用于经验丰富的电子制作者 如果你不确定自己能驾驭它,请勿使用!
[!NOTE] R7 和 R8 实际上没有连接到任何东西。它们是为电路调试目的而添加的。 因此它们不会出现在 BOM 中
USBpipe 是专为此项目设计的 PCB。
你可以在 ./PCB/USBpipe/ 文件夹中找到所需的一切。
要烧录固件,请按照以下步骤操作:
RPI-RP2(在 Linux 环境中你可能需要手动挂载它)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>