Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 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
511 mese 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

Logo di Binvariants

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

Questo lavoro è presentato nel nostro articolo Binvariants: Migliorare il Fuzzing di Eseguibili Binari Closed-source tramite Invarianti Probabili a Livello di Registro, in pubblicazione alla ACM International Conference on the Foundations of Software Engineering (FSE’26) del 2026.

  • Installazione di Binvariants
  • Utilizzo di Binvariants
  • Note aggiuntive
  • Vetrina dei Bug Trovati


Flusso di lavoro di Binvariants
Flusso di lavoro di Binvariants

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

Installazione di Binvariants

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

  • 1-Invariant_Learner/
  • 2-Fuzzer/

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

root@kitploit:~
./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é ha bisogno di indirizzi di blocchi di base consistenti tra l'apprendimento degli invarianti e il fuzzing:

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

Apprendimento degli Invarianti Probabili a Livello di Registro (RLIs)

Per apprendere gli invarianti, eseguire:

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

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

Fuzzing con RLIs

Per avviare il fuzzing con Binvariants, eseguire:

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

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

root@kitploit:~
./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 è apprendere gli invarianti durante il fuzzing e aggiornarli man mano che si verificano violazioni, consentendo al feedback di evolversi nel tempo.

Possibili considerazioni progettuali:

  1. Se gli invarianti vengono aggiornati durante l'esecuzione di un caso di test che successivamente va in crash o scade, l'aggiornamento potrebbe dover essere annullato. Una soluzione pratica è applicare gli aggiornamenti a una copia degli invarianti e confermarli solo se il caso di test termina normalmente (ad esempio, FSRV_RUN_OK).
  2. Man mano che il fuzzing viene eseguito e gli invarianti vengono aggiornati, le violazioni diventeranno naturalmente meno frequenti. Ciò rischia che AFL++ selezioni ripetutamente casi di test in fase iniziale (che attivano più violazioni ma rappresentano stati del programma meno evoluti). Potrebbe essere necessario un aggiustamento weight/perf_score/top_rated sul lato AFL++ per garantire che vengano selezionati casi di test successivi e più rappresentativi.

Invarianti tra Blocchi di Base

Binvariants si concentra attualmente su invarianti di singolo blocco. Un potenziale miglioramento è supportare invarianti tra blocchi. Richiede nuove strutture dati per tracciare i valori dei registri attraverso i confini dei blocchi, oltre a strumentazione aggiuntiva per verificare le violazioni quando il controllo viene trasferito tra blocchi.

Vetrina dei Bug Trovati

Se trovi altri bug utilizzando Binvariants, faccelo sapere!

Riconoscimenti

Questo materiale si basa su lavoro supportato dalla National Science Foundation (NSF) con Award No. 2419798, e dalla Defense Advanced Research Projects Agency (DARPA) con Award No. FA8750-24-2-0002, Subaward No. GR105409-SUB00001384.

Scarica lo strumento
ProgrammiBug Segnalati
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