
Desempaqueta y desofusca binarios protegidos con VMProtect 2 mediante un explorador de VM basado en emulación, un perfilador de handlers y un recompilador LLVM experimental para la desvirtualización.
Este repositorio es una colección de herramientas heredadas para trabajar con binarios protegidos con VMProtect 2.
Estas herramientas permiten desempaquetar, analizar y realizar desvirtualización experimental de software protegido con VMProtect 2. En el núcleo de esta colección se encuentra vmprofiler, una biblioteca de utilidades que proporciona la lógica fundamental utilizada por todas las demás herramientas. Es responsable de identificar componentes clave de VMProtect 2, como los manejadores de VM (VM handlers), la tabla de manejadores, las transformaciones y más.
Las lecciones aprendidas de este proyecto de más de 4 años deben transmitirse a quienes estén interesados en la desvirtualización.
Este proyecto intenta identificar manejadores de VM individuales. Este enfoque es frágil, no escala y puede ser derrotado mediante cambios en la arquitectura de la máquina virtual (interconexión de múltiples manejadores, manejadores complejos, etc.). En cambio, abogo por una estrategia incremental de elevación (lifting) y recuperación de flujo de control con una lógica mínima de ofuscación específica de la VM. Herramientas como Saturn, Dna by Colton, Triton y Mergen han desofuscado VMProtect con éxito con poca o ninguna identificación de manejadores específicos de la VM. Este repositorio documenta la arquitectura de VMProtect 2 y sirve como advertencia: evite construir herramientas de desvirtualización que dependan en gran medida de la identificación de manejadores específicos de la máquina virtual.
Un enfoque semigenérico para la desvirtualización de VMProtect requiere un marco robusto que admita propagación de carga/almacenamiento, propagación de constantes de sección, DCE y un puñado de otras optimizaciones simples. Muchas personas intentan usar LLVM para recompilar a código nativo; sin embargo, creo que este enfoque siempre dará como resultado un resultado inferior al deseable. Tenemos nuestro propio marco, blare2, que ofrece capacidades limpias de elevación y descenso 1:1 que aprovechamos para nuestros propósitos de desofuscación. Si está interesado en servicios de consultoría para desofuscación, esto es algo que podemos ofrecer siempre que tengamos disponibilidad en la agenda.
vmemu
Una herramienta de exploración de máquinas virtuales basada en Unicorn Engine.
Permite desempaquetar programas protegidos y analizar el flujo de control dentro de un vmenter específico.
Esta herramienta genera un archivo .vmp2 que contiene el grafo de flujo de control de la entrada de VM dada.
El archivo .vmp2 resultante puede pasarse a vmdevirt para recompilar la función de vuelta a x86 nativo y reintegrarla en el binario original. Tenga en cuenta que esto NO es solo un rastreador simple que descubrirá únicamente una única ruta a través de una función; en realidad identifica jccs virtuales y explorará todo el flujo de control virtualizado.
vmdevirt
Un recompilador experimental basado en LLVM para archivos .vmp2.
Aunque es funcional, se considera altamente experimental e inestable, y generalmente no se recomienda este enfoque.
vmassembler
Un ensamblador experimental para codificar operaciones de máquina virtual definidas por el usuario.
Este proyecto demuestra un profundo conocimiento técnico de la arquitectura de la máquina virtual de VMProtect 2.
vmhook
Una herramienta diseñada para engancharse a la máquina virtual de VMProtect 2 en tiempo de ejecución, permitiendo una introspección detallada de .
Siga las instrucciones de esta página.
vmhookConfiguración para vmassembler, vmemu, vmprofiler y vmprofiler-cli:
cmake -B build
cmake --build build
Con vmdevirt (¡descargará y compilará LLVM!):
cmake -B build -DBUILD_VMDEVIRT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
Con vmprofiler-qt:
cmake -B build -DBUILD_VMPROFILER_QT=ON
cmake --build build
Ambos módulos opcionales:
cmake -B build -DBUILD_VMDEVIRT=ON -DBUILD_VMPROFILER_QT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
Estas herramientas se proporcionan únicamente con fines educativos y de investigación. No deben utilizarse para actividades ilegales, acceso no autorizado o violaciones de la DMCA u otras leyes. Las herramientas en sí mismas no violan ninguna regulación de la DMCA. Todo el trabajo es creación original mía, y cualquier acción realizada por los usuarios de estas herramientas es responsabilidad exclusiva de dichos usuarios y no refleja las acciones ni intenciones del autor.
vmprofiler
La biblioteca de utilidades principal que impulsa todas las demás herramientas.
Incluye emparejamiento de patrones de manejadores de VM, extracción de tablas de manejadores, eliminación de código muerto (DCE) y otras rutinas de análisis esenciales.
vmprofiler-cli
Una interfaz de línea de comandos para vmprofiler, que permite a los usuarios mostrar e inspeccionar la información extraída en formato textual.
vmprofiler-qt
Un desensamblador gráfico basado en Qt para el bytecode de VMProtect 2, que proporciona una exploración interactiva y visual del código virtualizado.