
اختبار USB بسهولة

AutoGadgetFS هو إطار عمل مفتوح المصدر يتيح للمستخدمين تقييم أجهزة USB والمضيفين/المشغلات/البرامج المرتبطة بها دون الحاجة إلى معرفة متعمقة ببروتوكول USB. الأداة مكتوبة بلغة Python3 وتستخدم RabbitMQ والوصول عبر WiFi لتمكين الباحثين من إجراء تقييمات أمنية عن بُعد لأجهزة USB من أي مكان في العالم. من خلال الاستفادة من ConfigFS، يتيح AutoGadgetFS للمستخدمين استنساخ الأجهزة ومحاكاتها بسرعة، مما يلغي الحاجة إلى التعمق في تفاصيل كل تطبيق. كما يسمح الإطار للمستخدمين بإنشاء أدوات اختبار تشويش خاصة بهم فوقه.
أ. اختبار الجهاز فقط
ب. إعداد agfs الأدنى في المنتصف
ج. إعداد agfs الكامل في المنتصف مع دعم التصحيح```bash Device testing only:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/devtest.jpeg" width="450" height="187" /></div>
<a name="MMITM"/>```bash
Minimal agfs in the middle setup:

```bash Complete agfs in the middle setup with debugging support:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/scenario2.jpeg"/></div>
---
<a name="Usbdev"/>
### دعم فئة أجهزة USB:
[✔️] أجهزة USB HID مدعومة بالكامل (رجل في المنتصف)
[⚠️] اختبار الجهاز فقط .. جميع أجهزة USB (بدون رجل في المنتصف)
[⏳] الإصدارات المستقبلية... جميع أجهزة USB (رجل في المنتصف)
---
<a name="Caps"/>
### الإمكانيات:
1. البحث عن جهاز USB واختياره والاتصال به بسهولة.
1. محاكاة أي جهاز USB HID.
1. إجراء AGFS في الوسط لاعتراض أجهزة HID (حفظ الاتصال على القرص).
1. اعتراض الجهاز (أي جهاز).
1. تسمح لك أدوات Fuzz متعددة بتشويش جهاز أو مضيف.
1. أدوات تشويش عشوائية (بحزم ذات طول ثابت أو عشوائي).
1. أدوات تشويش ذكية تتعلم من اتصالات USB السابقة.
1. أداة تشويش وصفية لتحديد البايتات المراد تشويشها مع ترك باقي الحزمة كما هي.
1. أداة تشويش الأدوات (Gadget Fuzzer).
1. أداة تشويش تسلسلية.
1. عداد نقل التحكم.
1. إعادة تشغيل الحزم من ملف.
1. إعادة تشغيل الحزم من التقاط USBLyzer محفوظ.
1. طريقة بصرية لعرض الحزم لتسهيل الهندسة العكسية للاتصال.
1. تنبيهات لجهاز في وضع DFU، أو إذا كان الجهاز يسرب معلومات.
1. يمكن أن يكون جهاز USB والمضيف في أي مكان على الإنترنت.
1. مراقبة التغييرات المفاجئة في الواجهة.
---
<a name="Road"/>
### خريطة الطريق:
1. اعتراض طلبات نقل التحكم إلى جهاز والرد عليها.
1. MITM ومحاكاة جميع أنواع الأجهزة.
1. واجهة قائمة على وحدة التحكم / QT.
1. دعم المزيد من الواجهات/نقاط النهاية على RPI zero W.
1. دعم المزيد من اللوحات مثل greatfet.
1. الانتقال إلى لوحة مخصصة.
1. العمل على جعل Raspberry pi تدعم محاكاة جهاز USB بشكل كامل مع جميع الواجهات.
1. ربط الحزم المرسلة والمستقبلة عبر أرقام التسلسل.
---
<a name="Installation"/>
### التثبيت:
<a name="Linux"/>
### آلة لينكس:
* ملاحظة: WSL/WSL2 غير مدعوم بسبب مشاكل في تمرير USB.
* قم بتثبيت Python3 و ipython3 و git و pip وخادم rabbitMQ
```bash
sudo apt install python3 ipython3 git python3-pip rabbitmq-server dfu-util
sudo service rabbitmq-server start
```
* قم باستنساخ المستودع
```bash
git clone https://github.com/ehabhussein/AutoGadgetFS
cd AutoGadgetFS
```
* قم بتثبيت المتطلبات
```bash
sudo -H pip3 install -r requirements.txt
```
* قم بتخفيض إصدار prompt toolkit لتجربة ipython أفضل:
```bash
sudo python3 -m pip install prompt-toolkit~=2.0
```
* قم بتمكين الواجهة الويب لـ rabbitMQ
```bash
sudo rabbitmq-plugins enable rabbitmq_management
http://localhost:15672/ للوصول إلى الواجهة الويب
```
* تسجيل الدخول إلى الواجهة الويب باستخدام بيانات الاعتماد *guest:guest*
* ملاحظة: إذا لم تكن تقوم بتثبيت rabbitMQ على `localhost` فقم بإضافة المستخدم التالي وتسجيل الدخول به:
```bash
sudo rabbitmqctl add_user autogfs usb4ever
sudo rabbitmqctl set_user_tags autogfs administrator
```
* قم بتحميل ملف تكوين rabbitMQ
* في علامة التبويب العامة، انتقل إلى الأسفل لاستيراد التعريفات
* قم بتحميل الملف الموجود في: *rabbitMQbrokerconfig/rabbitmq-Config.json*
```bash
sudo service rabbitmq-server restart
```
* اختبر التثبيت
```python
sudo ipython3
Python 3.7.7 (default, Apr 1 2020, 13:48:52)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.9.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import libagfs
In [2]: x = libagfs.agfs()
***************************************
AutoGadgetFS: USB testing made easy
***************************************
Enter IP address of the rabbitmq server: 127.0.0.1
In [3]: exit
sudo `python3` agfsconsole.py
***************************************
AutoGadgetFS: USB testing made easy
***************************************
Enter IP address of the rabbitmq server: 127.0.0.1
Give your project a name?!:
``` ```
* Patch Pyusb langID ( Not needed unless you get pyusb errors for langID ):
* Edit the file `/usr/local/lib/python3/dist-packages/usb/util.py`
* make changes to the `def get_string` method to look like below:
```python
if 0 == len(langids):
return "Error Reading langID"
#raise ValueError("The device has no langid")
if langid is None:
langid = langids[0]
elif langid not in langids:
return "Error Reading langID"
#raise ValueError("The device does not support the specified langid")
```
* If you prefer to use `patch` apply the following patch to the file: `AutoGadgetFS/pyusb_patches/pyusb_langid.patch`
---
<a name="Rasp"/>
### Raspberry Pi Zero W:
* Obtain a copy of [Raspian Lite Edition](https://downloads.raspberrypi.org/raspios_lite_armhf_latest)
* Burn the Image to the SD card using [BalenaEtcher](https://www.balena.io/etcher/)
* Mount the SD card on your machine and make the following changes:
* In the `/path/to/sdcard/boot/config.txt` file add to the very end of the file:
```bash
enable_uart=1
dtoverlay=dwc2
```
* In the `/path/to/sdcard/boot/cmdline.txt` add right after `rootwait`
```bash
modules-load=dwc2
```
* it should look like this make sure its on the same line: