Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Binvariants — Cadre de fuzzing guidé par des invariants au niveau des registres pour les binaires à source fermée, exploitant des violations d'invariants probables pour découvrir des plantages et des bogues dans les exécutables binaires. | Kitploit
Outils/GitHubGitHub/futureslab/binvariants
Analyse des VulnérabilitésExploitationFuzzingAnalyse de Binaires
GitHubfutureslab/binvariants

Binvariants

Cadre de fuzzing guidé par des invariants au niveau des registres pour les binaires à source fermée, exploitant des violations d'invariants probables pour découvrir des plantages et des bogues dans les exécutables binaires.

Voir le dépôt
5129il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Binvariants : Fuzzing guidé par invariants au niveau des registres pour les binaires

Logo Binvariants

Ce dépôt fournit le code source de Binvariants : un prototype de framework de fuzzing qui exploite les violations probables d'invariants au niveau des registres pour le fuzzing de binaires.

Ce travail est présenté dans notre article Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants | Diapositives, publié à la 2026 ACM International Conference on the Foundations of Software Engineering (FSE'26).

  • Installer Binvariants
  • Utiliser Binvariants
  • Notes complémentaires
  • Vitrine des bugs trouvés


Flux de travail de Binvariants
Flux de travail de Binvariants

Citer ce dépôt : @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.}}
Développeurs : Zao Yang ([email protected]) et Stefan Nagy ([email protected])
Licence : Licence MIT
Avertissement : Ce logiciel est fourni tel quel, sans aucune garantie.

Installer Binvariants

Binvariants est construit sur AFL++ et QEMU-AFL. Installez les dépendances requises par ces projets avant de configurer Binvariants :

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

Les binvariants comprennent deux composants :

  • 1-Invariant_Learner/
  • 2-Fuzzer/

Pour construire chacun d'eux, naviguez vers leur répertoire correspondant et exécutez les commandes suivantes :

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

Utilisation de Binvariants

Example/ contient les scripts d'exemple et les cas de test pour utiliser Binvariants afin de fuzzer le binaire nconvert. Vous pouvez modifier les scripts pour fuzzer d'autres binaires.

Configuration

Avant d'utiliser Binvariants, désactivez ASLR, car il nécessite des adresses de blocs de base cohérentes entre l'apprentissage des invariants et le fuzzing :

sudo sysctl -w kernel.randomize_va_space=0

Apprentissage des invariants probables au niveau des registres (RLIs)

Pour apprendre les invariants, exécutez :

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

Les RLI inférés seront enregistrés dans le répertoire spécifié par BINV_TRACES_DIR dans 1-learn_invs.sh, nommé : [PROGRAM]_trace_qemu_invs.

Fuzzing avec les RLI

Pour commencer le fuzzing avec Binvariants, exécutez :

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

Par exemple, exécutez le 1er essai d'une campagne de fuzzing de 48 heures depuis le répertoire racine de Binvariants :

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

Notes supplémentaires

Voici des améliorations potentielles pour Binvariants.

Apprentissage adaptatif des invariants

Actuellement, Binvariants apprend les invariants avant le fuzzing, puis exécute le fuzzing séparément. Une amélioration possible consiste à apprendre les invariants pendant le fuzzing et à les mettre à jour au fur et à mesure des violations, permettant ainsi au retour d'information d'évoluer au fil du temps.

Considérations de conception possibles :

  1. Si les invariants sont mis à jour pendant l'exécution d'un cas de test qui plante ou expire ensuite, la mise à jour peut devoir être annulée. Une solution pratique consiste à appliquer les mises à jour à une copie des invariants et à ne les valider que si le cas de test se termine normalement (c'est-à-dire FSRV_RUN_OK).
  2. Au fur et à mesure que le fuzzing s'exécute et que les invariants sont mis à jour, les violations deviendront naturellement moins fréquentes. Cela risque d'amener AFL++ à sélectionner de manière répétée des cas de test précoces (qui déclenchent plus de violations mais représentent des états de programme moins évolués). Un ajustement du weight/perf_score/top_rated côté AFL++ peut être nécessaire pour garantir que les cas de test ultérieurs, plus représentatifs, soient sélectionnés.

Invariants inter-blocs de base

Binvariants se concentre actuellement sur les invariants à bloc unique. Une amélioration potentielle consiste à prendre en charge les invariants inter-blocs. Cela nécessite de nouvelles structures de données pour suivre les valeurs des registres à travers les frontières de blocs, ainsi qu'une instrumentation supplémentaire pour vérifier les violations lorsque le contrôle est transféré entre blocs.

Télécharger l’outil