
Analizador defensivo de macros de Office en Go: extrae VBA, lo desofusca y lo emula en un sandbox totalmente simulado para recuperar comandos, PowerShell, shellcode y payloads depositados sin ejecutar la muestra.
MaldocTrace es un analizador defensivo para documentos de Office maliciosos, escrito en Go. Extrae macros de VBA y de Excel 4.0 (XLM), reconstruye cadenas ofuscadas y emula las macros en un entorno totalmente simulado. La salida informa de lo que el documento haría: los comandos que ejecutaría, las cargas útiles que decodificaría y los archivos que dejaría caer. Todo ello está respaldado por evidencia que señala el módulo, procedimiento y línea (u hoja y celda) que lo produjo.
También se cubren los documentos sin macros. La inyección de plantillas remotas, los campos DDE, los objetos OLE vinculados e incrustados (incluidos los exploits de Equation Editor en RTF), las imágenes señuelo con hipervínculo y el VBA stomping se reportan como hallazgos estáticos.
.doc, .xls, .ppt), OOXML (.docx, .docm, .xlsx, .xlsm, .pptm), RTF y texto VBA sin procesar. Incluye descompresión MS-OVBA, propiedades de controles UserForm y límites de recursos contra bombas zip y contenedores malformados..xls (fórmulas BIFF8 descompiladas a partir de tokens analizados, usando las tablas de funciones MS-XLS) y .xlsm, incluidas hojas ocultas y muy ocultas;Auto_Open (cualquier nombre que Excel ejecutaría). Sigue GOTO, RUN, IF, WHILE/FOR/NEXT, ON.TIME y RETURN, y aplica FORMULA/FORMULA.FILL/SET.VALUE/SET.NAME, de modo que las macros autodescodificadoras reconstruyen su código real;EXEC, CALL, REGISTER y alias simulados (URLDownloadToFileA, ShellExecuteA, WinExec, CreateProcessA) y FOPEN/FWRITE. Las sondas anti-sandbox (GET.WORKSPACE, GET.WINDOW, GET.CELL) obtienen respuestas plausibles, marcadas como simuladas;attachedTemplate, RTF \*\template);ms-msdt (Follina);QUOTE) y fórmulas y vínculos DDE de Excel;\objdata ofuscado, cabeceras OLE1 corruptas), con detección de exploits de Equation Editor: el desbordamiento MTEF FONT (CVE-2017-11882 / CVE-2018-0802) y el desbordamiento MATRIX (CVE-2018-0798), además de la extracción de los bytes que siguen;Sheets("x").Range("A1"), Cells(r, c)), las propiedades del documento (BuiltInDocumentProperties("Comments"), propiedades personalizadas), las variables del documento (ActiveDocument.Variables) y los controles UserForm (TextBox.Text, Label.Caption) están todos disponibles para la macro emulada..docx. Los droppers suelen ocultar su payload en el cuerpo del documento y leerlo de vuelta mediante ActiveDocument.Paragraphs(n).Range.Text.ByRef, argumentos con nombre, compilación condicional, bucles, arrays y las funciones integradas de cadenas.Chr/StrReverse/Replace/concatenación. Cada valor registra cómo se reconstruyó (concatenation+Chr, StrReverse, ...).WScript.Shell, Shell, WMI Win32_Process.Create (tanto GetObject como CreateObject("winmgmts:..."))FileSystemObject, ADODB.Stream, XMLHTTP/WinHttpMSScriptControl.ScriptControlParagraphs, Range, Delete, SaveAs2Sheets, Worksheets, Range, Cells, Offset), compartido con el motor XLM, y ExecuteExcel4Macro/Application.Run hacia hojas de macrosVarPtr simulados-EncodedCommand de PowerShell, con plegado estático de concatenaciones 'ht'+'tp' antes de extraer las URLMultiByteToWideChar(CP_UTF7)certutil -decode, reproducido sobre un sistema de archivos virtual construido a partir de lo que escribió la macroScriptControl.AddCode, reportados como payloads de script en lugar de líneas de comandoevent-3, command-1, payload-1) y ubicaciones de origen. Las vistas secundarias se refieren a un elemento por su ID en lugar de repetir grandes blobs.Los binarios precompilados para Windows, Linux y macOS (x64 y ARM64) están en la página de Releases, junto con las sumas de verificación SHA-256. Las notas de cada versión provienen de CHANGELOG.md.
Requiere Go 1.23+.
go build -o maldocTrace ./cmd/maldoctrace
En Windows:
go build -o maldocTrace.exe ./cmd/maldoctrace
maldocTrace inspect <file>
maldocTrace extract <file> --out <dir> [--force]
maldocTrace analyze <file> [--format json|text|jsonl] [--timeout 30s] [--max-steps N]
[--input-format vba] [--show-strings] [--dump-payloads DIR]
maldocTrace analyze <dir> --recursive [--format jsonl] [--workers N]
maldocTrace version
| Opción | Descripción |
|---|---|
--format text | Informe legible por humanos (predeterminado). |
--format json | Informe JSON completo y versionado (esquema 1.3.0). Siempre incluye indicadores, diagnósticos, cadenas decodificadas y contenido completo del payload. |
--format jsonl | Un informe JSON por línea, para análisis por lotes con --recursive. |
--show-strings | Solo formato de texto. Enumera las cadenas reconstruidas, deduplicadas, con cada aparición de módulo/procedimiento/línea y el método de reconstrucción. |
--dump-payloads DIR | Escribe los payloads decodificados y los archivos depositados por la macro en DIR/<input-sha256>/, con un manifest.json. Los archivos reciben extensiones neutras (.bin, .txt), de modo que nada pueda ejecutarse con un doble clic. Los archivos existentes nunca se sobrescriben. |
--input-format vba | Analiza un archivo VBA de texto plano. |
--timeout, --max-steps | Presupuesto de tiempo por archivo y presupuesto de pasos del intérprete. |
Códigos de salida: 0 éxito (incluso cuando la muestra es maliciosa), 1 error de análisis o interno, 2 error de uso.
Los cuatro informes siguientes provienen de documentos maliciosos reales y muestran las principales rutas de recuperación. Los blobs largos se acortan con …. Los valores completos están en la salida JSON.
MultiByteToWideChar → EnumUILanguages)