
Expose USB activity on the fly

[!NOTE] إصدار USBvalve 1.0.0
تمت إعادة كتابة التطبيق بالكامل:
- تم التحول بعيدًا عن بيئة Arduino IDE، وأصبح الكود الآن مكتوبًا لـ Pi Pico SDK
- تم تقليل الاعتماد على المكتبات الخارجية بشكل كبير
- أصبح دعم مضيف USB لأجهزة Low Speed أكثر قوة ومتانة (ATTiny85، EvilCrow، إلخ)
- العتاد والوظائف لم تتغير تقريبًا، انظر الملاحظات أدناه للتفاصيل
أنا متأكد من أنه طُلب منك، مثلي، وضع محرك أقراص USB في جهاز غير معروف... ثم راودك الشك:
ماذا حدث لمحرك الأقراص المسكين خاصتي، خلف الكواليس؟ هل سرق ملفاتي؟ هل قام بتشفيرها؟ أم فقط قام بتثبيت برمجية خبيثة؟ باستخدام USBvalve يمكنك اكتشاف ذلك في ثوانٍ: مبني على عتاد جاهز رخيص الثمن، يمكنك بسرعة اختبار أي نشاط لنظام ملفات USB وفهم ما يجري قبل فوات الأوان!
مع USBvalve يمكنك الحصول على تغذية راجعة فورية حول ما يحدث للقرص؛ ستعرض لك الشاشة ما إذا كان نظام الملفات المزوّر المبني على الجهاز قد تم الوصول إليه أو قراءته أو الكتابة عليه:
ومن الإصدار 0.8.0 يمكنك أيضًا استخدامه كمضيف USB لكشف أجهزة BADUSB:
هذا مثال على مصحح أخطاء BADUSB المتاح على المنفذ التسلسلي:
إذا كنت تفضل مقاطع الفيديو، يمكنك أيضًا إلقاء نظرة على عرضي التقديمي في Insomni'hack
ابتداءً من الإصدار 0.15.0، يتم دعم نسخة جديدة من Pi Pico Watch. لتجميع النسخة الجديدة، يجب إلغاء تعليق السطر #define PIWATCH في بداية الكود. العتاد عبارة عن لوحة ساعة قائمة على RP2040 مع شاشة TFT مقاس 1.28 بوصة. يمكنك العثور على مزيد من المعلومات هنا.
وهي أيضًا متوافقة تمامًا مع Waveshare RP2040-LCD-1.28.
docs: توثيق حول المشروع، مع عرض تقديمي يمكنك من خلاله إلقاء نظرة على جميع الميزات
firmware: برامج ثابتة مبنية مسبقًا لـ Raspberry Pi Pico. يمكنك فقط استخدامها ووميضها على اللوحة. لدينا عدة إصدارات مختلفة، لشاشات OLED ذات 32 أو 64 سطرًا، ولـ Pico 1 أو Pico2، و Pi Pico Watch، إلخ
PCB: ملفات Gerber إذا كنت تريد طباعة لوحة PCB المخصصة. إنها ليست إلزامية، يمكنك استخدام لوحتك الخاصة أو بناؤها على لوحة تجارب breadboard
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 (انظر المجلد والإصدارات).
بفضل Tz1rf لدينا أيضًا مقطعا فيديو رائعان: أحدهما يشرح عملية البناء خطوة بخطوة، والآخر يوضح كيفية رفع البرنامج الثابت واستخدام الأداة.
تقريبًا كل العمل يتم مباشرة على اللوحة بواسطة البرنامج، لذا كل ما عليك فعله هو ترتيب الاتصال بشاشة OLED للإخراج.
ابتداءً من الإصدار 0.8.0 من البرنامج الثابت، يمكن لـ USBvalve اكتشاف أجهزة HID (المستخدمة لكشف BADUSB). يتطلب هذا منفذ USB إضافيًا يعمل كمضيف. إذا لم تكن مهتمًا بهذا، يمكنك استخدام التعليمات القديمة في مجلد docs واستخدام نسخة PCB 1.1. وإلا فتابع مع نسخة PCB 1.2 (لدينا نسخة لـ USB-A أو USB-B، انظر المجلد).
USBH. هذا للنسخة A، ولكن توجد أيضًا نسخة لـ USB Micro-B إذا كنت تفضل ذلكبعض شاشات OLED لديها دبابيس GND و VCC مبادلة، لذا قمت ببناء PCB ليكون متوافقًا مع كلا النسختين:
على سبيل المثال إذا كانت شاشتك OLED لديها GND على PIN1 و VCC على PIN2 مثل هذا:
يجب عليك وضع بقعة لحام على هاتين الوسادتين في الجزء الخلفي من PCB:
وإلا يجب عليك العكس ووضع اللحام على الوسادات الأخرى:
إذا كنت تستخدم لوحة تجارب أو مجرد توصيلات، كل ما عليك فعله هو التأكد من توصيل الدبابيس الصحيحة بشاشة OLED ومنفذ USB المضيف.
التعيين كما يلي:
إذا كنت تريد استخدام وظائف DEBUG، يمكنك أيضًا وضع رأس على دبابيس SWD الثلاثة في أسفل اللوحة.
[!CAUTION] هذه اللوحة مخصصة لصناع الإلكترونيات ذوي الخبرة لا تستخدمها إذا لم تكن متأكدًا من قدرتك على التعامل معها!
[!NOTE] R7 و R8 غير متصلين فعليًا بأي شيء. تمت إضافتهما لأغراض تصحيح أخطاء الدائرة. لذلك لا يظهران في قائمة المواد BOM
USBpipe هي لوحة PCB مخصصة لهذا المشروع.
يمكنك العثور على كل ما تحتاجه في مجلد ./PCB/USBpipe/.
لوميض البرنامج الثابت، اتبع هذه الخطوات:
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/
//
// 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
سيتم وضع البرنامج الثابت بامتداد uf2 في مجلد USBvalve_out.
إذا كانت لديك أفكار أو تحسينات في ذهنك، أشجعك على فتح issue حتى نتمكن من تحسين المشروع معًا! شكرًا!
إذا كان لديك سؤال أو تحتاج إلى دعم، يمكنك فتح Issue هنا أو التواصل معي على Twitter/X @red5heep
أنشأ المجتمع بعض الفروع (forks) التي تضيف دعمًا للوحات أخرى، أو تعديلات أخرى. شكرًا للجميع الذين ساهموا في تطوير USBvalve. فيما يلي قائمة غير رسمية/غير مكتملة/غير مدعومة:
[!WARNING] تلقيت الكثير من الأسئلة حول USBvalve وأجهزة USB killer. USBvalve غير مصمم لاختبار هذه الأجهزة، فهو لا يحتوي على أي نوع من العزل أو الحماية، لذا إذا كنت تشك في أنك تتعامل مع أحد هذه الأجهزة، فاختبره بشيء آخر، وليس باستخدام USBvalve أو قد تتلف الجهاز أو نفسك أو الأشياء القريبة منك.