
اختبار 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:
```bash
console=serial0,115200 console=tty1 root=PARTUUID=6c586e13-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2
```
* Enable ssh:
* in the `/path/to/sdcard/boot` directory create an empty file name ssh:
```bash
sudo touch /path/to/sdcard/boot/ssh
```
* Enable Wifi:
* in the `/path/to/sdcard/boot` directory create an file named `wpa_supplicant.conf`:
```bash
sudo vim /path/to/sdcard/boot/wpa_supplicant.conf
```
* Add the following contents:
```bash
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US
network={
ssid="<your wifi SSID>"
psk="<your wifi password>"
key_mgmt=WPA-PSK
}
```
* Unmount the SD card and place it back into the Raspberry Pi Zero and power it on.
* Copy the content of `AutogadgetFS/Pizero/` to the Pi zero: `username: pi` & `password: raspberry`
```bash
cd AutogadgetFS/Pizero/
scp gadgetfuzzer.py removegadget.sh requirements.txt router.py pi@<pi-ipaddress>:/home/pi
```
* SSH into the PI Zero and setup requirements for AutoGadgetFS:
```bash
ssh pi@<pi-ip-address>
chmod +x removegadget.sh
sudo apt update
sudo apt install python3 python3-pip
sudo -H pip3 install -r requirements.txt
```
* Upgrading the latest kernel and adding modules (* This step is optional for the current release):
( This will take a very long time compiling on the Pi Zero, unless you choose to cross compile the kernel see [Compiling options](https://www.raspberrypi.org/documentation/linux/kernel/building.md))
```bash
sudo bash
apt install git bc bison flex libssl-dev make libncurses5-dev screen
screen
mkdir Downloads
cd Downloads/
git clone --depth=1 https://github.com/raspberrypi/linux
cd linux/
make bcmrpi_defconfig
make menuconfig
```
* Enable the Modules and save the config:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/allgadgets.png"/></div>
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/allgadgets2.png"/></div>
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/allgadgets3.png"/></div>
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/allgadgets4.png"/></div>
* Build and use the kernel:
```bash
make zImage modules dtbs
make modules_install
cp arch/arm/boot/dts/*.dtb /boot/
cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
cp arch/arm/boot/dts/overlays/README /boot/overlays/
cp arch/arm/boot/zImage /boot/kernel.img
reboot
```
#### And you're done!
---
<a name="Tutorial"/>
### AutoGadgetFS tutorial:
[Click to visit the tutorial](https://docs.agfs.io/)
---
<a name="Screens"/>
### Screenshots:
##### Man in the Middle:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/mitm.png" /></div>
#### USB device fuzzing:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/devfuzzer.png" /></div>
#### Host side fuzzing with code covereage:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/codecov.png" /></div>
#### Fuzzer based on a selection of bytes:
<div style="text-align:center"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/selectivefuzz.png" /></div>
#### Smart fuzzer based on learning traffic:
```python
In [44]: x.devSmartFuzz(engine="smart",samples=5,filename="/home/raindrop/PycharmProjects/AutoGadgetFs/binariesdb/Nud-Nuvoton-1046-20764-1590421333.5169587-Nuvoton-1046-20764-1590421600.8067274-device.bin")
[+]الإحصائيات العامة
مجموعة الأحرف الكاملة : !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
مجموعة الأحرف المستبعدة : !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ghijklmnopqrstuvwxyz{|}~
مجموعة الأحرف النهائية : 0123456789abcdef
طول الكلمة : 128
نسبة استخدام الأحرف الصغيرة : 92%
مواقع فهارس الأحرف الصغيرة : [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 121, 122, 124, 125, 127]
نسبة استخدام الأحرف الكبيرة : 0%
مواقع فهارس الأحرف الكبيرة : []
نسبة استخدام الأرقام : 96%
مواقع فهارس الأرقام : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 123, 126]
نسبة استخدام الأحرف غير الأبجدية الرقمية : 0%
مواقع فهارس الأحرف غير الأبجدية الرقمية : []
إحصائيات العداد : الأحرف الكبيرة: 0 , الأحرف الصغيرة: 133071, الأرقام:212017 , غير الأبجدية الرقمية:0
ترددات جميع الأحرف :
الحرف:5 تم العثور عليه:5012 مرة
الحرف:2 تم العثور عليه:22563 مرة
الحرف:3 تم العثور عليه:12197 مرة
الحرف:8 تم العثور عليه:15008 مرة
الحرف:4 تم العثور عليه:13275 مرة
الحرف:0 تم العثور عليه:98056 مرة
الحرف:1 تم العثور عليه:17861 مرة
الحرف:f تم العثور عليه:87823 مرة
الحرف:d تم العثور عليه:7221 مرة
الحرف:7 تم العثور عليه:9614 مرة
الحرف:a تم العثور عليه:11148 مرة
الحرف:6 تم العثور عليه:10472 مرة
الحرف:b تم العثور عليه:8189 مرة
الحرف:9 تم العثور عليه:7959 مرة
الحرف:c تم العثور عليه:9172 مرة
الحرف:e تم العثور عليه:9518 مرة
***********************
تم التوليد:5 حزم
***********************
Out[44]:
['5608305852bf2ffd61770e2c827542f20be0b0fcba09db916bd07e1734b04cb0352b1d278068064d19f033bfad6fa90e53d865693fd4fee0214f00000eb0aa2c',
'3b083595f276e2f1353a535c32f0f59516fc9328f7673bb80262c4da11c93683afe6dcff8a7a83018d78f41498a0da4d141ebd39c361b1724f2b00000eb0aa2c',
'0120961963495c4dab9470738b497eddde07b0d70b357795ad9554d7964761969a6d997205e17eada6fa84eb33dcfb11412f75e04c195001283900000eb0aa2c',
'091065d52127bbc6e840e02f8e1316f1c4d9c92a23931c00cdbb8c158368852ef8fabd461b98812b51ec84e1ccc5c04aaa366fbafabec623bd3500000eb0aa2c',
'7300cc61151b7af27a578e766f49bebb2de68c48b37a00df1030ae464f456928eedd035303e697208bf58217af728a2a346fda5c8aef0335b82e00000eb0aa2c'
In [46]: https://raw.githubusercontent.com/ehabhussein/autogadgetfs/HEAD/x.edap.packets
Out[46]:
['5608305852bf2ffd61770e2c827542f20be0b0fcba09db916bd07e1734b04cb0352b1d278068064d19f033bfad6fa90e53d865693fd4fee0214f00000eb0aa2c',
'3b083595f276e2f1353a535c32f0f59516fc9328f7673bb80262c4da11c93683afe6dcff8a7a83018d78f41498a0da4d141ebd39c361b1724f2b00000eb0aa2c',
'0120961963495c4dab9470738b497eddde07b0d70b357795ad9554d7964761969a6d997205e17eada6fa84eb33dcfb11412f75e04c195001283900000eb0aa2c',
'091065d52127bbc6e840e02f8e1316f1c4d9c92a23931c00cdbb8c158368852ef8fabd461b98812b51ec84e1ccc5c04aaa366fbafabec623bd3500000eb0aa2c',
'7300cc61151b7af27a578e766f49bebb2de68c48b37a00df1030ae464f456928eedd035303e697208bf58217af728a2a346fda5c8aef0335b82e00000eb0aa2c']```
#### Help method:
```python3
In [15]: x.help("")
الطرق المدعومة حالياً:
__________________________________________________________________________________________________________________________________________________________________
الطريقة ||-->الوصف
----------------------------------------------------------------------------------------------------------------------------
MITMproxy ||-->هذه الطريقة تنشئ اتصالاً بـ RabbitMQ وتستمع للرسائل المستلمة على قائمة todev
____________________________________________________________________________________________________________________________
MITMproxyRQueues ||-->هذه الطريقة تقرأ من قائمة todev وترسل الطلب إلى الجهاز نفسه.
____________________________________________________________________________________________________________________________
SmartFuzz ||-->هذه الطريقة تولد حزمًا بناءً على ما تعلمته من التنصت من المضيف أو الجهاز
____________________________________________________________________________________________________________________________
chgIntrfs ||-->تتيح لك هذه الطريقة تغيير واختيار واجهة أخرى
____________________________________________________________________________________________________________________________
clearqueues ||-->هذه الطريقة تمسح جميع قوائم الانتظار في RabbitMQ التي تم إعدادها
____________________________________________________________________________________________________________________________
clonedev ||-->لا تحتاج هذه الطريقة إلى أي معاملات، فهي تحفظ نسخة احتياطية من الجهاز في حالة احتجت لمشاركتها أو استخدامها لاحقًا.
____________________________________________________________________________________________________________________________
createctrltrsnfDB ||-->تنشئ قاعدة بيانات SQLite تحتوي على القيم التي تم تعدادها من تعداد تحويل التحكم
____________________________________________________________________________________________________________________________
createdb ||-->تنشئ جدول SQLite والأعمدة من لقطات USBlyzer
____________________________________________________________________________________________________________________________
decodePacketAscii ||-->تعمل هذه الطريقة على فك تشفير بايتات الحزمة إلى نص Ascii
____________________________________________________________________________________________________________________________
describeFuzz ||-->تتيح لك هذه الطريقة وصف حزمة واختيار البايتات التي سيتم التشويش عليها
____________________________________________________________________________________________________________________________
devEnumCtrltrnsf ||-->تقوم هذه الطريقة بتعداد جميع المجموعات الممكنة لطلب تحويل التحكم
____________________________________________________________________________________________________________________________
devReset ||-->تقوم هذه الطريقة بإعادة تعيين الجهاز
____________________________________________________________________________________________________________________________
devWrite ||-->لاستخدام ذلك مع طريقة للكتابة على جهاز، تأكد من تشغيل startSniffReadThread(self,endpoint=None, pts=None, queue=None,channel=None)
____________________________________________________________________________________________________________________________
devctrltrnsf ||-->تتيح لك هذه الطريقة إرسال طلبات تحويل تحكم إلى الجهاز الهدف
____________________________________________________________________________________________________________________________
deviceInfo ||-->يجلب المعلومات الكاملة فقط لأي USB متصل بالمضيف
____________________________________________________________________________________________________________________________
deviceInterfaces ||-->يجلب جميع الواجهات ونقاط النهاية على الجهاز
____________________________________________________________________________________________________________________________
devrandfuzz ||-->تتيح لك هذه الطريقة إنشاء حزم بحجم ثابت أو عشوائي تم إنشاؤها باستخدام urandom
____________________________________________________________________________________________________________________________
devseqfuzz ||-->تتيح لك هذه الطريقة إنشاء حزم متزايدة بالتسلسل وإرسالها إلى الجهاز
____________________________________________________________________________________________________________________________
findSelect ||-->تقوم هذه الطريقة بتعداد جميع أجهزة USB المتصلة وتسمح لك بتحديدها كجهاز هدف بالإضافة إلى نقاط النهاية الخاصة به
____________________________________________________________________________________________________________________________
help ||-->طريقة المساعدة في AutogadgetFS
____________________________________________________________________________________________________________________________
hostwrite ||-->تكتب هذه الطريقة حزمًا إلى المضيف إما مستهدفة برنامجًا أو برنامج تشغيل يتحكم في الجهاز
____________________________________________________________________________________________________________________________
hstrandfuzz ||-->تتيح لك هذه الطريقة إنشاء حزم بحجم ثابت أو عشوائي تم إنشاؤها باستخدام urandom وإرسالها إلى قائمة المضيف
____________________________________________________________________________________________________________________________
monInterfaceChng ||-->طريقة مسؤولة عن مراقبة الواجهات للتغييرات، يتم استدعاؤها من def startMonInterfaceChng(self)
____________________________________________________________________________________________________________________________
newProject ||-->ينشئ اسم مشروع جديد إذا كنت تختبر شيئًا آخر
____________________________________________________________________________________________________________________________
releasedev ||-->يحرر الجهاز ويعيد إرفاق برنامج تشغيل النواة
____________________________________________________________________________________________________________________________
removeGadget ||-->تزيل هذه الطريقة الأداة من RaspberryPI
____________________________________________________________________________________________________________________________
replaymsgs ||-->تبحث هذه الطريقة في قاعدة البيانات المحللة من USBLyzer وتعطيك خيار إعادة تشغيل رسالة أو جميع الرسائل من المضيف إلى الجهاز
____________________________________________________________________________________________________________________________
searchmsgs ||-->تتيح لك هذه الطريقة البحث واختيار جميع الرسائل وفقًا لنمط تم حفظه من إنشاء قاعدة بيانات USBlyzer
____________________________________________________________________________________________________________________________
setupGadgetFS ||-->إعداد متغيرات لـ gadgetFS: مخصص للينكس فقط، على Raspberry Pi Zero الخيار الأفضل
____________________________________________________________________________________________________________________________
showMessage ||-->يعرض الرسائل في حالة وجود خطأ أو تحذير أو معلومات
____________________________________________________________________________________________________________________________
sniffdevice ||-->قراءة الاتصال بين الجهاز والمضيفين
____________________________________________________________________________________________________________________________
startMITMusbWifi ||-->يبدأ خيطًا لمراقبة جهاز USB الهدف
____________________________________________________________________________________________________________________________
startMonInterfaceChng||-->تتيح لك هذه الطريقة مراقبة جهاز كل 10 ثوانٍ في حالة تغير تكوين واجهته فجأة.
____________________________________________________________________________________________________________________________
startQueuewrite ||-->يبدأ اتصالاً بقائمة الانتظار للتواصل مع المضيف
____________________________________________________________________________________________________________________________
startSniffReadThread ||-->هذا خيط لقراءة الردود باستمرار من الجهاز ويعتمد على ما تمرره للطريقة سواء pts أو queue
____________________________________________________________________________________________________________________________
stopMITMusbWifi ||-->يوقف خيط الوسيط بين المضيف والجهاز
____________________________________________________________________________________________________________________________
stopMonInterfaceChang||-->يوقف خيط مراقبة الواجهة
____________________________________________________________________________________________________________________________
stopQueuewrite ||-->يوقف الخيط المسؤول عن التواصل مع الجهاز المضيف
____________________________________________________________________________________________________________________________
stopSniffing ||-->يقتل خيط التنصت الذي بدأته startSniffReadThread()
____________________________________________________________________________________________________________________________
usblyzerparse ||-->ستقوم هذه الطريقة بتحليل ملف xml الذي تم تصديره من usblyzer ثم استيراده إلى قاعدة بيانات
____________________________________________________________________________________________________________________________
In [16]: x.help("findSelect")
****
[+]مساعدة لطريقة findSelect:
[-]التوقيع: findSelect(self, chgint=None)
[+]مساعدة findSelect:
تقوم هذه الطريقة بتعداد جميع أجهزة USB المتصلة وتسمح لك بتحديدها كجهاز هدف بالإضافة إلى نقاط النهاية الخاصة به
****```
---
#### AutoGadgetFS console. A much simpler way to use AGFS:
<div style="text-align:left"><img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/agfsconsole.png"/></div>
---
<a name="Youtube"/>
### Youtube Playlist:
[Youtube Playlist](https://www.youtube.com/playlist?list=PLKozlVgM6RQjNHmpWR2RBiFCtufV03o6Z)
---
<a name="Slack"/>
### Join Slack:
Visit [AutogadgetFS Slack Channel](https://join.slack.com/t/autogadgetfs/shared_invite/zt-emgcv3ol-unG_axHmSQlk~5GcBddhlQ)
---
<a name="Support"/>
### Supported by:
<img src="https://assets.kitploit.com/production/public/readmes/3835/31aa30e1b311728af097fe24cefc4db7272ad971ffe64bac8d4d4e36a542fc9e.jpg" width="166" height="166"> <img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/JetBrains.png" width="166" height="166"> <img src="https://raw.githubusercontent.com/ehabhussein/AutoGadgetFS/master/screenshots/pyusb.png" width="166" height="166">
---
<a name="Donate"/>
### Buy me a coffee to support the development of this project
## Ethereum Donations : 0xA919e40ddB0563918dDc174320D91992e0048477
---
<a name="Contact"/>
### Contact me:
### 📧: <[email protected]>
### 🐦 : <https://twitter.com/0xRaindrop>
---
<a name="Cont"/>
### Contribute:
We're looking for developers to make this tool great! send me an 📧: <[email protected]> if you feel you'd like to be a part of this.