
USB-Testen leicht gemacht

b. Minimales agfs-in-der-Mitte-Setup
c. Vollständiges agfs-in-der-Mitte-Setup mit Debugging-Unterstützung
a. Linux
AutoGadgetFS ist ein Open-Source-Framework, das es Benutzern ermöglicht, USB-Geräte und deren zugehörige Hosts/Treiber/Software ohne tiefgehende Kenntnisse des USB-Protokolls zu bewerten. Das Tool ist in Python3 geschrieben und nutzt RabbitMQ und WLAN-Zugriff, um Forschern die Durchführung von fernen USB-Sicherheitsbewertungen von überall auf der Welt zu ermöglichen. Durch die Nutzung von ConfigFS erlaubt AutoGadgetFS Benutzern, Geräte schnell zu klonen und zu emulieren, wodurch die Notwendigkeit entfällt, sich tief in die Details jeder Implementierung einzuarbeiten. Das Framework ermöglicht es Benutzern auch, eigene Fuzzer darauf aufbauend zu erstellen.
<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"/>
### Unterstützung der USB-Geräteklasse:
[✔️] USB-HID-Geräte vollständig unterstützt (Man-in-the-Middle)
[⚠️] Nur Gerätetests .. Alle USB-Geräte (kein Man-in-the-Middle)
[⏳] Zukünftige Versionen... Alle USB-Geräte (Man-in-the-Middle)
---
<a name="Caps"/>
### Fähigkeiten:
1. Ein USB-Gerät einfach finden, auswählen und daran anschließen.
1. Jedes USB-HID-Gerät emulieren.
1. AGFS-Man-in-the-Middle-Sniffing für HID-Geräte durchführen (Kommunikation auf Festplatte speichern).
1. Geräte-Sniffing (jedes Gerät).
1. Mehrere Fuzzer ermöglichen das Fuzzing eines Geräts oder eines Hosts.
1. Zufällige Fuzzer (mit Paketen fester oder zufälliger Länge).
1. Intelligente Fuzzer, die aus früheren USB-Kommunikationen lernen.
1. Describe-Fuzzer, um dem Fuzzer mitzuteilen, welche Bytes gefuzzt werden sollen, während der Rest des Pakets gleich bleibt.
1. Gadget-Fuzzer.
1. Sequenzieller Fuzzer.
1. Control-Transfer-Enumerator.
1. Wiedergabe von Paketen aus einer Datei.
1. Wiedergabe von Paketen aus einem gespeicherten USBLyzer-Mitschnitt.
1. Visuelle Darstellung von Paketen zur einfachen Reverse-Engineering der Kommunikation.
1. Warnungen für Geräte im DFU-Modus oder wenn das Gerät Informationen preisgibt.
1. USB-Gerät und Host können sich überall im Internet befinden.
1. Überwachung plötzlicher Schnittstellenänderungen.
---
<a name="Road"/>
### Fahrplan:
1. Sniffen von Control-Transfer-Anfragen an ein Gerät und Antworten darauf.
1. MITM und Emulation aller Gerätetypen.
1. Konsolen-/QT-basierte Oberfläche.
1. Mehr Schnittstellen-/Endpunktunterstützung auf dem RPI Zero W.
1. Unterstützung weiterer Boards wie dem GreatFET.
1. Umstellung auf ein benutzerdefiniertes Board.
1. Arbeiten daran, dass der Raspberry Pi volle Unterstützung für USB-Geräteemulation mit allen Schnittstellen bietet.
1. Korrelation von gesendeten und empfangenen Paketen über Sequenznummern.
---
<a name="Installation"/>
### Installation:
<a name="Linux"/>
### Linux-Rechner:
* Hinweis: WSL/WSL2 wird aufgrund von Problemen mit USB-Durchleitung nicht unterstützt.
* Installieren Sie Python3, ipython3, git, pip und rabbitMQ-Server
```bash
sudo apt install python3 ipython3 git python3-pip rabbitmq-server dfu-util
sudo service rabbitmq-server start
```
* Klonen Sie das Repository
```bash
git clone https://github.com/ehabhussein/AutoGadgetFS
cd AutoGadgetFS
```
* Installieren Sie die Abhängigkeiten
```bash
sudo -H pip3 install -r requirements.txt
```
* Downgrade von prompt-toolkit für eine bessere ipython-Erfahrung:
```bash
sudo python3 -m pip install prompt-toolkit~=2.0
```
* Aktivieren Sie die Weboberfläche für rabbitMQ
```bash
sudo rabbitmq-plugins enable rabbitmq_management
http://localhost:15672/ um zur Weboberfläche zu gelangen
```
* Melden Sie sich mit den Anmeldedaten *guest:guest* an der Weboberfläche an.
* HINWEIS: Wenn Sie rabbitMQ nicht auf `localhost` installieren, fügen Sie den folgenden Benutzer hinzu und melden Sie sich damit an:
```bash
sudo rabbitmqctl add_user autogfs usb4ever
sudo rabbitmqctl set_user_tags autogfs administrator
```
* Laden Sie die rabbitMQ-Konfigurationsdatei hoch
* Scrollen Sie im Reiter "Overview" nach unten, um Definitionen zu importieren
* Laden Sie die Datei hoch, die sich in: *rabbitMQbrokerconfig/rabbitmq-Config.json* befindet
```bash
sudo service rabbitmq-server restart
```
* Testen Sie die Installation
```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.8067
...: 274-device.bin")
[+]Allgemeine Statistiken
Vollständiger Zeichensatz : !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Verworfener Zeichensatz : !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ghijklmnopqrstuvwxyz{|}~
Endgültiger Zeichensatz : 0123456789abcdef
Wortlänge : 128
Verwendung von Kleinbuchstaben-Index : 92%
Positionen der Kleinbuchstaben-Index : [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]
Verwendung von Großbuchstaben-Index : 0%
Positionen der Großbuchstaben-Index : []
Verwendung von Ziffern-Index : 96%
Positionen der Ziffern-Index : [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]
Verwendung von Nicht-Alphanumerischen Index : 0%
Positionen der Nicht-Alphanumerischen Index : []
Zählerstatistiken : Großbuchstaben: 0 , Kleinbuchstaben: 133071, Ziffern:212017 , Nicht-Alphanumerisch:0
Alle Zeichenhäufigkeiten :
Zeichen:5 gefunden:5012 mal
Zeichen:2 gefunden:22563 mal
Zeichen:3 gefunden:12197 mal
Zeichen:8 gefunden:15008 mal
Zeichen:4 gefunden:13275 mal
Zeichen:0 gefunden:98056 mal
Zeichen:1 gefunden:17861 mal
Zeichen:f gefunden:87823 mal
Zeichen:d gefunden:7221 mal
Zeichen:7 gefunden:9614 mal
Zeichen:a gefunden:11148 mal
Zeichen:6 gefunden:10472 mal
Zeichen:b gefunden:8189 mal
Zeichen:9 gefunden:7959 mal
Zeichen:c gefunden:9172 mal
Zeichen:e gefunden:9518 mal
***********************
generiert:5 Pakete
***********************
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("")
Derzeit unterstützte Methoden:
__________________________________________________________________________________________________________________________________________________________________
Methode ||-->Beschreibung
----------------------------------------------------------------------------------------------------------------------------
MITMproxy ||-->Diese Methode stellt eine Verbindung zum RabbitMQ her und hört auf empfangene Nachrichten in der todev-Warteschlange
____________________________________________________________________________________________________________________________
MITMproxyRQueues ||-->Diese Methode liest aus der Warteschlange todev und sendet die Anfrage an das Gerät selbst.
____________________________________________________________________________________________________________________________
SmartFuzz ||-->Diese Methode generiert Pakete basierend auf dem, was sie durch einen Sniff vom Host oder vom Gerät gelernt hat
____________________________________________________________________________________________________________________________
chgIntrfs ||-->Diese Methode ermöglicht es Ihnen, eine andere Schnittstelle zu ändern und auszuwählen
____________________________________________________________________________________________________________________________
clearqueues ||-->Diese Methode leert alle Warteschlangen auf den RabbitMQ-Warteschlangen, die eingerichtet sind
____________________________________________________________________________________________________________________________
clonedev ||-->Diese Methode benötigt keine Parameter; sie speichert nur ein Backup des Geräts, falls Sie es später teilen oder verwenden müssen.
____________________________________________________________________________________________________________________________
createctrltrsnfDB ||-->Erstellt eine SQLite-Datenbank mit Werten, die aus der Steuerungsübertragungs-Enumeration ermittelt wurden
____________________________________________________________________________________________________________________________
createdb ||-->Erstellt die SQLite-Tabelle und Spalten aus USBlyzer-Aufnahmen
____________________________________________________________________________________________________________________________
decodePacketAscii ||-->Diese Methode dekodiert Paketbytes zurück in ASCII
____________________________________________________________________________________________________________________________
describeFuzz ||-->Diese Methode ermöglicht es Ihnen, ein Paket zu beschreiben und auszuwählen, welche Bytes gefuzzt werden
____________________________________________________________________________________________________________________________
devEnumCtrltrnsf ||-->Diese Methode ermittelt alle möglichen Kombinationen einer Steuerungsübertragungsanforderung
____________________________________________________________________________________________________________________________
devReset ||-->Diese Methode setzt das Gerät zurück
____________________________________________________________________________________________________________________________
devWrite ||-->Um dies mit einer Methode zu verwenden, schreiben Sie in ein Gerät. Stellen Sie sicher, dass Sie startSniffReadThread(self,endpoint=None, pts=None, queue=None,channel=None) ausführen.
____________________________________________________________________________________________________________________________
devctrltrnsf ||-->Diese Methode ermöglicht es Ihnen, Steuerübertragungsanforderungen an das Zielgerät zu senden
____________________________________________________________________________________________________________________________
deviceInfo ||-->Holt die vollständigen Informationen nur für jedes an den Host angeschlossene USB-Gerät
____________________________________________________________________________________________________________________________
deviceInterfaces ||-->Holt alle Schnittstellen und Endpunkte auf dem Gerät
____________________________________________________________________________________________________________________________
devrandfuzz ||-->Diese Methode ermöglicht es Ihnen, Pakete fester oder zufälliger Größe zu erstellen, die mit urandom erstellt wurden
____________________________________________________________________________________________________________________________
devseqfuzz ||-->Diese Methode ermöglicht es Ihnen, sequenziell inkrementierte Pakete zu erstellen und an das Gerät zu senden
____________________________________________________________________________________________________________________________
findSelect ||-->Diese Methode zählt alle angeschlossenen USB-Geräte auf und ermöglicht es Ihnen, ein Gerät sowie seine Endpunkte als Ziel auszuwählen
____________________________________________________________________________________________________________________________
help ||-->AutogadgetFS-Hilfemethode
____________________________________________________________________________________________________________________________
hostwrite ||-->Diese Methode schreibt Pakete an den Host, entweder für eine Software oder einen Treiber, der das Gerät steuert
____________________________________________________________________________________________________________________________
hstrandfuzz ||-->Diese Methode ermöglicht es Ihnen, Pakete fester oder zufälliger Größe zu erstellen, die mit urandom erstellt wurden, und sie an die Host-Warteschlange zu senden
____________________________________________________________________________________________________________________________
monInterfaceChng ||-->Methode zur Überwachung von Schnittstellenänderungen, wird von def startMonInterfaceChng(self) aufgerufen
____________________________________________________________________________________________________________________________
newProject ||-->Erstellt einen neuen Projektnamen, falls Sie etwas anderes testen
____________________________________________________________________________________________________________________________
releasedev ||-->Gibt das Gerät frei und setzt den Kernel-Treiber wieder ein
____________________________________________________________________________________________________________________________
removeGadget ||-->Diese Methode entfernt das Gadget vom RaspberryPi
____________________________________________________________________________________________________________________________
replaymsgs ||-->Diese Methode durchsucht die USBLyzer-parsierte Datenbank und gibt Ihnen die Option, eine Nachricht oder alle Nachrichten vom Host zum Gerät wiederzugeben
____________________________________________________________________________________________________________________________
searchmsgs ||-->Diese Methode ermöglicht es Ihnen, alle Nachrichten nach einem Muster zu durchsuchen und auszuwählen, die aus einer USBlyzer-Datenbankerstellung gespeichert wurden
____________________________________________________________________________________________________________________________
setupGadgetFS ||-->Variablen für gadgetFS einrichten: Nur Linux, auf Raspberry Pi Zero die beste Option
____________________________________________________________________________________________________________________________
showMessage ||-->Zeigt Nachrichten an, falls Fehler oder Warnung oder Info
____________________________________________________________________________________________________________________________
sniffdevice ||-->Liest die Kommunikation zwischen dem Gerät und dem Host aus
____________________________________________________________________________________________________________________________
startMITMusbWifi ||-->Startet einen Thread zur Überwachung des USB-Zielgeräts
____________________________________________________________________________________________________________________________
startMonInterfaceChng||-->Diese Methode ermöglicht es Ihnen, ein Gerät alle 10 Sekunden zu überwachen, falls es plötzlich seine Schnittstellenkonfiguration ändert.
____________________________________________________________________________________________________________________________
startQueuewrite ||-->Initiiert eine Verbindung zur Warteschlange zur Kommunikation mit dem Host
____________________________________________________________________________________________________________________________
startSniffReadThread ||-->Dies ist ein Thread, der kontinuierlich die Antworten vom Gerät liest, abhängig davon, was Sie an die Methode übergeben (entweder pts oder queue)
____________________________________________________________________________________________________________________________
stopMITMusbWifi ||-->Stoppt den Man-in-the-Middle-Thread zwischen Host und Gerät
____________________________________________________________________________________________________________________________
stopMonInterfaceChang||-->Stoppt den Thread zur Schnittstellenüberwachung
____________________________________________________________________________________________________________________________
stopQueuewrite ||-->Stoppt den Thread, der für die Kommunikation mit dem Host-Rechner zuständig ist
____________________________________________________________________________________________________________________________
stopSniffing ||-->Beendet den Sniffing-Thread, der von startSniffReadThread() gestartet wurde
____________________________________________________________________________________________________________________________
usblyzerparse ||-->Diese Methode parst Ihr aus USBlyzer exportiertes XML und importiert es dann in eine Datenbank
____________________________________________________________________________________________________________________________
In [16]: x.help("findSelect")
****
[+]Hilfe für die Methode findSelect:
[-]Signatur: findSelect(self, chgint=None)
[+]Hilfe zu findSelect:
Diese Methode zählt alle angeschlossenen USB-Geräte auf und ermöglicht es Ihnen, ein Gerät sowie seine Endpunkte als Ziel auszuwählen
****```
---
#### 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.