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
LCSAJdump — Un enfoque basado en grafos y múltiples arquitecturas potenciado por ML para la detección de gadgets ROP | Kitploit
Herramientas/GitHubGitHub/chris1sflaggin/lcsajdump
Análisis EstáticoExplotaciónIngeniería InversaShellcodeAnálisis de BinariosAprendizaje AutomáticoPapers e InvestigaciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubchris1sflaggin/lcsajdump

LCSAJdump

Un enfoque basado en grafos y múltiples arquitecturas potenciado por ML para la detección de gadgets ROP

2729hace 2 mesesRevisado por Kitploit
Ver RepositorioSitio web

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

Logotipo de LCSAJdump

LCSAJdump

PyPI Downloads

Framework universal basado en grafos para el descubrimiento automatizado de gadgets

Status License: MIT



LCSAJdump es un marco de análisis estático diseñado para descubrir gadgets de Return-Oriented Programming (ROP) y Jump-Oriented Programming (JOP). A diferencia de los escáneres tradicionales, LCSAJdump es agnóstico respecto a la arquitectura y emplea un enfoque basado en grafos para descubrir vulnerabilidades invisibles para las herramientas lineales comunes.


¿Por qué LCSAJdump?

Los escáneres ROP comunes utilizan un enfoque lineal de "ventana deslizante" sobre los bytes ejecutables del binario. Este método falla sistemáticamente al identificar Shadow Gadgets: cadenas de ejecución que atraviesan bloques de memoria no contiguos conectados por saltos incondicionales o bifurcaciones condicionales.

LCSAJdump supera esta limitación reconstruyendo el Grafo de Flujo de Control (CFG) mediante el análisis LCSAJ (Secuencia Lineal de Código y Salto). Al modelar el binario como un grafo dirigido de bloques básicos, la herramienta identifica:

  1. Gadgets contiguos: Secuencias lineales estándar que terminan en una transferencia de flujo de control.
  2. Shadow Gadgets (no contiguos): Cadenas complejas que evitan los "bytes malos" (ej. bytes nulos) utilizando instrucciones que de otro modo serían inalcanzables mediante el escaneo lineal.

Características principales

  • Soporte multiarquitectura: Soporte nativo para RISC-V (64GC), x86-64 y ARM64, fácilmente extensible a otras arquitecturas mediante perfiles modulares.
  • Análisis basado en grafos: Segmenta la sección .text en bloques básicos LCSAJ y reconstruye las relaciones de flujo mediante un grafo de flujo de control inverso construido a medida (representación ligera de adyacencia, sin dependencia de grafos pesados).
  • Algoritmo Rainbow BFS: Búsqueda en anchura inversa propietaria que parte de los sumideros de flujo de control. Ahora cuenta con un filtro de unicidad temprana O(1) y límites de instrucciones con tope duro para evitar la explosión de estados y garantizar un análisis ultrarrápido incluso en binarios CISC densos.
  • Construcción perezosa del grafo: La construcción del grafo retiene solo los nodos alcanzables desde las colas de los gadgets dentro de --depth saltos, reduciendo drásticamente la memoria y el tiempo de construcción en binarios grandes (ej. libc) mientras produce resultados idénticos.
  • Motor de clasificación en dos etapas: Combina una línea base heurística ultra rápida (optimizada mediante Bayes con Optuna) con un modelo ML LightGBM de aprendizaje profundo que refina la calidad del gadget utilizando características estructurales y semánticas.
  • Inferencia sin sobrecarga: El modelo ML está integrado de forma nativa y se ejecuta por defecto, procesando decenas de miles de nodos en segundos. Actúa como un filtro altamente efectivo, rechazando saltos ruidosos y devolviendo cadenas de gadgets limpias y altamente controlables. Alojado en Hugging Face.
  • Parámetros de poda: Factor de "Oscuridad" configurable para equilibrar la profundidad del análisis y el rendimiento, evitando bucles infinitos en grafos cíclicos.

Arquitecturas compatibles

(ver Puntos de referencia).

LCSAJdump está diseñado para ser universal. Actualmente compatibles:

  • RISC-V de 64 bits (RV64GC): Soporte completo para instrucciones comprimidas de 16 bits.
  • x86-64: Maneja instrucciones superpuestas de longitud variable. Navega de forma segura por grafos densos sin explosión de memoria.
  • ARM64: Maneja instrucciones de 32 bits y filtra profundamente los gadgets inflados mediante penalizaciones heurísticas estrictas.
  • Otras arquitecturas: Se pueden implementar fácilmente definiendo nuevos perfiles en config.py.

Instalación

Mediante Pip (Recomendado)

root@kitploit:~
pip install lcsajdump

Desde el código fuente (Desarrollo)

root@kitploit:~
git clone [https://github.com/Chris1sFlaggin/LCSAJdump.git](https://github.com/Chris1sFlaggin/LCSAJdump.git)
cd LCSAJdump
pip install -r requirements.txt


Uso

LCSAJdump ofrece una potente CLI para un análisis preciso de binarios:

Análisis estándar (RISC-V por defecto):

root@kitploit:~
python LCSAJdump.py <ruta_al_binario>

Análisis avanzado (especificando arquitectura y archivo de salida):

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <ruta_al_binario>

Exportar como JSON con filtro de caracteres malos:

root@kitploit:~
lcsajdump -a x86_64 -d 20 -k 5 -b "000a0d" --json -o gadgets.json <ruta_al_binario>

Nota: Use -o después de --json para guardar JSON en un archivo. Sin --json, -o guarda texto plano.

Guardar salida en texto plano:

root@kitploit:~
lcsajdump -a riscv64 -d 15 -k 10 -l 20 -o gadgets.txt <ruta_al_binario>

Analizar todas las secciones ejecutables:

root@kitploit:~
lcsajdump --all-exec -d 25 -k 10 -l 30 <ruta_al_binario>

Forzar clasificación estrictamente algorítmica (omitir ML):

root@kitploit:~
lcsajdump --algo <ruta_al_binario>

Opciones de la CLI

BanderaTipoPredeterminadoDescripción
-a, --archTEXTautoArquitectura objetivo (auto, riscv64, x86_64, arm64). Se detecta automáticamente desde la cabecera ELF.
-d, --depthINTEGER20Profundidad máxima de búsqueda en bloques LCSAJ. Controla la longitud de la cadena.
-k, --darknessINTEGER5Umbral de poda: número máximo de visitas por nodo. Mayor = más gadgets, escaneo más lento.
-l, --limitINTEGER10Número máximo de gadgets a mostrar en la salida.
-s, --min-scoreINTEGER0Puntuación heurística mínima para que un gadget aparezca en los resultados.
-i, --instructionsINTEGER15Número máximo de instrucciones contenidas en un solo nodo LCSAJ.
-v, --verboseFLAG—Activa la salida detallada para resultados por gadget.
-o, --outputPATH—Escribe la salida en un archivo. Texto plano por defecto; úselo con --json para salida JSON.
-b, --bad-charsTEXT—Bytes hexadecimales a filtrar de las direcciones de los gadgets (ej. "000a0d").
--jsonFLAG—Salida de gadgets como JSON estructurado. Combínalo con -o para guardar en archivo.
--all-execFLAG—Analiza todas las secciones ejecutables, no solo .text.
-al, --algoFLAG—Usa estrictamente la clasificación algorítmica (omite ML).


Precisión y puntos de referencia

LCSAJdump está respaldado por un conjunto de pruebas riguroso e incrementablemente validado ubicado en el directorio benchmarkTests/.

A través de 14 iteraciones principales de ingeniería de características semánticas, el modelo híbrido ha aprendido a discriminar gadgets basándose en efectos secundarios reales de la memoria (extraídos mediante ejecución simbólica angr) en lugar de heurísticas puramente sintácticas.

Evaluado con validación cruzada de 5 pliegues consciente de grupos (los binarios de prueba nunca se vieron durante el entrenamiento), el clasificador alcanza NDCG@1 = 0.914 ± 0.047 y NDCG@10 = 0.922 ± 0.052, lo que significa que los gadgets más útiles se colocan consistentemente en la parte superior de la salida. El motor de dos etapas prioriza con éxito las secuencias limpias de extracción de pila y las llamadas tipo ret2csu, mientras penaliza fuertemente los saltos de desplazamiento fijo propensos a fallos que engañan a los escáneres estáticos tradicionales.


Guía para desarrolladores y de aprendizaje automático

El repositorio está estructurado para apoyar tanto a usuarios finales como a investigadores de ML.

  • Motor de producción: La CLI principal integra sin problemas el motor de inferencia utilizando modelos alojados en Hugging Face, sin necesidad de carga manual del modelo.
  • Pipeline de ML: El directorio lcsajdump/ml_study/ contiene el pipeline completo utilizado para entrenar los modelos:
    • build_dataset.py: Extrae características estructurales y semánticas de un corpus de binarios CTF.
    • train_model.py: Entrena el modelo LightGBM LambdaRank y genera los modelos .pkl.
    • kfold_cv.py: Valida el conjunto de datos mediante validación cruzada K-Fold.

Cómo contribuir (¡Abierto para bifurcaciones!)

El marco está abierto a nuevas implementaciones. Para agregar una nueva arquitectura:

  1. Bifurca el repositorio.
  2. Abre lcsajdump/core/config.py.
  3. Agrega un nuevo perfil al diccionario ARCH_PROFILES, definiendo mnemónicos de salto, mnemónicos de retorno y registros para la arquitectura deseada (ej. x86_64).
  4. Envía un Pull Request.

Licencia

Este proyecto se publica bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.


Enlace del proyecto

Visita la página web del proyecto: Página web de LCSAJdump


Realizado por Chris1sflaggin como proyecto de investigación para el descubrimiento automatizado de gadgets.
Descargar herramienta
--versionFLAG—Muestra la versión instalada y sale.
--helpFLAG—Muestra el mensaje de ayuda y sale.