Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 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
5129hace 3 mesesAú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 guiado por invariantes a nivel de registro para binarios

Logotipo de Binvariants

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

Este trabajo se presenta en nuestro artículo Binvariants: Enhancing Fuzzing of Closed-source Binary Executables via Register-level Likely Invariants | Diapositivas, que aparece en la 2026 ACM International Conference on the Foundations of Software Engineering (FSE’26).

  • Instalación de Binvariants
  • Uso de Binvariants
  • Notas adicionales
  • Vitrina de bugs


Flujo de trabajo de Binvariants
Flujo de trabajo de Binvariants

Cómo citar este repositorio: @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.}}
Desarrolladores: Zao Yang ([email protected]) y Stefan Nagy ([email protected])
Licencia: Licencia MIT
Descargo de responsabilidad: Este software se proporciona tal cual, sin garantía alguna.

Instalación de Binvariants

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

  • 1-Invariant_Learner/
  • 2-Fuzzer/

Para compilar cada uno, navegue al directorio correspondiente y ejecute los siguientes comandos:

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

Uso de Binvariants

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

Configuración

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

sudo sysctl -w kernel.randomize_va_space=0

Aprendizaje de invariantes probables a nivel de registro (RLI)

Para aprender invariantes, ejecute:

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

Los RLI 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 comenzar el fuzzing con Binvariants, ejecute:

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

Por ejemplo, ejecute el primer ensayo de una campaña de fuzzing de 48 horas desde el directorio raíz de Binvariants:

./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 consiste en aprender invariantes durante el fuzzing y actualizarlos a medida que se producen 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 de espera, es posible que la actualización deba revertirse. Una solución práctica es aplicar las actualizaciones a una copia de los invariantes y confirmarlas solo si el caso de prueba finaliza normalmente (es decir, FSRV_RUN_OK).
  2. A medida que se ejecuta el fuzzing y se actualizan los invariantes, las violaciones naturalmente se volverán menos frecuentes. Esto conlleva el riesgo de que AFL++ seleccione repetidamente casos de prueba de etapas tempranas (que desencadenan 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 y 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 bloque, así como instrumentación adicional para comprobar violaciones cuando el control se transfiere entre bloques.

Descargar herramienta