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
Binvariants — Ein auf Registerebene invarianzgeführtes Fuzzing-Framework für Closed-Source-Binärdateien, das wahrscheinliche Invariantenverletzungen nutzt, um Abstürze und Fehler in Binärausführungsdateien zu entdecken. | Kitploit
Tools/GitHubGitHub/futureslab/binvariants
SchwachstellenanalyseExploitationFuzzingBinäranalyse
GitHubfutureslab/binvariants

Binvariants

Ein auf Registerebene invarianzgeführtes Fuzzing-Framework für Closed-Source-Binärdateien, das wahrscheinliche Invariantenverletzungen nutzt, um Abstürze und Fehler in Binärausführungsdateien zu entdecken.

Repository anzeigen
5129vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Binvariants: Register-Level Invaraint-Guided Fuzzing für Binaries

Binvariants-Logo

Dieses Repository stellt den Quellcode für Binvariants bereit: ein Prototyp-Fuzzing-Framework, das registerbasierte wahrscheinliche Invariantenverletzungen für das Fuzzing von Binaries nutzt.

Diese Arbeit wird in unserem Paper Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants | Folien vorgestellt, das auf der 2026 ACM International Conference on the Foundations of Software Engineering (FSE’26) erscheint.

  • Binvariants installieren
  • Binvariants verwenden
  • Zusätzliche Hinweise
  • Bug-Trophy-Case


Binvariants-Workflow
Binvariants-Workflow

Dieses Repository zitieren: @article{yang:binvariants, title = {Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants}, author = {Zao Yang and Stefan Nagy}, year = {2026}, issue_date = {July 2026}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {3}, number = {FSE}, journal = {Proc. ACM Softw. Eng.}}
Entwickler: Zao Yang ([email protected]) und Stefan Nagy ([email protected])
Lizenz: MIT-Lizenz
Haftungsausschluss: Diese Software wird ohne jegliche Gewährleistung bereitgestellt.

Binvariants installieren

Binvariants baut auf AFL++ und QEMU-AFL auf. Installieren Sie die von diesen Projekten benötigten Abhängigkeiten, bevor Sie Binvariants einrichten:

sudo apt-get update
sudo apt-get install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo libgtk-3-dev
# try to install llvm-18 and install the distro default if that fails
sudo apt-get install -y lld-18 llvm-18 llvm-18-dev clang-18 || sudo apt-get install -y lld llvm llvm-dev clang
sudo apt-get install -y gcc-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-plugin-dev libstdc++-$(gcc --version|head -n1|sed 's/\..*//'|sed 's/.* //')-dev
sudo apt-get install -y meson ninja-build # for QEMU mode

Binvariants umfassen zwei Komponenten:

  • 1-Invariant_Learner/
  • 2-Fuzzer/

Um jede zu erstellen, navigieren Sie in das entsprechende Verzeichnis und führen Sie die folgenden Befehle aus:

./1_patch.sh
./2_build.sh

Verwendung von Binvariants

Example/ enthält die Beispielskripte und Testfälle für die Verwendung von Binvariants zum Fuzzing der nconvert-Binärdatei. Sie können die Skripte anpassen, um andere Binärdateien zu fuzzen.

Einrichtung

Bevor Sie Binvariants verwenden, deaktivieren Sie ASLR, da es konsistente Basisblockadressen zwischen dem Erlernen der Invarianten und dem Fuzzing benötigt:

sudo sysctl -w kernel.randomize_va_space=0

Erlernen von wahrscheinlichen Invarianten auf Registerebene (RLIs)

Um Invarianten zu erlernen, führen Sie aus:

./Example/1-learn_invs.sh [Binvariants_Root]

Die abgeleiteten RLIs werden in dem Verzeichnis gespeichert, das durch BINV_TRACES_DIR in 1-learn_invs.sh angegeben wird, benannt als: [PROGRAM]_trace_qemu_invs.

Fuzzing mit RLIs

Um mit dem Fuzzing mit Binvariants zu beginnen, führen Sie aus:

./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]

Führen Sie zum Beispiel den 1. Durchlauf einer 48-stündigen Fuzzing-Kampagne aus dem Stammverzeichnis von Binvariants aus:

./Example/2-fuzz.sh $PWD 48h 1

Zusätzliche Hinweise

Im Folgenden finden Sie mögliche Erweiterungen für Binvariants.

Adaptives Lernen von Invarianten

Derzeit lernt Binvariants Invarianten vor dem Fuzzing und führt das Fuzzing anschließend separat aus. Eine mögliche Erweiterung besteht darin, Invarianten während des Fuzzings zu lernen und sie bei Verletzungen zu aktualisieren, sodass sich das Feedback im Laufe der Zeit weiterentwickeln kann.

Mögliche Designüberlegungen:

  1. Wenn Invarianten während der Ausführung eines Testfalls aktualisiert werden, der später abstürzt oder eine Zeitüberschreitung erleidet, muss die Aktualisierung möglicherweise rückgängig gemacht werden. Eine praktische Lösung besteht darin, Aktualisierungen auf eine Kopie der Invarianten anzuwenden und sie nur dann zu übernehmen, wenn der Testfall normal abgeschlossen wird (d. h. FSRV_RUN_OK).
  2. Wenn das Fuzzing läuft und Invarianten aktualisiert werden, werden Verletzungen auf natürliche Weise seltener. Dies birgt das Risiko, dass AFL++ wiederholt Testfälle aus frühen Phasen auswählt (die mehr Verletzungen auslösen, aber weniger entwickelte Programmzustände repräsentieren). Möglicherweise ist eine Anpassung von weight/perf_score/top_rated auf der AFL++-Seite erforderlich, um sicherzustellen, dass später repräsentativere Testfälle ausgewählt werden.

Blockübergreifende Invarianten

Binvariants konzentriert sich derzeit auf Invarianten innerhalb einzelner Blöcke. Eine mögliche Erweiterung ist die Unterstützung blockübergreifender Invarianten. Dies erfordert neue Datenstrukturen zur Verfolgung von Registerwerten über Blockgrenzen hinweg sowie zusätzliche Instrumentierung, um Verletzungen zu prüfen, wenn die Kontrolle zwischen Blöcken übergeht.

Tool herunterladen