العودة إلى التحديثات
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 لأجهزة السرعة المنخفضة أكثر قوة (ATTiny85، EvilCrow، إلخ)
  • العتاد والوظائف لم تتغير تقريبًا، راجع الملاحظات أدناه للحصول على التفاصيل

اكشف نشاط USB على الفور

The two models The Watch 1.2

أنا متأكد من أنه، مثلي، طُلب منك وضع محرك USB الخاص بك في جهاز غير معروف... ثم يأتي الشك:

ماذا حدث لمحرك 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 في بداية الكود. العتاد عبارة عن شاشة TFT مقاس 1.28 بوصة ولوحة ساعة مبنية على RP2040. يمكنك العثور على مزيد من المعلومات هنا. هذا متوافق أيضًا بشكل كامل مع Waveshare RP2040-LCD-1.28.

هيكل المستودع

docs: توثيق حول المشروع، مع عرض تقديمي يمكنك من خلاله الاطلاع على جميع الميزات

firmware: برامج ثابتة مبنية مسبقًا لـ Raspberry Pi Pico. يمكنك فقط استخدامها وحرقها على اللوحة. لدينا عدة إصدارات مختلفة، لشاشات OLED بـ 32 أو 64 سطرًا، لـ Pico 1 أو Pico2، Pi Pico Watch، إلخ

PCB: ملف Gerber إذا كنت تريد طباعة لوحة 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.

بناء USBvalve

قائمة الأجزاء

إذا كنت تريد بناء نسختك الخاصة، فأنت بحاجة إلى:

  • Raspberry Pi Pico 1 أو 2 (أو لوحة أخرى مبنية على RP2040)
  • شاشة I2C OLED 128x64 أو 128x32 (SSD1306)
  • (اختياري) لوحة USBvalve PCB أو لوحة تجارب
  • (اختياري) فاصل مطبوع ثلاثي الأبعاد لعزل الشاشة عن اللوحة (https://www.thingiverse.com/thing:4748043)، لكن يمكنك استخدام قطعة من الشريط اللاصق الكهربائي بدلاً من ذلك

ملاحظات حول BOOTSEL والإصدار >= 1.0.0

في إصدارات 0.x.x، كان BOOTSEL يُستخدم لإعادة تعيين الجهاز أو طباعة عدد أحداث HID (اضغط > ثانيتين). كان استقصاء 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، انظر المجلد).

مع USBvalve PCB

  • لحام منفذ USB أنثى في منطقة USBH. هذا للإصدار A، لكن هناك إصدار لـ USB Micro-B أيضًا إذا كنت تفضل ذلك
  • ضع Raspberry Pi Pico على الطباعة الحريرية في المقدمة
  • لا تحتاج إلى لحام جميع الأطراف. فقط ما يلي:
    • D4 و D5 (الجانب الأيسر)
    • D14 و D15 (الجانب الأيسر)
    • GND (الجانب الأيمن، الطرف الثالث من الأعلى)
    • GND (الجانب الأيمن، الطرف الثالث من الأسفل)
    • 3v3_OUT (الجانب الأيمن)
    • VBUS (الجانب الأيمن)
    • أطراف DEBUG الثلاثة في الأسفل: SWCLK و GND و SWDIO
  • ضع الفاصل المطبوع ثلاثي الأبعاد أو قطعة شريط لاصق على أجزاء شاشة OLED التي قد تلامس Raspberry
  • لحام شاشة OLED (مع موصل) على مساحة الأطراف الأربعة

بعض شاشات OLED لديها أطراف GND و VCC متبادلة، لذلك بنيت لوحة PCB لتكون متوافقة مع كلا الإصدارين:

على سبيل المثال إذا كانت شاشتك OLED لديها GND على الطرف PIN1 و VCC على الطرف PIN2 مثل هذا:

يجب عليك وضع قطعة من اللحام على هاتين الوسادتين على الجزء الخلفي من لوحة PCB:

وإلا فيجب عليك العكس ووضع اللحام على الوسادات الأخرى:

بدون USBvalve PCB

Pico Pi

إذا كنت تستخدم لوحة تجارب أو مجرد توصيلات، كل ما عليك فعله هو التأكد من توصيل الأطراف الصحيحة بشاشة OLED ومنفذ USB المضيف.

التخطيط كالتالي:

  • PIN6 من Pi --> OLED SDA
  • PIN7 من Pi --> OLED SCL
  • PIN19 من Pi --> D+ من USB Host
  • PIN20 من Pi --> D- من USB Host
  • PIN23 (GND) من Pi --> GND من USB Host
  • PIN38 (GND) من Pi --> OLED GND
  • PIN36 (3V3OUT) من Pi --> OLED VCC
  • PIN40 (VBUS) من Pi --> VCC من USB Host

إذا كنت تريد استخدام وظائف DEBUG، يمكنك أيضًا وضع موصل على أطراف SWD الثلاثة في أسفل اللوحة.

مع USBpipe PCB

[!CAUTION] لوحة PCB هذه للمصنّعين الإلكترونيين ذوي الخبرة لا تستخدمها إذا لم تكن متأكدًا من قدرتك على التعامل معها!

[!NOTE] R7 و R8 غير متصلين فعليًا بأي شيء. تمت إضافتهما لأغراض تصحيح الدوائر. لذلك لا يظهران في قائمة المواد BOM

USBpipe PCB USBpipe

USBpipe هي لوحة PCB مخصصة لهذا المشروع.

يمكنك العثور على كل ما تحتاجه في مجلد ./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

إصدارات المجتمع

أنشأ المجتمع بعض الفروع (forks) التي تنفذ دعمًا للوحات أخرى، أو تعديلات أخرى. شكرًا لكل من ساهم في تطوير USBvalve. فيما يلي قائمة غير رسمية/غير كاملة/غير مدعومة:

تحذير السلامة

[!WARNING] لقد تلقيت الكثير من الأسئلة حول USBvalve وأجهزة USB killer. لم يتم بناء USBvalve لاختبار هذه الأجهزة، وليس لديه أي نوع من العزل أو الحماية، لذلك إذا كنت تشك في أنك تتعامل مع أحد هذه الأجهزة، فاختبرها بشيء آخر، وليس مع USBvalve وإلا قد تتلف الجهاز أو نفسك أو الأشياء القريبة منك.

الفئات