Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
uniFuzzer — Ein Fuzzing-Tool für Closed-Source-Binärdateien basierend auf Unicorn und LibFuzzer | Kitploit
Tools/GitHubGitHub/pagalaxylab/unifuzzer
Embedded-System-SicherheitIoT-SicherheitFuzzingBinäranalyse
GitHubpagalaxylab/unifuzzer

uniFuzzer

Ein Fuzzing-Tool für Closed-Source-Binärdateien basierend auf Unicorn und LibFuzzer

Repository anzeigen
34657vor 7 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

uniFuzzer

uniFuzzer ist ein Fuzzing-Tool für Closed-Source-Binärdateien basierend auf Unicorn und LibFuzzer. Derzeit unterstützt es das Fuzzing von 32-Bit-LSB-ELF-Dateien auf ARM/MIPS, die typischerweise in IoT-Geräten vorkommen.

中文介绍

Merkmale

  • nur wenig Anpassungen und einfach zu bauen
  • kann jede angegebene Funktion oder jedes Codefragment anvisieren
  • coverage-gesteuertes Fuzzing mit beträchtlicher Geschwindigkeit
  • Abhängigkeiten werden automatisch aufgelöst und geladen
  • Überschreiben von Bibliotheksfunktionen durch PRELOAD

Erstellen

  1. Reverse Engineering der Ziel-Binärdatei und finden interessanter Funktionen zum Fuzzing.
  2. Erstellen Sie eine .c-Datei im Verzeichnis callback, die folgende Callbacks enthalten sollte:
  • void onLibLoad(const char *libName, void *baseAddr, void *ucBaseAddr): Wird jedes Mal aufgerufen, wenn eine abhängige Bibliothek in Unicorn geladen wird.
  • int uniFuzzerInit(uc_engine *uc): Wird direkt nach dem Laden aller Binärdateien in Unicorn aufgerufen. Hier können Stack/Heap/Register eingerichtet werden.
  • int uniFuzzerBeforeExec(uc_engine *uc, const uint8_t *data, size_t len): Wird vor jeder Runde der Fuzzing-Ausführung aufgerufen.
  • int uniFuzzerAfterExec(uc_engine *uc): Wird nach jeder Runde der Fuzzing-Ausführung aufgerufen.
  1. Führen Sie make aus und erhalten Sie das Fuzzing-Tool namens uf.

Ausführen

uniFuzzer verwendet die folgenden Umgebungsvariablen als Parameter:

  • UF_TARGET: Pfad zur Ziel-ELF-Datei
  • UF_PRELOAD: Pfad zur Preload-Bibliothek. Stellen Sie sicher, dass die Bibliothek die gleiche Architektur wie das Ziel hat.
  • UF_LIBPATH: Pfade, in denen die abhängigen Bibliotheken liegen. Verwenden Sie :, um mehrere Pfade zu trennen.

Und das Fuzzing kann mit folgendem Befehl gestartet werden:

root@kitploit:~
UF_TARGET=<target> [UF_PRELOAD=<preload>] UF_LIBPATH=<libPath> ./uf

Demonstration

Hier folgt eine Demo zur grundlegenden Verwendung. Die Demo enthält die folgenden Dateien:

  • demo-vuln.c: Dies ist das Ziel für das Fuzzing. Es enthält eine einfache Funktion namens vuln(), die anfällig für Stack/Heap-Überlauf ist.
  • demo-libcpreload.c: Dies dient zum PRELOAD-Hooking. Es definiert ein leeres printf() und vereinfachte malloc()/free().
  • callback/demo-callback.c: Dies definiert die notwendigen Callbacks für das Fuzzing der Demo-Funktion vuln().

Installieren Sie zunächst gcc für mipsel (Paket gcc-mipsel-linux-gnu auf Debian), um die Demo zu erstellen:

root@kitploit:~
# the target binary
# '-Xlinker --hash-style=sysv' tells gcc to use 'DT_HASH' instead of 'DT_GNU_HASH' for symbol lookup
# since currently uniFuzzer does not support 'DT_GNU_HASH'
mipsel-linux-gnu-gcc demo-vuln.c -Xlinker --hash-style=sysv -no-pie -o demo-vuln

# the preload library
mipsel-linux-gnu-gcc -shared -fPIC -nostdlib -Xlinker --hash-style=sysv demo-libcpreload.c -o demo-libcpreload.so

Oder Sie können einfach die Dateien demo-vuln und demo-libcpreload.so verwenden, die mit den obigen Befehlen kompiliert wurden.

Als nächstes führen Sie make aus, um uniFuzzer zu erstellen. Beachten Sie, dass wenn Sie die MIPS-Demo selbst kompiliert haben, einige Adressen von der vorgefertigten abweichen können und demo-callback.c entsprechend aktualisiert werden muss.

Stellen Sie schließlich sicher, dass die libc-Bibliothek für MIPS bereit ist. Auf Debian befindet sie sich unter /usr/mipsel-linux-gnu/lib/ nach der Installation des Pakets libc6-mipsel-cross, und genau darauf sollte UF_LIBPATH verweisen:

root@kitploit:~
UF_TARGET=<path to demo-vuln> UF_PRELOAD=<path to demo-libcpreload.so> UF_LIBPATH=<lib path for MIPS> ./uf

Anpassung an Unicorn

Unicorn löscht den JIT-Cache von QEMU aufgrund dieses Issues, was die Fuzzing-Geschwindigkeit verlangsamt, da die Ziel-Binärdatei bei jeder Ausführungsrunde neu JIT-kompiliert werden müsste.

Wir können tb_flush(env); auskommentieren, wie in diesem Issue für die Leistung angegeben.

TODO

  • Unterstützung für Syscall
  • Unterstützung für andere Architekturen und Binärformate
  • Unterstützung von GNU_HASH
  • Unterstützung von IFUNC
  • Integration der Umgebungseinrichtung und Bereitstellung von APIs
Tool herunterladen