mirror of
https://github.com/cecio/USBvalve.git
synced 2025-12-09 13:54:58 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1c4fd4816 | ||
|
|
3de81580bd | ||
|
|
b6076a6880 | ||
|
|
d97b34c372 | ||
|
|
c4b914f458 | ||
|
|
a0ad62e20f | ||
|
|
7bcca191cc | ||
|
|
386852c994 | ||
|
|
e19cb76910 | ||
|
|
927dd4d67f |
32
README.md
32
README.md
@@ -127,6 +127,36 @@ To flash the firmware, follow these steps:
|
||||
|
||||
It's done!
|
||||
|
||||
### Anti-Detection
|
||||
|
||||
I don't know if it will ever be the case, but you may want to customize the firmware in order to avoid detection done by *USBvalve-aware* malware :-)
|
||||
|
||||
I grouped most of the variables you may want to modify in this section
|
||||
|
||||
```C
|
||||
// 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 // This override the Pi Pico default 0x2E8A
|
||||
#define USB_PRODUCTID 0x16D5 // This override the Pi Pico default 0x000A
|
||||
#define USB_DESCRIPTOR "DataTraveler" // This override the Pi Pico default "Pico"
|
||||
#define USB_MANUF "Kingston" // This override the Pi Pico default "Raspberry Pi"
|
||||
#define USB_SERIAL "123456789A" // This override the Pi Pico default. Disabled by default. \
|
||||
// See "setSerialDescriptor" in setup() if needed
|
||||
#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
|
||||
```
|
||||
|
||||
|
||||
### Building your firmware
|
||||
|
||||
Obviously you can also build your own firmware. To build the *standard* one I used:
|
||||
@@ -134,7 +164,7 @@ Obviously you can also build your own firmware. To build the *standard* one I us
|
||||
- Arduino IDE 2.1.0
|
||||
- ~~as board I used `Raspberry Pi Pico - Arduino MBED OS RP2040` version `4.0.2`~~
|
||||
- ~~`Adafruit TinyUSB Library` version `1.14.4`. Newer versions are not working because the RPI SDK of the board is stick to an older version. May be migrate the entire project directly on Raspberry Pi Pico SDK is the solution here.~~
|
||||
- `Adafruit TinyUSB Library` version `2.2.0` and Board `Raspberry Pi RP2040 (2.7.0)` setting clock at 240MHz (overclock)
|
||||
- `Adafruit TinyUSB Library` version `2.2.1` and Board `Raspberry Pi RP2040 (2.7.0)` setting clock at 240MHz (overclock)
|
||||
- `ssd1306` OLED library version `1.8.3`
|
||||
|
||||
If you want to re-create a new fake filesystem, you may want to have a look to the `utils` folder, where I placed some utilities to build a new one.
|
||||
|
||||
@@ -74,12 +74,33 @@ bool activeState = false;
|
||||
//
|
||||
// USBvalve globals
|
||||
//
|
||||
#define VERSION "USBvalve - 0.9.1"
|
||||
#define VERSION "USBvalve - 0.10.0"
|
||||
boolean readme = false;
|
||||
boolean autorun = false;
|
||||
boolean written = false;
|
||||
boolean written_reported = false;
|
||||
|
||||
// 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 // This override the Pi Pico default 0x2E8A
|
||||
#define USB_PRODUCTID 0x16D5 // This override the Pi Pico default 0x000A
|
||||
#define USB_DESCRIPTOR "DataTraveler" // This override the Pi Pico default "Pico"
|
||||
#define USB_MANUF "Kingston" // This override the Pi Pico default "Raspberry Pi"
|
||||
#define USB_SERIAL "123456789A" // This override the Pi Pico default. Disabled by default. \
|
||||
// See "setSerialDescriptor" in setup() if needed
|
||||
#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
|
||||
|
||||
#define BLOCK_AUTORUN 102 // Block where Autorun.inf file is saved
|
||||
#define BLOCK_README 100 // Block where README.txt file is saved
|
||||
#define MAX_DUMP_BYTES 16 // Used by the dump of the debug facility: do not increase this too much
|
||||
@@ -88,20 +109,28 @@ boolean written_reported = false;
|
||||
|
||||
// Burned hash to check consistency
|
||||
u8 valid_hash[WIDTH] = {
|
||||
0x35, 0x98, 0x95, 0x97, 0xC7, 0x70, 0xD3, 0xE4,
|
||||
0xDD, 0x84, 0x71, 0x1D, 0x55, 0xD2, 0xE5, 0xA4,
|
||||
0x6C, 0x28, 0x84, 0xF6, 0xE1, 0x02, 0xD1, 0x74,
|
||||
0x2F, 0xE9, 0x92, 0xAD, 0xAD, 0x74, 0x71, 0xF0,
|
||||
0x37, 0xFF, 0x79, 0x39, 0xDC, 0x20, 0x56, 0x26,
|
||||
0xFE, 0xC7, 0x9A, 0x4E, 0x3A, 0x27, 0x65, 0x81
|
||||
0x60, 0xFB, 0x68, 0xB5, 0xB9, 0xE6, 0xF4, 0xB7,
|
||||
0x5F, 0xAD, 0x3C, 0x0D, 0xD3, 0x85, 0x01, 0x74,
|
||||
0xED, 0x70, 0x55, 0x55, 0xE8, 0x1D, 0xE4, 0xBB,
|
||||
0x4F, 0xC7, 0x2C, 0xA6, 0x7C, 0xC7, 0x79, 0x79,
|
||||
0xEF, 0x21, 0x81, 0xB0, 0xEB, 0xD1, 0xF1, 0x71,
|
||||
0x72, 0x37, 0x13, 0x0C, 0x28, 0x39, 0xC0, 0xB0
|
||||
};
|
||||
|
||||
u8 computed_hash[WIDTH] = { 0x00 };
|
||||
|
||||
// Core 0 Setup: will be used for the USB mass device functions
|
||||
void setup() {
|
||||
// Change all the USB Pico settings
|
||||
TinyUSBDevice.setID(USB_VENDORID, USB_PRODUCTID);
|
||||
TinyUSBDevice.setProductDescriptor(USB_DESCRIPTOR);
|
||||
TinyUSBDevice.setManufacturerDescriptor(USB_MANUF);
|
||||
// This could be used to change the serial number as well
|
||||
// TinyUSBDevice.setSerialDescriptor(USB_SERIAL);
|
||||
|
||||
// Check consistency of RAM FS
|
||||
quark(computed_hash, msc_disk[BYTES_TO_HASH_OFFSET], BYTES_TO_HASH);
|
||||
// Add 11 bytes to skip the DISK_LABEL from the hashing
|
||||
quark(computed_hash, msc_disk[BYTES_TO_HASH_OFFSET] + 11, BYTES_TO_HASH);
|
||||
|
||||
#if defined(ARDUINO_ARCH_MBED) && defined(ARDUINO_ARCH_RP2040)
|
||||
// Manual begin() is required on core without built-in support for TinyUSB such as
|
||||
@@ -110,7 +139,7 @@ void setup() {
|
||||
#endif
|
||||
|
||||
// Set disk vendor id, product id and revision with string up to 8, 16, 4 characters respectively
|
||||
usb_msc.setID("Watchdog", "USBvalve", "0.1");
|
||||
usb_msc.setID(USB_VENDORID_STR, USB_PRODUCTID_STR, USB_VERSION_STR);
|
||||
|
||||
// Set disk size (using the "fake" size)
|
||||
usb_msc.setCapacity(FAKE_DISK_BLOCK_NUM, DISK_BLOCK_SIZE);
|
||||
@@ -126,8 +155,6 @@ void setup() {
|
||||
usb_msc.setReadyCallback(msc_ready_callback);
|
||||
#endif
|
||||
|
||||
usb_msc.begin();
|
||||
|
||||
// Screen Init
|
||||
Wire.begin();
|
||||
Wire.setClock(400000L);
|
||||
@@ -158,6 +185,8 @@ void setup() {
|
||||
delay(1000); // Loop forever
|
||||
}
|
||||
}
|
||||
|
||||
usb_msc.begin();
|
||||
}
|
||||
|
||||
// Core 1 Setup: will be used for the USB host functions for BADUSB detector
|
||||
@@ -283,7 +312,7 @@ bool msc_ready_callback(void) {
|
||||
void cls(void) {
|
||||
oled.clear();
|
||||
oled.print(VERSION);
|
||||
oled.print("\n----------------");
|
||||
oled.print("\n-----------------");
|
||||
}
|
||||
|
||||
// HexDump
|
||||
|
||||
@@ -35,9 +35,15 @@
|
||||
// README.TXT
|
||||
// System Volume Information
|
||||
//
|
||||
|
||||
// Keep 11 chars
|
||||
#define DISK_LABEL 'M', 'y', 'D', 'r', 'i', 'v', 'e', ' ', ' ', ' ', ' '
|
||||
|
||||
// Do not change this here, it is just for reference
|
||||
#define README_CONTENTS \
|
||||
"...nuke the entire site from orbit. It's the only way to be sure."
|
||||
|
||||
// Do not change this here, it is just for reference
|
||||
#define AUTORUN_CONTENTS \
|
||||
"[autorun]\r\nopen=calc.exe\r\nicon=icon.ico\r\n"
|
||||
|
||||
@@ -134,7 +140,7 @@ uint8_t msc_disk[DISK_BLOCK_NUM][DISK_BLOCK_SIZE] = {
|
||||
},
|
||||
{
|
||||
//------------- Block 7: -------------//
|
||||
0x55, 0x53, 0x42, 0x56, 0x41, 0x4c, 0x56, 0x45, 0x20, 0x20, 0x20, 0x08, 0x00, 0x00, 0xaf, 0x60,
|
||||
DISK_LABEL, 0x08, 0x00, 0x00, 0xaf, 0x60,
|
||||
0x6d, 0x55, 0x6d, 0x55, 0x00, 0x00, 0xaf, 0x60, 0x6d, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x41, 0x55, 0x54, 0x4f, 0x52, 0x55, 0x4e, 0x20, 0x49, 0x4e, 0x46, 0x20, 0x00, 0x9d, 0xef, 0x58,
|
||||
0x6d, 0x55, 0x6b, 0x55, 0x00, 0x00, 0xef, 0x58, 0x6d, 0x55, 0x60, 0x00, 0x2a, 0x00, 0x00, 0x00,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user