Marco de trabajo multi-motor para desempaquetar y analizar binarios protegidos por VM utilizando rastreo de manchas dinámico, ejecución simbólica, clasificación de patrones y priorización impulsada por ML para automatizar la ingeniería inversa de protectores comerciales y personalizados.
El proyecto será público a mediados de octubre (Refactorización en progreso)
Marco avanzado de detección y análisis de máquinas virtuales
VMDragonSlayer es un marco integral para analizar binarios protegidos por protectores basados en Máquinas Virtuales (VM) como VMProtect 2.x/3.x, Themida y VMs maliciosas personalizadas. El marco combina múltiples motores de análisis, incluyendo Seguimiento Dinámico de Manchas (DTT), Ejecución Simbólica (SE), Clasificación de Patrones y Aprendizaje Automático para automatizar el proceso de ingeniería inversa.
Objetivo: Transformar el análisis complejo de binarios protegidos de semanas/meses de trabajo manual en un análisis estructurado y automatizado con resultados explicables.
| Dominio | Motor / Módulo | Destacados |
|---|
| Descubrimiento de VM | analysis.vm_discovery | Identificación del despachador y tabla de manejadores, heurísticas de VM anidadas |
| Análisis de Patrones | analysis.pattern_analysis | Basado en reglas + similitud + ML (selección automática híbrida) |
| Seguimiento de Manchas | analysis.taint_tracking | Seguimiento de manchas a nivel de byte impulsado por Intel Pin, descubrimiento de manejadores, confianza de flujo |
| Ejecución Simbólica | analysis.symbolic_execution.executor | Exploración ponderada por ML con PathPrioritizer, seguimiento de restricciones y estados |
| Orquestación Híbrida | (núcleo Python) | Flujos de trabajo secuenciales / paralelos / adaptativos (el informe de Ghidra indica implementado) |
| Datos Sintéticos | data/training/synthetic_sample_generator.py | Mutación de ofuscación, generación de muestras multiarquitectura |
| Base de Datos de Patrones | data/patterns/ | JSON + BD mejorada + patrones runtime respaldados por SQLite |
| Plugin Ghidra | plugins/ghidra/ | Integración de UI en progreso (faltan varias plantillas) |
| Esquemas / Validación | data/schemas/ | Formatos de salida de análisis y patrones validados por esquemas JSON |
VMDragonSlayer utiliza una arquitectura modular donde múltiples motores de análisis trabajan juntos:
graph TD
A[Motor de Descubrimiento de VM] --> B[Clasificador de Patrones/ML]
B --> C[Motor de Ejecución Simbólica]
B --> D[Seguimiento Dinámico de Manchas]
D --> C
subgraph FuentesDeDatos ["Fuentes de Datos"]
E[Base de Datos de Patrones]
F[Modelos ML - PoC]
end
subgraph Coordinación
G[Orquestador - Gestión y Coordinación de Flujos de Trabajo]
end
E --> B
F --> B
A --> G
B --> G
C --> G
D --> G
E --> G
F --> G
G --> H[Servidor API REST]
G --> I[Plugins - Herramientas RE]dragonslayer.analysis.vm_discovery)dragonslayer.analysis.taint_tracking)dragonslayer.analysis.pattern_analysis)dragonslayer.analysis.symbolic_execution)dragonslayer.ml)VMDragonSlayer/
├── dragonslayer/ # Paquete principal Python
│ ├── analysis/ # Motores de análisis
│ │ ├── vm_discovery/ # Detección y clasificación de VM
│ │ ├── pattern_analysis/ # Coincidencia de patrones y clasificación ML
│ │ ├── symbolic_execution/ # Motor de ejecución simbólica
│ │ ├── taint_tracking/ # Análisis dinámico de manchas
│ │ └── anti_evasion/ # Contramedidas de anti-análisis
│ ├── api/ # Servidor y cliente API REST
│ ├── core/ # Componentes principales del marco
│ ├── ml/ # Pipeline de aprendizaje automático
│ ├── analytics/ # Informes y métricas de análisis
│ ├── gpu/ # Soporte de aceleración GPU
│ ├── utils/ # Funciones de utilidad
├── data/ # Archivos de configuración y datos
│ ├── patterns/ # Base de datos de patrones
│ ├── models/ # Modelos ML y metadatos
│ │ ├── pretrained/ # Modelos preentrenados (PoC)
│ │ └── metadata/ # Metadatos y esquemas de modelos
│ ├── samples/ # Archivos de muestra y registros
│ ├── schemas/ # Esquemas JSON para validación
│ └── training/ # Configuraciones de entrenamiento
├── plugins/ # Plugins de herramientas de ingeniería inversa
│ ├── ghidra/ # Plugin Ghidra (Java/Gradle)
│ ├── idapro/ # Plugin IDA Pro (Python)
│ └── binaryninja/ # Plugin Binary Ninja (Python)
├── tests/ # Suite de pruebas
├── documentation/ # Documentación
└── LICENSE # Licencia GPL v3
VMDragonSlayer se integra con las principales herramientas de ingeniería inversa:
Nota: Los modelos ML incluidos son implementaciones conceptuales básicas diseñadas para fines de investigación y educativos.
# Esto ahora funciona perfectamente:
from dragonslayer.core.orchestrator import Orchestrator, AnalysisType
orchestrator = Orchestrator()
result = orchestrator.analyze_binary("your_binary.exe", analysis_type=AnalysisType.VM_DISCOVERY)
# Los resultados están correctamente estructurados:
vmd = result.get("vm_discovery", {})
print(f"VM detected: {vmd.get('vm_detected', False)}")
print(f"Handlers found: {len(vmd.get('handlers_found', []))}")
# 1. Instalar con todas las dependencias
pip install -r requirements.txt
pip install -e .
# Clonar repositorio
git clone https://github.com/poppopjmp/VMDragonSlayer.git
cd VMDragonSlayer
# INSTALACIÓN ACTUALIZADA
# Instalar todas las dependencias requeridas incluyendo z3-solver
pip install -r requirements.txt
# Instalar el marco en modo desarrollo
pip install -e .
# Instalación solo CPU (funcionalidad básica)
pip install -r requirements.txt
pip install -e .
# GPU NVIDIA con CUDA 12.x (serie RTX 30xx/40xx)
pip install -r requirements.txt
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -e .
# GPU NVIDIA con CUDA 11.8 (GPUs más antiguas)
pip install -r requirements.txt
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install -e .
python -m venv venv source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
pip install -r requirements.txt
cd dragonslayer pip install -e .
Elija su desensamblador preferido:
cd plugins/ghidra
./build.bat # Windows
# o
./build.sh # Linux/macOS
# Instalar en Ghidra
cp dist/VMDragonSlayer.zip $GHIDRA_INSTALL_DIR/Extensions/
from dragonslayer.core.orchestrator import Orchestrator, AnalysisType
# Inicializar orquestador (carga la configuración predeterminada automáticamente)
orchestrator = Orchestrator()
# Analizar un binario
result = orchestrator.analyze_binary("path/to/protected_binary.exe", analysis_type=AnalysisType.VM_DISCOVERY)
# Extraer resultados del descubrimiento de VM
vmd = result.get("vm_discovery", {})
print(f"Protección VM Detectada: {vmd.get('vm_detected', False)}")
print(f"Número de Manejadores: {len(vmd.get('handlers_found', []))}")
print(f"Éxito del Análisis: {result.get('success', False)}")
| Herramienta | Estado | ETA | Notas |
|---|---|---|---|
| API Directa | Estable | Disponible Ahora | Enfoque recomendado |
| Plugin Ghidra | En Progreso | Octubre 2025 | Funcionalidad básica disponible |
| Plugin IDA Pro | En Desarrollo | Noviembre 2025 | Trabajo en progreso - no funcional |
| Plugin Binary Ninja | En Desarrollo | Noviembre 2025 | Trabajo en progreso - no funcional |
VMDragonSlayer utiliza una arquitectura modular con múltiples motores de análisis:
El marco incluye varios modelos conceptuales:
# Configuración principal
export VMDS_CONFIG_PATH="/ruta/a/config"
export VMDS_MODEL_PATH="/ruta/a/modelos"
export VMDS_LOG_LEVEL="INFO"
# Configuración de base de datos
export VMDS_DB_URL="sqlite:///vmds.db"
# Configuración de API
export VMDS_API_HOST="localhost"
export VMDS_API_PORT="8000"
data/database_config.json: Configuración de base de datosdata/taint_config.properties: Parámetros de análisis de manchasdata/models/model_registry_config.toml: Configuración de modelos MLfrom dragonslayer.core.config import Config
from dragonslayer.analysis.vm_discovery import VMDiscoveryEngine
from dragonslayer.analysis.taint_tracking import TaintTracker
# Configuración personalizada
config = Config({
'vm_discovery': {
'min_handler_count': 10,
'dispatcher_threshold': 0.8
},
'taint_tracking': {
'precision': 'byte_level',
'max_depth': 1000
}
})
# Inicializar motores específicos
vm_engine = VMDiscoveryEngine(config)
taint_tracker = TaintTracker(config)
# Ejecutar análisis dirigido
vm_result = vm_engine.analyze("binary.exe")
if vm_result.vm_detected:
taint_result = taint_tracker.analyze(vm_result.handlers)
from dragonslayer.workflows.manager import WorkflowManager
# Procesar múltiples binarios
manager = WorkflowManager()
results = manager.process_batch([
"sample1.exe",
"sample2.exe",
"sample3.exe"
])
# Generar informe resumido
manager.generate_report(results, "analysis_report.json")
¡Agradecemos las contribuciones! Por favor, consulte:
Este proyecto está licenciado bajo la Licencia Pública General GNU v3.0. Consulte LICENSE para más detalles.
Si utiliza VMDragonSlayer en su investigación, por favor cite:
@software{vmdragonslayer_2025,
title = {VMDragonSlayer: Automated VM-based Binary Protection Analysis},
author = {Panico, Agostino},
year = {2025},
url = {https://github.com/poppopjmp/VMDragonSlayer}
}
Un agradecimiento especial a la comunidad de ingeniería inversa y a los desarrolladores de las herramientas y bibliotecas de análisis subyacentes que hacen posible este marco.