Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
FormatFuzzer — Vorlagenbasierter Binärformat-Fuzzer, der gültige Testeingaben in hoher Geschwindigkeit erzeugt und parst, mit AFL++-Integration für abdeckungsgesteuertes Fuzzing. | Kitploit
Tools/GitHubGitHub/uds-se/formatfuzzer
FuzzingBinäranalyse
GitHubuds-se/formatfuzzer

FormatFuzzer

Vorlagenbasierter Binärformat-Fuzzer, der gültige Testeingaben in hoher Geschwindigkeit erzeugt und parst, mit AFL++-Integration für abdeckungsgesteuertes Fuzzing.

Repository anzeigenWebseite
4463826vor 7 MonatenVon 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

FormatFuzzer

FormatFuzzer ist ein Framework für die hocheffiziente, qualitativ hochwertige Generierung und Analyse von Binäreingaben. Es nimmt eine Binärvorlage entgegen, die das Format einer Binäreingabe beschreibt, und generiert einen ausführbaren Code, der das angegebene Binärformat erzeugt und parst. Aus einer Binärvorlage für GIF zum Beispiel erzeugt FormatFuzzer einen GIF-Generator – auch bekannt als GIF-Fuzzer.

Die von FormatFuzzer erzeugten Generatoren sind hocheffizient und produzieren Tausende gültiger Testeingaben pro Sekunde – im krassen Gegensatz zu mutationsbasierten Fuzzern, bei denen die überwältigende Mehrheit der Eingaben ungültig ist. Die von FormatFuzzer generierten Eingaben sind unabhängig vom getesteten Programm (oder eigentlich jedem Programm), sodass Sie sie auch in Black-Box-Szenarien verwenden können. FormatFuzzer lässt sich jedoch auch in AFL++ integrieren, um gültige Eingaben zu erzeugen, die gleichzeitig auf maximale Codeabdeckung abzielen. In unseren Experimenten übertrifft dieser „Best of both Worlds"-Ansatz alle anderen Einstellungen; siehe unser Paper für Details.

Die von FormatFuzzer verwendeten Binärvorlagen stammen vom 010 Editor. Es gibt mehr als 170 Binärvorlagen, die entweder direkt für FormatFuzzer verwendet oder für dessen Nutzung angepasst werden können. Out of the Box erzeugt FormatFuzzer Formate wie AVI, BMP, GIF, JPG, MIDI, MP3, MP4, PCAP, PNG, WAV und ZIP; und wir erweitern diese Liste jede Woche weiter.

Mitwirkende sind willkommen! Besuchen Sie die FormatFuzzer-Projektseite, um Ideen und Probleme zu melden oder Pull-Requests einzureichen. Für Details zur Funktionsweise von FormatFuzzer und zu Vergleichen lesen Sie unser Paper für weitere Informationen.

Bezug

FormatFuzzer ist auf der FormatFuzzer-Projektseite verfügbar. Sie können die neueste Version von der Release-Seite herunterladen und entpacken.

Für die allerneueste Version können Sie auch das Git-Repository klonen:

git clone https://github.com/uds-se/FormatFuzzer.git

Alle weiteren Aktionen finden im Hauptverzeichnis statt:

cd FormatFuzzer

Voraussetzungen

Um FormatFuzzer auszuführen, benötigen Sie Folgendes:

  • Python 3
  • Einen C++-Compiler mit GNU-Bibliotheken (insbesondere getopt_long()) wie clang oder gcc
  • Die Python-Pakete py010parser, six und intervaltree
  • Eine zlib-Bibliothek (für Komprimierungsfunktionen)
  • Eine boost-Bibliothek (für Prüfsummenfunktionen)

Wenn Sie die Build- und Konfigurationsskripte (.ac- und .am-Dateien) bearbeiten möchten, benötigen Sie außerdem

  • GNU autoconf
  • GNU automake

Installieren der Anforderungen unter Linux (Debian-Pakete, mit einer Python-Virtual-Environment)

sudo apt install git g++ make automake python3-full zlib1g-dev libboost-dev
python3 -m venv ~/fuzz
source ~/fuzz/bin/activate
pip3 install py010parser six intervaltree

Installieren der Anforderungen unter MacOS (mit Xcode & Homebrew)

xcode-select --install
brew install python3 automake boost
pip3 install py010parser six intervaltree

Nur Python-Pakete installieren (alle Betriebssysteme)

Auf allen Systemen mit pip:

pip install py010parser
pip install six
pip install intervaltree

Bauen

Hinweis: Alle Build-Befehle erfordern, dass Sie sich im selben Ordner wie diese README-Datei befinden. Das Bauen eines Fuzzers außerhalb dieses Ordners wird noch nicht unterstützt.

Methode 1: Verwendung des build.sh-Skripts

Es gibt ein Skript build.sh, das alle Konstruktionsschritte automatisiert. Führen Sie einfach

./build.sh gif

aus, um einen GIF-Fuzzer zu erstellen.

Dies funktioniert für alle Dateiformate, die in templates/ bereitgestellt werden; wenn es eine Datei templates/FOO.bt gibt, dann baut ./build.sh FOO einen Fuzzer.

Methode 2: Verwendung von Make

Es gibt ein Makefile (Quelle in Makefile.am), das alle Konstruktionsschritte automatisiert. (Erfordert GNU make.) Führen Sie zuerst

touch configure Makefile.in

dann

./configure

und dann

make gif-fuzzer

aus, um einen GIF-Fuzzer zu erstellen.

Dies funktioniert für alle Dateiformate, die in templates/ bereitgestellt werden; wenn es eine Datei templates/FOO.bt gibt, dann baut make FOO-fuzzer einen Fuzzer.

Methode 3: Manuelle Schritte

Falls die obige make-Methode nicht funktioniert oder Sie mehr Kontrolle wünschen, müssen Sie möglicherweise manuell vorgehen.

Schritt 1: Kompilieren von Binärvorlagendateien in C++-Code

Führen Sie den ffcompile-Compiler aus, um die Binärvorlage in C++-Code zu kompilieren. Er benötigt zwei Argumente: die .bt-Binärvorlage und eine zu generierende .cpp-C++-Datei.

./ffcompile templates/gif.bt gif.cpp

Schritt 2: Kompilieren des C++-Codes

Verwenden Sie die folgenden Befehle, um einen Fuzzer gif-fuzzer zu erstellen. Kompilieren Sie zunächst den generischen Befehlszeilentreiber:

g++ -c -I . -std=c++17 -g -O3 -Wall fuzzer.cpp

(-I . gibt den Speicherort der bt.h-Datei an; -std=c++17 setzt den C++-Standard.)

Kompilieren Sie dann den Binärparser/-compiler:

g++ -c -I . -std=c++17 -g -O3 -Wall gif.cpp

Verknüpfen Sie schließlich den Binärparser/-compiler mit dem Befehlszeilentreiber, um eine ausführbare Datei zu erhalten. Wenn Sie zusätzliche Bibliotheken (wie -lz) verwenden, geben Sie diese hier ebenfalls an.

g++ -O3 gif.o fuzzer.o -o gif-fuzzer -lz

Ausführen des Fuzzers

FormatFuzzer kann als eigenständiger Parser, Generator oder Mutator bestimmter Formate ausgeführt werden. Darüber hinaus kann es von allgemeinen Fuzzern wie AFL++ aufgerufen werden, um diese formatspezifischen Fähigkeiten in den Fuzzing-Prozess zu integrieren (siehe den folgenden Abschnitt zur AFL++-Integration).

Der generierte Fuzzer nimmt einen Befehl als erstes Argument entgegen, gefolgt von Optionen und Argumenten für diesen Befehl.

Der wichtigste Befehl ist fuzz zur Erzeugung von Ausgaben. Seine Argumente sind Dateien, die im entsprechenden Format generiert werden sollen.

Führen Sie den Generator aus als

./gif-fuzzer fuzz output.gif

um eine zufällige Binärdatei output.gif zu erstellen, oder

./gif-fuzzer fuzz out1.gif out2.gif out3.gif

um drei GIF-Dateien out1.gif, out2.gif und out3.gif zu erstellen.

Beachten Sie, dass die von uns bereitgestellte Vorlage gif.bt um spezielle Funktionen erweitert wurde, um die Generierung gültiger Dateien zu erleichtern. Wenn Sie eine originale .bt-Vorlagendatei ohne Anpassungen verwenden, erhalten Sie möglicherweise Warnungen während der Generierung und erstellen ungültige Dateien.

Ausführen von Parser

Sie können den Fuzzer auch als Parser für Binärdateien mit dem Befehl parse ausführen. Dies ist nützlich, wenn Sie die Genauigkeit der Binärvorlage testen oder eine Eingabe mutieren möchten (siehe „Entscheidungsdateien" unten).

Um den Parser auszuführen, verwenden Sie

./gif-fuzzer parse input.gif

Sie sehen Fehlermeldungen, wenn input.gif nicht erfolgreich geparst werden kann.

Entscheidungsdateien

Beim Parsen können Sie auch alle Parsing-Entscheidungen (d.h. welche Parsing-Alternativen gewählt wurden) in einer Entscheidungsdatei speichern. Dies ist eine Abfolge von Bytes, die die getroffenen Entscheidungen aufzählt. Jedes Byte steht für eine einzige Parsing-Entscheidung. Ein Byte-Wert von 0 bedeutet, dass die erste Alternative gewählt wurde, ein Byte-Wert von 1 bedeutet, dass die zweite Alternative gewählt wurde, und so weiter.

Tool herunterladen