Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Binvariants — Marco de fuzzing guiado por invariantes a nivel de registro para binarios de código cerrado, aprovechando violaciones de invariantes probables para descubrir fallos y errores en ejecutables binarios. | Kitploit
Herramientas/GitHubGitHub/futureslab/binvariants
Análisis de VulnerabilidadesExplotaciónFuzzingAnálisis de Binarios
GitHubfutureslab/binvariants

Binvariants

Marco de fuzzing guiado por invariantes a nivel de registro para binarios de código cerrado, aprovechando violaciones de invariantes probables para descubrir fallos y errores en ejecutables binarios.

Ver Repositorio
51hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Binvariants: Fuzzing de Binarios Guiado por Invariantes a Nivel de Registro

Logotipo de Binvariants

Este repositorio proporciona el código fuente de Binvariants: un prototipo de framework de fuzzing que aprovecha las violaciones de invariantes probables a nivel de registro para el fuzzing de binarios.

Este trabajo se presenta en nuestro artículo Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants, que aparecerá en la Conferencia Internacional ACM de 2026 sobre Fundamentos de Ingeniería de Software (FSE’26).

  • Instalación de Binvariants
  • Uso de Binvariants
  • Notas Adicionales
  • Casos de Errores Encontrados


Flujo de trabajo de Binvariants
Flujo de trabajo de Binvariants

Citando este repositorio: @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.}}
Desarrolladores:Zao Yang ([email protected]) y Stefan Nagy ([email protected])
Licencia:Licencia MIT
Aviso legal:Este software se proporciona tal cual, sin garantía.

Instalación de Binvariants

Binvariants está construido sobre AFL++ y QEMU-AFL. Instala las dependencias requeridas por estos proyectos antes de configurar 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 incluye dos componentes:

  • 1-Invariant_Learner/
  • 2-Fuzzer/

Para construir cada uno, navega a su directorio correspondiente y ejecuta los siguientes comandos:

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

Uso de Binvariants

Example/ contiene los scripts de ejemplo y casos de prueba para usar Binvariants para fuzzear el binario nconvert. Puedes modificar los scripts para fuzzear otros binarios.

Configuración

Antes de usar Binvariants, deshabilita ASLR, ya que necesita direcciones de bloques básicos consistentes entre el aprendizaje de invariantes y el fuzzing:

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

Aprendizaje de Invariantes Probables a Nivel de Registro (RLIs)

Para aprender invariantes, ejecuta:

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

Los RLIs inferidos se guardarán en el directorio especificado por BINV_TRACES_DIR en 1-learn_invs.sh, con el nombre: [PROGRAM]_trace_qemu_invs.

Fuzzing con RLIs

Para iniciar el fuzzing con Binvariants, ejecuta:

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

Por ejemplo, ejecuta la primera prueba de una campaña de fuzzing de 48 horas desde el directorio raíz de Binvariants:

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

Notas Adicionales

A continuación se presentan posibles mejoras para Binvariants.

Aprendizaje Adaptativo de Invariantes

Actualmente, Binvariants aprende invariantes antes del fuzzing y luego ejecuta el fuzzing por separado. Una posible mejora es aprender invariantes durante el fuzzing y actualizarlos a medida que ocurren violaciones, permitiendo que la retroalimentación evolucione con el tiempo.

Posibles consideraciones de diseño:

  1. Si los invariantes se actualizan durante la ejecución de un caso de prueba que posteriormente falla o agota el tiempo, es posible que sea necesario revertir la actualización. Una solución práctica es aplicar las actualizaciones a una copia de los invariantes y confirmarlas solo si el caso de prueba se completa normalmente (es decir, FSRV_RUN_OK).
  2. A medida que el fuzzing se ejecuta y los invariantes se actualizan, las violaciones naturalmente se volverán menos frecuentes. Esto corre el riesgo de que AFL++ seleccione repetidamente casos de prueba de etapas tempranas (que provocan más violaciones pero representan estados del programa menos evolucionados). Puede ser necesario un ajuste de weight/perf_score/top_rated en el lado de AFL++ para garantizar que se seleccionen casos de prueba posteriores más representativos.

Invariantes entre Bloques Básicos

Binvariants actualmente se centra en invariantes de un solo bloque. Una posible mejora es admitir invariantes entre bloques. Esto requiere nuevas estructuras de datos para rastrear los valores de los registros a través de los límites de los bloques, así como instrumentación adicional para verificar violaciones cuando el control se transfiere entre bloques.

Casos de Errores Encontrados

Si encuentras algún otro error usando Binvariants, ¡por favor notifícanos!

Agradecimientos

Este material se basa en trabajo apoyado por la National Science Foundation (NSF) bajo el Premio No. 2419798, y por la Defense Advanced Research Projects Agency (DARPA) bajo el Premio No. FA8750-24-2-0002, Sub-premio No. GR105409-SUB00001384.

Descargar herramienta
ProgramasErrores Reportados
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