BadUSB

usbexec / ux — مُنفِّذ DuckyScript

ينفّذ سكربتات حقن ضغطات المفاتيح. متوافق مع DuckyScript v1 الخاص بـ Flipper Zero. ويمكن تسليم السكربت نفسه عبر USB HID (وصّل الكابل) أو BLE HID (يعمل T-Deck لوحةَ مفاتيح Bluetooth) — انظر قسم BadBLE أدناه.

CMD> ux demo                      # USB، عرض مدمج (يكتشف نظام التشغيل ويرسم العنقاء)
CMD> ux /apps/badusb/scripts/payload.txt       # USB، من بطاقة SD
CMD> ux ble                       # BLE، قائمة تفاعلية (الوضع / الهدف / الاسم / السكربت)
CMD> ux ble demo                  # BLE، لوحة مفاتيح جديدة
CMD> ux ble clone 3 payload.txt   # BLE، انتحال الجهاز رقم 3 من آخر مسح sbl
CMD> ux ble name "Magic Keyboard" demo   # BLE، اسم إعلان مخصّص

تقع السكربتات في /apps/badusb/scripts/ على بطاقة SD (تُنشَأ عند أوّل إقلاع).

العرض المدمج (ux demo) — واعٍ بنظام التشغيل

يكتب العرض عنقاء الأنقاء برسم ASCII. عبر USB يقوم أولًا باكتشاف نظام التشغيل (فحص مؤشّر NumLock، نفس طريقة ux auto) ويفتح الهدف المناسب قبل الرسم:

النظام ما يفتحه
Windows Win+Rnotepad
macOS Cmd+Space (Spotlight) ← TextEditCmd+N
Linux Ctrl+Alt+T (طرفية) ← أمر cat (heredoc) يطبع الرسم

لا يستطيع ux ble demo قراءة مؤشّر NumLock عبر BLE، فيرجع إلى مقدّمة Windows.

الأوامر المدعومة

الأمر الوصف
REM / // تعليق
DELAY <ms> انتظار
DEFAULT_DELAY <ms> تأخير بعد كل سطر
STRING <text> كتابة نصّ
STRINGLN <text> كتابة نصّ + Enter
REPEAT <n> تكرار السطر السابق
HOLD <key...> ضغط وإبقاء مفاتيح/معدّلات — لا تُطلَق
RELEASE إطلاق كل ما أبقاه HOLD
WAIT_FOR_BUTTON_PRESS إيقاف حتى نقر كرة التتبّع
GUI CTRL ALT SHIFT المعدّلات
ENTER BACKSPACE TAB ESC DEL مفاتيح خاصّة
UP DOWN LEFT RIGHT F1F24 التنقّل + مفاتيح الوظائف

تركيبات المعدّلات

الصيغتان متكافئتان:

CTRL ALT DELETE          # مفصولة بمسافات
CTRL-ALT DELETE          # موصولة (صيغة Flipper Zero)

الإلغاء

اضغط q على T-Deck — يتوقّف السكربت عند حدّ DELAY التالي.


BadBLE — ux عبر BLE HID

سبّق أي استدعاء ux بـ ble لتشغيل DuckyScript عبر Bluetooth LE HID بدل USB. يُعلن T-Deck نفسه لوحةَ مفاتيح BLE؛ وبمجرّد اتصال مضيف، يكتب المحرّك نفسه الحمولة. بلا كابل.

ux ble                              # قائمة تفاعلية (موصى به)
ux ble demo                         # لوحة مفاتيح جديدة، تشغيل العرض
ux ble <script>                     # لوحة مفاتيح جديدة، تشغيل سكربت SD
ux ble name "<Name>" <script>       # انتحال اسم إعلان مخصّص
ux ble clone <mac|#> <script>       # استنساخ MAC بأسلوب BLESA (انظر أدناه)

الوضع التفاعلي (ux ble)

ux ble المجرّد يفتح مسارًا موجّهًا، بلا صياغة تُحفَظ:

  1. الوضع — اتصال (لوحة جديدة) أو انتحال (استنساخ جهاز مرتبط)
  2. الهدف (للانتحال فقط) — جدول بأسلوب sbl يعرض MAC الكامل (# NAME RSSI AT MAC، مرتّبًا بـ RSSI). يعرض القائمة نفسها من آخر مسح sbl؛ و[u] يجري مسحًا جديدًا. والصفوف الخضراء */rnd قابلة للاستنساخ فعلًا (عنوان static-random)؛ أمّا الرمادية pub/RPA فبالاسم فقط. اضغط [i] لفحص GATT للجهاز المحدَّد بـ bi (يكشف اسمه الحقيقي وخدماته ووضعيته الأمنية) دون مغادرة المُنتقي.
  3. الاسم — يستخدم الانتحال تلقائيًّا اسم الهدف الحقيقي المُعلَن (لا افتراضيًّا يكشف النسخة). فإن كان الهدف بلا اسم، ظهرت قائمة أسماء معقولة (Keyboard / Magic Keyboard / … / مخصّص)؛ وإن كنت قد فحصته بـ [i] وكشف اسمًا حقيقيًّا (GAP 0x2A00) عُرِض محدَّدًا مسبقًا (found).
  4. السكربت — اختر ملفًّا من /apps/badusb/scripts/ أو العرض المدمج

كرة التتبّع أو 1/2 للاختيار، Enter/نقر للاختيار، q للعودة شاشة.

إن انقطع مضيف BLE في منتصف الحمولة، يُلغى التشغيل (Host disconnected.) بدل الكتابة في وصلة ميّتة.

وضعان

الوضع الأمر كيف يصل للمضيف
اتصال (جديد) ux ble … يُعلن لوحة جديدة؛ فتتّصل بها الضحية (بلا PIN، بلا ارتباط)
انتحال (استنساخ) ux ble clone <mac\|#> … ينتحل لوحة مرتبطة فيعيد المضيف الاتصال بها تلقائيًّا
  • بلا PIN، بلا ارتباط — اتصل، احقن، اقطع، لا شيء يبقى على المضيف. (يتطلّب HID-over-GATT وصلة مشفّرة، فيستخدم اقتران Just Works بلا ارتباط.)
  • MAC عشوائي — عنوان عشوائي جديد كل جلسة ux ble، فلا يترك T-Deck هويّة Bluetooth ثابتة. والاستنساخ الناجح يستخدم MAC الهدف بالضبط.
  • لوحة btkbd (bk) غير متأثّرة — تبقى بعنوانها الثابت المرتبط.

الاستنساخ / BLESA — حدود (بصراحة)

ينتحل الاستنساخ MAC + نوع العنوان + الاسم المُعلَن + اسم GAP للوحة مرتبطة فيعيد المضيف المقترن بها الاتصال. ولا يعمل إلّا حين:

  1. يستخدم الهدف عنوان static-random — يرفض متحكّم ESP32 العناوين العامّة و RPA، فتلك بالاسم فقط (يعرض المُنتقي * على القابلة للاستنساخ؛ وإلّا يقول MAC spoof FAILED (RPA/public)).
  2. المضيف معرّض لـ BLESA / لا يعيد المصادقة عند إعادة الاتصال — الحُزَم المُرقَّعة تطلب المفتاح الأصلي وتُسقِط الوصلة.
  3. الجهاز الحقيقي مطفأ / خارج النطاق — حتى يعيد المضيف الاتصال بـ T-Deck. ولا يستطيع ESP32 تشويش الجهاز الحقيقي.

موسوم [EXP]. وهو أداة تدقيق عزل/مصادقة إعادة اتصال، لا اختطاف مضمون.