Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Binvariants — Quadro di fuzzing guidato da invarianti a livello di registro per binari closed-source, sfruttando probabili violazioni di invarianti per scoprire crash e bug in eseguibili binari. | Kitploit
Strumenti/GitHubGitHub/futureslab/binvariants
Analisi delle VulnerabilitàExploitFuzzingAnalisi di Binari
GitHubfutureslab/binvariants

Binvariants

Quadro di fuzzing guidato da invarianti a livello di registro per binari closed-source, sfruttando probabili violazioni di invarianti per scoprire crash e bug in eseguibili binari.

Vedi Repository
51293 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Binvariants: Fuzzing guidato da invarianti a livello di registro per binari

Binvariants logo

Questo repository fornisce il codice sorgente di Binvariants: un framework di fuzzing prototipale che sfrutta le violazioni probabili di invarianti a livello di registro per il fuzzing di binari.

Questo lavoro è presentato nel nostro articolo Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants | Slide, che compare nel 2026 ACM International Conference on the Foundations of Software Engineering (FSE'26).

  • Installazione di Binvariants
  • Utilizzo di Binvariants
  • Note aggiuntive
  • Vetrina dei bug trovati


Binvariants workflow
Binvariants workflow

Citare questo repository: @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.}}
Sviluppatori: Zao Yang ([email protected]) e Stefan Nagy ([email protected])
Licenza: MIT License
Dichiarazione di non responsabilità: Questo software è fornito così com'è, senza alcuna garanzia.

Installazione di Binvariants

Binvariants è costruito su AFL++ e QEMU-AFL. Installare le dipendenze richieste da questi progetti prima di configurare 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

Binvariants include due componenti:

  • 1-Invariant_Learner/
  • 2-Fuzzer/

Per compilare ciascuno, navigare nella directory corrispondente ed eseguire i seguenti comandi:

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

Utilizzo di Binvariants

Example/ contiene gli script di esempio e i casi di test per utilizzare Binvariants per il fuzzing del binario nconvert. È possibile modificare gli script per eseguire il fuzzing di altri binari.

Configurazione

Prima di utilizzare Binvariants, disabilitare ASLR, poiché necessita di indirizzi di blocco base coerenti tra l'apprendimento degli invarianti e il fuzzing:

sudo sysctl -w kernel.randomize_va_space=0

Apprendimento degli invarianti probabili a livello di registro (RLI)

Per apprendere gli invarianti, eseguire:

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

Gli RLI inferiti verranno salvati nella directory specificata da BINV_TRACES_DIR in 1-learn_invs.sh, con il nome: [PROGRAM]_trace_qemu_invs.

Fuzzing con gli RLI

Per avviare il fuzzing con Binvariants, eseguire:

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

Ad esempio, esegui la prima prova di una campagna di fuzzing di 48 ore dalla directory principale di Binvariants:

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

Note aggiuntive

Di seguito sono riportati potenziali miglioramenti a Binvariants.

Apprendimento adattivo degli invarianti

Attualmente, Binvariants apprende gli invarianti prima del fuzzing e poi esegue il fuzzing separatamente. Un possibile miglioramento consiste nell'apprendere gli invarianti durante il fuzzing e nell'aggiornarli man mano che si verificano violazioni, consentendo al feedback di evolversi nel tempo.

Possibili considerazioni di progettazione:

  1. Se gli invarianti vengono aggiornati durante l'esecuzione di un test case che successivamente va in crash o va in timeout, l'aggiornamento potrebbe dover essere annullato. Una soluzione pratica consiste nell'applicare gli aggiornamenti a una copia degli invarianti e nel confermarli solo se il test case termina normalmente (cioè FSRV_RUN_OK).
  2. Man mano che il fuzzing procede e gli invarianti vengono aggiornati, le violazioni diventeranno naturalmente meno frequenti. Ciò rischia che AFL++ selezioni ripetutamente test case delle fasi iniziali (che generano più violazioni ma rappresentano stati del programma meno evoluti). Potrebbe essere necessario un aggiustamento di weight/perf_score/top_rated sul lato AFL++ per garantire che vengano selezionati i test case successivi, più rappresentativi.

Invarianti tra blocchi base

Binvariants attualmente si concentra sugli invarianti a singolo blocco. Un potenziale miglioramento è il supporto agli invarianti tra blocchi. Ciò richiede nuove strutture dati per tracciare i valori dei registri attraverso i confini dei blocchi, nonché strumentazione aggiuntiva per verificare le violazioni quando il controllo passa tra i blocchi.

Scarica lo strumento