
Expose USB activity on the fly

[!NOTE] USBvalve 버전 1.0.0
애플리케이션이 완전히 재작성되었습니다:
- Arduino IDE 환경에서 벗어나, 이제 코드는 Pi Pico SDK용으로 작성되었습니다
- 외부 라이브러리에 대한 의존성이 크게 줄었습니다
- 저속(Low Speed) 장치에 대한 USB 호스트 지원이 더욱 강력해졌습니다 (ATTiny85, EvilCrow 등)
- 하드웨어와 기능은 거의 변경되지 않았습니다. 자세한 내용은 아래의 참고 사항을 참조하세요
저처럼 당신도 USB 드라이브를 알 수 없는 장치에 꽂아 달라는 요청을 받은 적이 있을 거라 확신합니다... 그리고 이런 의문이 들겠죠:
보이지 않는 곳에서 내 불쌍한 동글에게 무슨 일이 일어났을까? 내 파일을 훔치고 있을까? 암호화하고 있을까? 아니면 단지 악성코드를 설치하고 있을까? USBvalve를 사용하면 몇 초 만에 이것을 알아낼 수 있습니다: 매우 저렴한 시판 하드웨어를 기반으로 하여 어떤 USB 파일 시스템 활동이든 빠르게 테스트하고 너무 늦기 전에 무슨 일이 벌어지고 있는지 파악할 수 있습니다!
USBvalve를 사용하면 드라이브에 무슨 일이 일어나는지 즉각적인 피드백을 얻을 수 있습니다. 화면에는 장치에 구축된 가짜 파일 시스템에 접근, 읽기 또는 쓰기가 발생하는지 표시됩니다:
그리고 버전 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: 맞춤형 PCB를 인쇄하려는 경우 필요한 Gerber 파일입니다. 필수는 아니며, 직접 만든 PCB를 사용하거나 브레드보드에 구성해도 됩니다
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을 사용하면 됩니다.
직접 만들고 싶다면 다음이 필요합니다:
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 폴더의 이전 지침을 사용하고 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/
//
// Example:
// 0x0951 0x16D5 VENDORID_STR: Kingston PRODUCTID_STR: DataTraveler
//
#define USB_VENDORID 0x0951
#define USB_PRODUCTID 0x16D5
#define USB_DESCRIPTOR "DataTraveler"
#define USB_MANUF "Kingston"
#define USB_SERIAL "123456789A"
#define USB_VENDORID_STR "Kingston" // Up to 8 chars
#define USB_PRODUCTID_STR "DataTraveler" // 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을 제공합니다.
빌드하려면 기본 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
펌웨어는 USBvalve_out 폴더에 uf2 확장자로 배치됩니다.
아이디어나 개선 사항이 있다면 이슈를 열어 주시기 바랍니다. 함께 프로젝트를 개선할 수 있습니다! 감사합니다!
질문이 있거나 지원이 필요하면 여기서 Issue를 열거나 Twitter/X @red5heep으로 연락해 주세요
커뮤니티에서 다른 보드 지원 또는 기타 수정 사항을 구현한 포크를 만들었습니다. USBvalve 개발에 기여한 모든 분들께 감사드립니다. 아래는 비공식/불완전/미지원 목록입니다:
[!WARNING] USBvalve와 USB 킬러 장치에 관한 질문을 많이 받았습니다. USBvalve는 이러한 장치를 테스트하기 위해 만들어진 것이 아니며, 어떤 종류의 절연이나 보호 기능도 없습니다. 이러한 장치를 다루고 있다고 의심된다면 USBvalve가 아닌 다른 것으로 테스트하세요. 그렇지 않으면 장치, 자신 또는 주변 물건이 손상될 수 있습니다.