Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 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
51il y a 1 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 de binaires guidé par des invariants au niveau des registres

Logo Binvariants

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

Ce travail est présenté dans notre article Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants, à paraître à la conférence 2026 de l'ACM International Conference on the Foundations of Software Engineering (FSE’26).

  • Installer Binvariants
  • Utiliser Binvariants
  • Notes supplémentaires
  • Tableau de chasse aux bugs


Workflow de Binvariants
Workflow de Binvariants

Citation de ce dépôt : @inproceedings{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 :

root@kitploit:~
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 comprend deux composants :

  • 1-Invariant_Learner/
  • 2-Fuzzer/

Pour construire chacun d'eux, accédez à leur répertoire correspondant et exécutez les commandes suivantes :

root@kitploit:~
./1_patch.sh
./2_build.sh

Utiliser 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 :

root@kitploit:~
sudo sysctl -w kernel.randomize_va_space=0

Apprentissage des invariants probables au niveau des registres (RLI)

Pour apprendre les invariants, exécutez :

root@kitploit:~
./Example/1-learn_invs.sh [Binvariants_Root]

Les RLI inférés seront sauvegardé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 démarrer le fuzzing avec Binvariants, exécutez :

root@kitploit:~
./Example/2-fuzz.sh [Binvariants_Root] [Fuzz_Time] [Trial_Number]

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

root@kitploit:~
./Example/2-fuzz.sh $PWD 48h 1

Notes supplémentaires

Voici quelques améliorations potentielles de 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 serait d'apprendre les invariants pendant le fuzzing et de les mettre à jour au fur et à mesure que des violations se produisent, permettant ainsi à la rétroaction d'évoluer dans le temps.

Considérations possibles pour la conception :

  1. Si les invariants sont mis à jour pendant l'exécution d'un cas de test qui plante par la suite ou expire, la mise à jour peut devoir être annulée. Une solution pratique consiste à appliquer les mises à jour sur 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 deviennent naturellement moins fréquentes. Cela risque qu'AFL++ sélectionne à plusieurs reprises des cas de test de début (qui déclenchent plus de violations mais représentent des états de programme moins évolués). Un ajustement du poids/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 de bloc unique. Une amélioration potentielle serait de prendre en charge les invariants inter-blocs. Cela nécessite de nouvelles structures de données pour suivre les valeurs des registres à travers les limites des blocs, ainsi qu'une instrumentation supplémentaire pour vérifier les violations lors des transferts de contrôle entre blocs.

Tableau de chasse aux bugs

Si vous trouvez d'autres bugs en utilisant Binvariants, veuillez nous en informer !

Remerciements

Ce travail a été soutenu par la National Science Foundation (NSF) sous le numéro de projet n° 2419798, et par la Defense Advanced Research Projects Agency (DARPA) sous le numéro de projet n° FA8750-24-2-0002, sous-projet n° GR105409-SUB00001384.

Télécharger l’outil
ProgrammesBugs rapportés
nconverthttps://newsgroup.xnview.com/viewtopic.php?t=49598
xls2csvhttps://github.com/vbwagner/catdoc/issues/6, https://github.com/vbwagner/catdoc/issues/7, https://github.com/vbwagner/catdoc/issues/8, https://github.com/vbwagner/catdoc/issues/9, https://github.com/vbwagner/catdoc/issues/10, https://github.com/vbwagner/catdoc/issues/11, https://github.com/vbwagner/catdoc/issues/12, https://github.com/vbwagner/catdoc/issues/13
gpmfhttps://github.com/gopro/gpmf-parser/issues/201, https://github.com/gopro/gpmf-parser/issues/202, https://github.com/gopro/gpmf-parser/issues/203
hdf5https://github.com/HDFGroup/hdf5/issues/5831, https://github.com/HDFGroup/hdf5/issues/5832, https://github.com/HDFGroup/hdf5/issues/5834
stormhttps://github.com/ladislav-zezula/StormLib/issues/397, https://github.com/ladislav-zezula/StormLib/issues/398
mp4splithttps://github.com/axiomatic-systems/Bento4/issues/1038, https://github.com/axiomatic-systems/Bento4/issues/1039
cpdfhttps://github.com/johnwhitington/camlpdf/issues/75
sfconverthttps://github.com/mpruett/audiofile/issues/73