
كشف نشاط USB أثناء التشغيل

[!NOTE] USBvalve الإصدار 1.0.0
تمت إعادة كتابة التطبيق بالكامل:
- تم الابتعاد عن بيئة Arduino IDE، والآن الكود مكتوب لـ Pi Pico SDK
- تم تقليل الاعتماد على المكتبات الخارجية بشكل كبير
- أصبح دعم مضيف USB لأجهزة السرعة المنخفضة أكثر قوة (ATTiny85، EvilCrow، إلخ)
- العتاد والوظائف لم تتغير تقريبًا، راجع الملاحظات أدناه للحصول على التفاصيل
أنا متأكد من أنه، مثلي، طُلب منك وضع محرك USB الخاص بك في جهاز غير معروف... ثم يأتي الشك:
ماذا حدث لمحرك USB المسكين الخاص بي، خلف الكواليس؟ هل يسرق ملفاتي؟ هل يشفرها؟ أم فقط يثبّت برمجية خبيثة؟ مع USBvalve يمكنك اكتشاف ذلك في ثوانٍ: مبني على عتاد رخيص جدًا متوفر تجاريًا، يمكنك بسرعة اختبار أي نشاط لنظام ملفات USB وفهم ما يحدث قبل فوات الأوان!
مع USBvalve يمكنك الحصول على تغذية راجعة فورية حول ما يحدث للمحرك؛ ستعرض لك الشاشة ما إذا كان نظام الملفات المزيف المبني على الجهاز يتم الوصول إليه أو قراءته أو الكتابة عليه:
وابتداءً من الإصدار 0.8.0 يمكنك أيضًا استخدامه كمضيف USB لاكتشاف أجهزة BADUSB:
هذا مثال على مصحح BADUSB المتاح على المنفذ التسلسلي:
إذا كنت تفضل الفيديوهات، يمكنك أيضًا إلقاء نظرة على عرضي في Insomni'hack
ابتداءً من الإصدار 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.
إذا كنت تريد بناء نسختك الخاصة، فأنت بحاجة إلى:
في إصدارات 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، انظر المجلد).
USBH. هذا للإصدار A، لكن هناك إصدار لـ USB Micro-B أيضًا إذا كنت تفضل ذلكبعض شاشات OLED لديها أطراف GND و VCC متبادلة، لذلك بنيت لوحة PCB لتكون متوافقة مع كلا الإصدارين:
على سبيل المثال إذا كانت شاشتك OLED لديها GND على الطرف PIN1 و VCC على الطرف PIN2 مثل هذا:
يجب عليك وضع قطعة من اللحام على هاتين الوسادتين على الجزء الخلفي من لوحة PCB:
وإلا فيجب عليك العكس ووضع اللحام على الوسادات الأخرى:
إذا كنت تستخدم لوحة تجارب أو مجرد توصيلات، كل ما عليك فعله هو التأكد من توصيل الأطراف الصحيحة بشاشة OLED ومنفذ USB المضيف.
التخطيط كالتالي:
إذا كنت تريد استخدام وظائف DEBUG، يمكنك أيضًا وضع موصل على أطراف SWD الثلاثة في أسفل اللوحة.
[!CAUTION] لوحة PCB هذه للمصنّعين الإلكترونيين ذوي الخبرة لا تستخدمها إذا لم تكن متأكدًا من قدرتك على التعامل معها!
[!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/
//
#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 يبني بيئة بناء كاملة ويجمّع البرنامج الثابت.
أدخل الأوامر التالية في مجلد 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 وإلا قد تتلف الجهاز أو نفسك أو الأشياء القريبة منك.