
Un volcador dinámico de VMP y reparador de importaciones, impulsado por VTIL.

Un volcador VMP dinámico y reparador de importaciones, impulsado por VTIL. Funciona para VMProtect 3.X x64.

VMPDump.exe <Target PID> "<Target Module>" [-ep=<Entry Point RVA>] [-disable-reloc]
Argumentos:
<Target PID>: El ID del proceso objetivo, en forma decimal o hexadecimal.<Target Module>: El nombre del módulo que debe volcarse y repararse. Puede ser una cadena vacía ("") si se desea el módulo de imagen del proceso.[-ep=<Entry Point RVA>]: Un RVA de punto de entrada proporcionado opcionalmente, en forma hexadecimal. VMPDump simplemente sobrescribe el Punto de Entrada en el encabezado opcional con este valor.[-disable-reloc]: Una configuración opcional para indicar a VMPDump que marque que las reubicaciones han sido eliminadas en la imagen de salida, forzando a la imagen a cargarse en el ImageBase volcado. Esto es útil si se desean volcados ejecutables.La inicialización y desempaquetado de VMProtect deben estar completos en el proceso objetivo antes de ejecutar VMPDump. Esto significa que debe estar en o más allá del OEP (Punto de Entrada Original). La imagen volcada y reparada aparecerá en el directorio del módulo de imagen del proceso, bajo el nombre <Target Module Name>.VMPDump.<Target Module Extension>.
VMProtect inyecta stubs para cada llamada o salto de importación. Estos stubs resuelven el thunk 'ofuscado' en la sección .vmpX y añaden una constante fija para 'desofuscarlo'. Las llamadas o saltos en sí mismos se despachan entonces con una instrucción ret.
VMPDump escanea todas las secciones ejecutables en busca de estos stubs y los eleva a VTIL usando el elevador VTIL x64. Luego se realiza un análisis sobre estos stubs para determinar qué tipo de llamada debe reemplazarse y qué bytes deben sobrescribirse.
Una vez que se han recuperado todas las llamadas, VMPDump crea una nueva tabla de importaciones y añade thunks a la IAT existente. Las llamadas a los stubs de importación de VMP se reemplazan con llamadas directas a estos thunks.
Tenga en cuenta que en rutinas mutadas, hay situaciones en las que no hay suficientes bytes para reemplazar la llamada al stub de importación de VMP con una llamada directa al thunk, ya que esta última es 1 byte más grande. En estos casos, la sección se extiende y se inyecta un stub que salta al thunk de importación. La llamada al stub de importación de VMP se reemplaza entonces con una llamada relativa de 5 bytes o un salto a dicho stub inyectado.
mkdir build && cd build
cmake -G "Visual Studio 16 2019" ..
cmake --build . --config Release
Compilar en VS es tan simple como reemplazar los directorios de include/library a VTIL-NativeLifers/VTIL-Core/Keystone/Capstone en el vcxproj.
El proyecto requiere C++20.
Debido a que las secciones de código se escanean linealmente, particularmente en código fuertemente mutado y ofuscado, algunas llamadas de stub de importación pueden omitirse y, por lo tanto, no resolverse. Sin embargo, VMPDump incluye soluciones para la mayoría de las inconsistencias de mutación de VMProtect, por lo que debería producir resultados decentes incluso en código fuertemente mutado.
Si encuentra esto, por favor cree un issue con la información relevante y lo revisaré.
Licenciado bajo la Licencia GPL-3.0. No se proporciona garantía de ningún tipo.