
Defensiver Office-Makro-Analysator in Go: extrahiert VBA, deobfuskiert es und emuliert es in einer vollständig simulierten Sandbox, um Befehle, PowerShell, Shellcode und abgelegte Payloads wiederherzustellen, ohne die Probe auszuführen.
MaldocTrace ist ein defensiver Analyzer für bösartige Office-Dokumente, geschrieben in Go. Er extrahiert VBA- und Excel 4.0 (XLM)-Makros, rekonstruiert obfuskierte Zeichenketten und emuliert die Makros in einer vollständig simulierten Umgebung. Die Ausgabe berichtet, was das Dokument tun würde: die Befehle, die es ausführen würde, die Payloads, die es dekodieren würde, und die Dateien, die es ablegen würde. All dies wird durch Belege gestützt, die auf das Modul, die Prozedur und die Zeile (oder das Arbeitsblatt und die Zelle) verweisen, die es erzeugt haben.
Dokumente ganz ohne Makros werden ebenfalls abgedeckt. Remote-Template-Injection, DDE-Felder, verknüpfte und eingebettete OLE-Objekte (einschließlich Equation-Editor-Exploits in RTF), mit Hyperlinks versehene Köderbilder und VBA-Stomping werden als statische Befunde gemeldet.
.doc, .xls, .ppt), OOXML (.docx, .docm, .xlsx, .xlsm, .pptm), RTF und roher VBA-Text. Enthält MS-OVBA-Dekompression, UserForm-Steuerelementeigenschaften und Ressourcenlimits gegen Zip-Bomben und fehlerhafte Container..xls (BIFF8-Formeln dekompiliert aus geparsten Tokens unter Verwendung der MS-XLS-Funktionstabellen) und .xlsm, einschließlich ausgeblendeter und sehr ausgeblendeter Blätter;Auto_Open beginnt (jeder Name, den Excel ausführen würde). Er folgt GOTO, RUN, IF, WHILE/FOR/NEXT, ON.TIME und RETURN und wendet FORMULA/FORMULA.FILL/SET.VALUE/SET.NAME an, sodass selbstdekodierende Makros ihren echten Code rekonstruieren;EXEC, CALL, REGISTER und Aliase (URLDownloadToFileA, ShellExecuteA, WinExec, CreateProcessA) sowie FOPEN/FWRITE. Anti-Sandbox-Probes (GET.WORKSPACE, GET.WINDOW, GET.CELL) erhalten plausible Antworten, die als simuliert gekennzeichnet werden;attachedTemplate, RTF \*\template);ms-msdt (Follina)-Moniker;QUOTE-kodierter) sowie Excel-DDE-Formeln und -Verknüpfungen;\objdata, beschädigte OLE1-Header), mit Erkennung von Equation-Editor-Exploits: der MTEF-FONT-Überlauf (CVE-2017-11882 / CVE-2018-0802) und der MATRIX-Überlauf (CVE-2018-0798), plus Extraktion der nachfolgenden Bytes;Sheets("x").Range("A1"), Cells(r, c)), Dokumenteigenschaften (BuiltInDocumentProperties("Comments"), benutzerdefinierte Eigenschaften), Dokumentvariablen (ActiveDocument.Variables) und UserForm-Steuerelemente (TextBox.Text, Label.Caption) stehen alle dem emulierten Makro zur Verfügung..docx. Dropper verstecken ihre Payload oft im Dokumenttextkörper und lesen sie über ActiveDocument.Paragraphs(n).Range.Text zurück.ByRef-Parameter, benannte Argumente, bedingte Kompilierung, Schleifen, Arrays und die String-Built-ins.Chr/StrReverse/Replace/Verkettung. Jeder Wert zeichnet auf, wie er rekonstruiert wurde (concatenation+Chr, StrReverse, ...).WScript.Shell, Shell, WMI Win32_Process.Create (sowohl GetObject als auch CreateObject("winmgmts:..."))FileSystemObject, ADODB.Stream, XMLHTTP/WinHttpMSScriptControl.ScriptControlParagraphs, Range, Delete, SaveAs2Sheets, Worksheets, Range, Cells, Offset), gemeinsam mit der XLM-Engine genutzt, sowie ExecuteExcel4Macro/Application.Run in MakroblätterVarPtr-Zeigern-EncodedCommand-Dekodierung mit statischer Faltung von 'ht'+'tp'-Verkettungen, bevor URLs extrahiert werdenMultiByteToWideChar(CP_UTF7) übergeben werdencertutil -decode, reproduziert über ein virtuelles Dateisystem, das aus dem aufgebaut wird, was das Makro geschrieben hatScriptControl.AddCode übergeben werden, gemeldet als Skript-Payloads statt als Befehlszeilenevent-3, command-1, payload-1) und Quellorte. Sekundäre Ansichten verweisen auf ein Element über seine ID, statt große Blobs zu wiederholen.Vorkompilierte Binärdateien für Windows, Linux und macOS (x64 und ARM64) finden Sie auf der Releases-Seite, zusammen mit SHA-256-Prüfsummen. Die Versionshinweise zu jedem Release stammen aus CHANGELOG.md.
Erfordert Go 1.23+.
go build -o maldocTrace ./cmd/maldoctrace
Unter 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
| Option | Beschreibung |
|---|---|
--format text | Menschenlesbarer Bericht (Standard). |
--format json | Vollständiger, versionierter JSON-Bericht (Schema 1.3.0). Er enthält immer Indikatoren, Diagnosen, dekodierte Strings und den vollständigen Payload-Inhalt. |
--format jsonl | Ein JSON-Bericht pro Zeile, für die Batch-Analyse mit --recursive. |
--show-strings | Nur Textformat. Listet die rekonstruierten Strings dedupliziert auf, mit jedem Vorkommen in Modul/Prozedur/Zeile und der Rekonstruktionsmethode. |
--dump-payloads DIR | Schreibt dekodierte Payloads und vom Makro abgelegte Dateien nach DIR/<input-sha256>/, mit einer manifest.json. Dateien erhalten neutrale Erweiterungen (.bin, .txt), sodass nichts per Doppelklick ausgeführt werden kann. Vorhandene Dateien werden niemals überschrieben. |
--input-format vba | Analysiert eine VBA-Datei im Klartextformat. |
--timeout, --max-steps | Zeitbudget pro Datei und Schrittbudget des Interpreters. |
Exit-Codes: 0 Erfolg (auch wenn die Probe bösartig ist), 1 Analyse- oder interner Fehler, 2 Nutzungsfehler.
Die vier folgenden Berichte stammen aus echten bösartigen Dokumenten und zeigen die wichtigsten Wiederherstellungswege. Lange Blobs werden mit … gekürzt. Die vollständigen Werte stehen in der JSON-Ausgabe.
MultiByteToWideChar → EnumUILanguages)