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
VMPacker — Sistema de protección de máquina virtual para ELF ARM64 | Kitploit
Herramientas/GitHubGitHub/leochen-coremind/vmpacker
Seguridad de Sistemas EmbebidosFrameworks de ExploitsSeguridad IoTAnálisis de VulnerabilidadesIngeniería InversaFuzzingPruebas de PenetraciónSeguridad MóvilSeguridad de HardwareAnálisis de BinariosAnti-Bot
477170hace 4 mesesRevisado por Kitploit

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
GitHub
leochen-coremind/vmpacker

VMPacker

Sistema de protección de máquina virtual para ELF ARM64

Ver Repositorio

🛡️ VMPacker

Sistema de Protección de Máquina Virtual para ARM64 ELF

Traduce instrucciones nativas ARM64 a bytecode de VM personalizado para protección de código a nivel de función

🇨🇳 中文文档 • Características • Arquitectura • Inicio rápido • Uso • Licencia


Descripción general

VMPacker es un sistema de Protección de Máquina Virtual (VMP) para binarios ARM64 (AArch64) Linux ELF. Decodifica las instrucciones nativas ARM64 de la función objetivo en una representación intermedia, las traduce a bytecode de VM personalizado e inyecta un intérprete de VM embebido en el archivo ELF. En tiempo de ejecución, las funciones protegidas son ejecutadas por el intérprete de VM en lugar de forma nativa.

Concepto central

root@kitploit:~
Código nativo ARM64  →  Decodificar  →  Traducir  →  Bytecode de VM personalizado
                                                              ↓
                    ELF original  ←  Inyectar  ←  Stub del intérprete de VM

Características

🔄 Motor de traducción de instrucciones

  • 63 instrucciones de VM — que cubren ALU, memoria, bifurcación, llamadas al sistema y más
  • Decodificador basado en tablas — coincidencia de patrones según el Manual de Referencia de Arquitectura ARM
  • 121 instrucciones ARM64 compatibles (cobertura 100% de A64 base), incluyendo:
    • Aritmética/Lógica (ADD, SUB, MUL, AND, ORR, EOR, LSL, LSR, ASR, MVN, BIC, ORN, EON...)
    • Multiplicar-Extender (MADD, MSUB, SMADDL, SMSUBL, UMADDL, UMSUBL, SMULH, UMULH, UDIV, SDIV)
    • Movimiento de datos (MOV, MOVZ, MOVK, MOVN)
    • Acceso a memoria (LDR, STR, LDP, STP, LDPSW, LDADD, CAS, LDAR, STLR, LDAXR, STLXR — varios anchos y modos de direccionamiento)
    • Control de bifurcación (B, BL, BR, BLR, RET, B.cond, CBZ/CBNZ, TBZ/TBNZ)
    • Selección condicional (CSEL, CSINC, CSINV, CSNEG, CCMP, CCMN)
    • Campos de bits (UBFM, SBFM, BFM, EXTR)
    • Manipulación de bits (CLZ, CLS, RBIT, REV, REV16, REV32)
    • Aritmética con acarreo (ADC, ADCS, SBC, SBCS)
    • Carga/Almacenamiento SIMD (LD1, ST1)
    • Sistema/Barreras (SVC, MRS, MSR, ADRP/ADR, DMB, DSB, ISB, HLT, BRK, PRFM)

🔐 Protección multicapa

🖥️ Interfaz gráfica (GUI)

  • Aplicación de escritorio multiplataforma construida con Wails v2 (Go + Vue 3)
  • Componentes de interfaz Element Plus
  • Selección de funciones simbólicas + entrada manual de funciones (proteger por rango de direcciones)
  • Protección con un solo clic y registro de salida en tiempo real

Arquitectura

root@kitploit:~
vmp/
├── cmd/vmpacker/          # Punto de entrada CLI
│   ├── main.go            # Análisis de argumentos CLI + orquestación
│   └── vm_interp.bin      # Intérprete de VM compilado (GCC, go:embed)
│
├── pkg/                   # Biblioteca central Go
│   ├── arch/arm64/        # Soporte de arquitectura ARM64
│   │   ├── decoder.go     # Decodificador de instrucciones basado en tablas (implementa vm.Decoder)
│   │   ├── decode_*.go    # Tablas de patrones de decodificación (DP-IMM/DP-REG/Branch/LdSt)
│   │   ├── translator.go  # Traductor ARM64 → bytecode de VM
│   │   ├── tr_alu.go      # Traducción de instrucciones ALU
│   │   ├── tr_branch.go   # Traducción de instrucciones de bifurcación
│   │   ├── tr_loadstore.go # Traducción de instrucciones de memoria
│   │   ├── tr_bitfield.go # Traducción de instrucciones de campo de bits
│   │   └── tr_special.go  # Instrucciones especiales (ADRP/ADR)
│   ├── vm/                # Definiciones de ISA de VM
│   │   ├── types.go       # Tipos compartidos + interfaces (Decoder/Translator/Packer)
│   │   ├── opcodes.go     # Definiciones de 58+ opcodes de VM (valores mapeados aleatoriamente)
│   │   └── disasm.go      # Desensamblador de bytecode de VM
│   └── binary/elf/        # Manipulación de binarios ELF
│       ├── packer.go      # Inyección de VMP en ELF (secuestro PT_NOTE, generación de trampolín)
│       └── trampoline.go  # Generación de código de trampolín
│
├── stub/                  # Intérprete de VM en C (compilado a binario plano PIC)
│   ├── vm_interp_clean.c  # Bucle principal del intérprete + puntos de entrada
│   ├── vm_types.h         # Contexto de CPU de VM (vm_ctx_t)
│   ├── vm_opcodes.h       # Definiciones de opcodes en C (sincronizados con opcodes.go)
│   ├── vm_decode.h        # Utilidades de lectura de bytecode
│   ├── vm_token.h         # Codificación/decodificación de tokens + tabla de descriptores
│   ├── vm_dispatch.h      # Tabla de saltos de despacho indirecto
│   ├── vm_crc.h           # Verificación de integridad CRC32
│   ├── vm_sections.h      # Macros de dispersión de secciones de manejadores
│   ├── vm_interp.lds      # Script de enlace
│   └── vm_handlers/       # Manejadores de instrucciones modulares
│       ├── h_alu.h        # Operaciones aritméticas/lógicas
│       ├── h_mem.h        # Acceso a memoria
│       ├── h_branch.h     # Bifurcación/salto
│       ├── h_cmp.h        # Comparación/condicional
│       ├── h_mov.h        # Movimiento de datos
│       ├── h_stack.h      # Pila (PUSH/POP)
│       └── h_system.h     # Sistema (SVC/MRS/BLR/BR/RET)
│
├── vmp-gui/               # Interfaz gráfica Wails
│   ├── frontend/          # Vue 3 + Element Plus
│   └── backend/           # Enlaces del backend Go
│
└── build/                 # Herramientas precompiladas + artefactos de prueba

Diseño modular

El proyecto utiliza una arquitectura modular basada en interfaces, lo que facilita la extensión a nuevos ISAs y formatos binarios:

root@kitploit:~
// Interfaz del decodificador de arquitectura — extensible a x86, RISC-V
type Decoder interface {
    Decode(raw uint32, offset int) Instruction
    InstName(op int) string
}

// Interfaz del traductor de bytecode
type Translator interface {
    Translate(instructions []Instruction) (*TranslateResult, error)
}

// Interfaz del inyector de formato binario — extensible a PE, Mach-O
type Packer interface {
    Process() error
}

Pipeline de protección

root@kitploit:~
graph LR
    A[ELF de entrada] --> B[Localizar función objetivo]
    B --> C[Extraer instrucciones ARM64]
    C --> D[Decodificar ARM64]
    D --> E[Traducir a bytecode de VM]
    E --> F[Cifrar bytecode con XOR]
    F --> G[Inyectar intérprete de VM]
    G --> H[Generar trampolín]
    H --> I[Reemplazar entrada de función]
    I --> J[ELF protegido de salida]

Inicio rápido

Requisitos previos

  • Go 1.21+
  • GCC (aarch64-linux-gnu-gcc) — para compilar el stub
  • Linux ARM64 o entorno de compilación cruzada

Instalación

root@kitploit:~
git clone https://github.com/LeoChen-CoreMind/VMPacker.git
cd VMPacker
make all

Uso

Proteger por nombre de función

root@kitploit:~
# Proteger una función individual
./vmpacker -func check_license -v -o protected.elf original.elf

# Proteger múltiples funciones
./vmpacker -func "check_license,verify_token" -v -o protected.elf original.elf

Proteger por rango de direcciones

root@kitploit:~
# Especificar rango de direcciones
./vmpacker -addr "0x4006AC-0x400790:main" -v -o protected.elf original.elf

# Modo mixto
./vmpacker -addr "0x4006AC-0x400790:main" -func verify -o protected.elf original.elf

Inspeccionar información del ELF

root@kitploit:~
./vmpacker -info input.elf

Opciones de CLI

Compilación

Compilar el stub del intérprete de VM

root@kitploit:~
# Compilación estándar (GCC)
aarch64-linux-gnu-gcc -Os -nostdlib -fPIC -ffreestanding \
  -o stub.elf stub/vm_interp_clean.c \
  -T stub/vm_interp.lds
aarch64-linux-gnu-objcopy -O binary stub.elf vm_interp.bin

Compilar la herramienta CLI

root@kitploit:~
go build -o vmpacker ./cmd/vmpacker/

Compilar la GUI

root@kitploit:~
cd vmpacker
make gui

Referencia de ISA de VM

VMPacker define una Arquitectura de Conjunto de Instrucciones (ISA) personalizada con valores de opcode mapeados aleatoriamente para aumentar la dificultad de la ingeniería inversa.

📖 Para la tabla completa de opcodes con detalles de codificación, consulte la documentación en chino.

Categorías de instrucciones

Hoja de ruta

  • Integración completa de GUI — Integración completa del motor de protección GUI ↔ backend
  • Modo híbrido — Ejecución nativa parcial + protección VM parcial
  • Mapeo dinámico de opcodes — Generar mapeo ISA único por ejecución de protección

Contribuciones

¡Las contribuciones son bienvenidas! Por favor, siga estas pautas:

  1. Haga un fork del repositorio
  2. Cree una rama de funcionalidad: git checkout -b feature/nueva-arquitectura
  3. Realice sus cambios: git commit -m 'feat: añadir decodificador x86_64'
  4. Suba la rama: git push origin feature/nueva-arquitectura
  5. Cree una solicitud de extracción (Pull Request)

Convención de commits

Seguimos Conventional Commits:

  • feat: Nueva funcionalidad
  • fix: Corrección de errores
  • refactor: Refactorización de código
  • docs: Documentación
  • test: Pruebas

Licencia

Este proyecto está licenciado bajo la Licencia AGPL-3.0.

¿Por qué AGPL-3.0?

  • ✅ Copyleft fuerte — Cualquier modificación o trabajo derivado debe ser de código abierto bajo la misma licencia
  • ✅ Cláusula de uso en red — Proporcionar la funcionalidad de este software como servicio de red también requiere la divulgación del código fuente
  • ✅ Protege la tecnología central — Evita el uso comercial de código cerrado del motor de protección
  • ✅ Amigable para la comunidad — Libre para estudiar, investigar y mejorar — las mejoras deben compartirse
  • ✅ Licencias comerciales — Para uso comercial de código cerrado, contacte al autor para una licencia comercial

⚠️ Aviso de exención de responsabilidad

ESTE SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, EXTRACONTRACTUAL O DE OTRO MODO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.

Este proyecto está diseñado para proporcionar protección legítima de la propiedad intelectual a desarrolladores de software, ayudando a proteger algoritmos centrales y código crítico en software comercial contra ingeniería inversa no autorizada o robo.

Aviso para el usuario:

  1. Debe cumplir con todas las leyes y regulaciones aplicables en su jurisdicción al usar este software
  2. Está estrictamente prohibido usar este software para cualquier propósito ilegal, incluyendo pero no limitado a: desarrollo de malware, evasión de auditorías de seguridad, infracción de los derechos de propiedad intelectual de otros, o comprometer la seguridad de sistemas informáticos
  3. El(los) autor(es) no será(n) responsable(s) por ninguna consecuencia directa o indirecta resultante del uso de este software por parte de cualquier persona
  4. Al descargar, usar o distribuir este software, reconoce que ha leído y aceptado los términos anteriores

Autor

LeoChen — @LeoChen-CoreMind

Copyright © 2026 LeoChen. Todos los derechos reservados.

Descargar herramienta
CapaTécnicaDescripción
Protección VMISA personalizadaOpcodes mapeados aleatoriamente — los ingenieros inversos no pueden identificar directamente la semántica de las instrucciones
OpcodeCryptorCifrado de opcodes por instrucciónenc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9))
Inversión de bytecodeInversión del orden de ejecuciónLas instrucciones se almacenan en orden inverso; el intérprete recorre hacia atrás
Entrada tokenizadaTrampolín de 3 instruccionesLa función original se reemplaza con una entrada tokenizada, ocultando la ubicación real del bytecode
Despacho indirectoTabla de saltos de punteros a funciónSe llena en tiempo de ejecución en la pila, rompiendo las referencias cruzadas de IDA
Interfaz principalAnálisis de funcionesOpciones de protección
Lista de funcionesAnálisis y selecciónOpciones de protección
Ejecución de protecciónProtección completada
Registros en tiempo realProtección completada
OpciónValor por defectoDescripción
-func—Nombre(s) de función a proteger (separados por comas)
-addr—Proteger por dirección (0xINICIO-0xFIN[:nombre])
-oinput.vmpRuta del archivo de salida
-vfalseSalida detallada (mostrar desensamblado)
-striptrueEliminar tabla de símbolos
-debugfalseGenerar archivo de mapeo de depuración ARM64 → bytecode de VM
-tokentrueModo de entrada basado en tokens
-infofalseSolo imprimir información del ELF
CategoríaCantidadDescripción
Movimiento de datos3MOV_IMM64, MOV_IMM32, MOV_REG
Aritmética/Lógica21ADD, SUB, MUL, XOR, AND, OR, SHL, SHR, ASR, NOT, ROR, UMULH + variantes _IMM
Acceso a memoria8LOAD/STORE 8/16/32/64
Bifurcación/Salto13JMP, JE, JNE, JL, JGE, JGT, JLE, JB, JAE, JBE, JA, TBZ, TBNZ
Comparación6CMP, CMP_IMM, CCMP_REG, CCMP_IMM, CCMN_REG, CCMN_IMM
Pila2PUSH, POP
Sistema/Especial8NOP, HALT, RET, CALL_NATIVE, CALL_REG, BR_REG, SVC, MRS
SIMD2VLD16, VST16
Total63