
قم بتكوين Pi Zero 2W الخاص بك ليكون BadUSB
منصة هجوم BadUSB / HID قابلة للبرمجة مبنية على Raspberry Pi Zero 2 W. يتعرف Pi على أنه جهاز USB مركب (لوحة مفاتيح بالإضافة إلى وحدة تخزين كبيرة للقراءة فقط اختيارية) وينفذ حمولات على غرار Ducky-Script ضد المضيف الذي يتم توصيله به. مصممة لاستخدامات الفريق الأحمر المصرح بها، واختبارات الاختراق، ومسابقات CTF.
⚠️ إشعار قانوني. استخدم فقط على الأنظمة التي تمتلكها أو لديك إذن كتابي صريح لاختبارها. الوصول غير المصرح به غير قانوني في معظم الدول، والتظاهر بعدم المعرفة لن يفيد.
configured لـ UDC — لا يتم إطلاق حمولات خاطئة عند الإقلاع.LAYOUT.IF / ELSE، WHILE، HOLD / RELEASE، INJECT_MOD، مولدات RANDOM_*، STRING_BLOCK / STRINGLN_BLOCK، DEFINE.ExecStop الذي يفك الأداة بشكل نظيف. لا توجد حالة متبقية من configfs، وإعادة التشغيل تعمل دون إعادة إقلاع./dev/hidg0 — لا توجد عُقد جهاز قابلة للكتابة للجميع.+----------------+ كابل USB +-------------+
| Raspberry Pi | ===================>>> | المضيف |
| Zero 2 W | (Pi يحاكي HID + | (الهدف) |
| (هذا الجهاز) | محرك اختياري) | |
+----------------+ +-------------+
|
| /home/pi/pi-badusb/
|
+-- badusb.service ----> monitor_and_run.py
|
| عند `state == configured`:
v
run_payload.py
|
v
/dev/hidg0 (أداة USB HID)
badusb.service بتشغيل gadget_setup.sh، الذي يستخدم configfs/libcomposite لتكوين أداة USB مع وظيفة لوحة مفاتيح HID و (اختياريًا) LUN تخزين كبير مدعوم بملف صورة مسطح في /var/badusb/storage.img.monitor_and_run.py. يستطلع حالة /sys/class/udc/<udc>/state وينتظر configured — حالة USB-Spec التي تعني أن المضيف قد عدّد الأداة بنجاح. (نحن لا نستخدم وجود /dev/hidg0 كإشارة: هذا صحيح منذ اللحظة التي ترتبط فيها الأداة بـ UDC عند الإقلاع، بغض النظر عما إذا كان أي شيء موصولاً.)run_payload.py، الذي يوزع payload.txt ويكتب تقارير HID إلى /dev/hidg0.configured.| المكون | ملاحظة |
|---|---|
| Raspberry Pi Zero 2 W | تم اختباره على مراجعة الأجهزة 2026-05. يعمل Pi Zero W الأقدم مع برنامج تشغيل BCM2835 dwc_otg من حيث المبدأ أيضًا، لكن هذا README يفترض 2 W مع dwc2. |
| كابل micro-USB إلى USB-A | أو محول على شكل "محرك أقراص USB" يسمح للPi بالتوصيل مباشرة بمنفذ مضيف. |
| اختياري: شاحن منفصل | إذا كنت ترغب في تشغيل Pi من مصدر غير المضيف حتى يتمكن المستمع من الإقلاع قبل توصيله بهدف (وإلا فإن منفذ المضيف يوفر الطاقة). |
يحتوي Pi Zero 2 W على منفذي micro-USB:
PWR IN — الطاقة فقط، لا يعرض خطوط بيانات USB لكتلة dwc2 OTG.USB — منفذ بيانات OTG؛ هذا هو المكان الذي توصل به إلى الهدف.| المتطلب | لماذا |
|---|---|
| Raspberry Pi OS (Debian Bookworm أو Trixie، 64 بت Lite موصى به) | يكتب البرنامج النصي للتثبيت /boot/firmware/... على Bookworm+ ويعود إلى /boot/... على الصور الأقدم. |
| Python 3 | يأتي مع Pi OS. |
mkfs.vfat | لتهيئة صورة التخزين الكبير الخلفية في التشغيل الأول. قم بتعطيله إذا ألغيت التخزين الكبير. |
| وصول root للإعداد | يلمس systemd و udev و /boot/firmware/config.txt. |
انسخ المستودع أو استنسخه إلى Pi، ثم قم بتشغيل المثبِّت:
git clone http://your-gitea/admin/Pi-Zero-2W-Bad-USB.git /home/pi/pi-badusb
cd /home/pi/pi-badusb
sudo ./install.sh
sudo reboot
بعد إعادة الإقلاع، قم بتمكين الخدمة وتشغيلها:
sudo systemctl enable --now badusb.service
journalctl -u badusb -f
install.sh غير مؤثرة — أعد تشغيلها كلما غيرت ملفات المشروع. تقوم بـ:
/boot/firmware (Bookworm+) مقابل /boot (الأقدم).dtoverlay=dwc2,dr_mode=otg نشط تحت كتلة [all] في config.txt. الإعدادات الافتراضية لـ Raspberry Pi Imager تضع هذا السطر داخل مرشح [cm5] الذي لا ينطبق على Pi Zero 2 W؛ يضيف المثبِّت تجاوزًا مُوسومًا بحيث لا تكرره عمليات إعادة التشغيل.modules-load=dwc2 موجود في cmdline.txt.g_ether لا يزال موجودًا في cmdline.txt (يسرق UDC من libcomposite ويكسر وضع الأداة)./etc/systemd/system/badusb.service./etc/udev/rules.d/99-badusb-hidg.rules بحيث يكون /dev/hidg0 قابلًا للكتابة للمجموعة بواسطة plugdev.pi إلى plugdev./var/badusb/ لصورة التخزين الكبير الخلفية.# بدء / إيقاف / إعادة تشغيل
sudo systemctl start badusb
sudo systemctl stop badusb
sudo systemctl restart badusb # آمن أثناء التوصيل
# مراقبة مباشرة
journalctl -u badusb -f
# تعطيل التشغيل التلقائي عند الإقلاع
sudo systemctl disable badusb
# ضبط التوقيتات (ينشئ إدراج تجاوز)
sudo systemctl edit badusb
# (الصق كتلة [Service] مع Environment="BADUSB_REARM_COOLDOWN_S=8" إلخ)
sudo systemctl restart badusb
تعتمد الخدمة على sys-kernel-config.mount ووجود UDC، لذا لا يمكنها إطلاق الحمولات قبل أن تكون الأداة جاهزة فعليًا.
تحرير الحمولة لا يتطلب إعادة تشغيل — تتم قراءة payload.txt من جديد عند كل توصيل.
payload.txt موجود في دليل التثبيت. مرجع الأوامر الكامل موجود في payload_commands.md.
REM افتح مربع حوار التشغيل واكتب تحية عبر Notepad
LAYOUT US
GUI r
DELAY 1500
STRING notepad
ENTER
DELAY 2500
STRINGLN مرحبًا من Pi Zero 2 W
VAR $USER="alice"
VAR $COUNT=0
WHILE $COUNT < 3
STRINGLN مرحبًا $USER (التكرار $COUNT)
VAR $COUNT = $COUNT + 1
END_WHILE
IF $USER == "alice"
STRINGLN تم المطابقة
ELSE
STRINGLN لم يتم المطابقة
END_IF
تمر التعبيرات الرياضية في VAR عبر مقيم آمن يعمل على ast — لا أسماء، لا استدعاءات، لا وصول إلى سمات، فقط القيم الرقمية و + - * / // % **.
HOLD SHIFT
STRINGLN هذا السطر مكتوب بأحرف كبيرة
RELEASE SHIFT
REM أمسك Ctrl+Shift (0x01 + 0x02) واضغط A
INJECT_MOD 0x03
STRING a
REM تحرير جميع المعدِّلات
INJECT_MOD 0x00