
Анализатор защитных макросов Office на Go: извлекает VBA, деобфусцирует его и эмулирует в полностью смоделированной песочнице для восстановления команд, PowerShell, шелл-кода и сброшенных полезных нагрузок без выполнения образца.
MaldocTrace — это защитный анализатор вредоносных документов Office, написанный на Go. Он извлекает макросы VBA и Excel 4.0 (XLM), восстанавливает обфусцированные строки и эмулирует макросы в полностью симулированной среде. В выходных данных сообщается, что документ сделал бы: какие команды он запустил бы, какие полезные нагрузки декодировал бы и какие файлы создал бы. Всё это подкреплено доказательствами, указывающими на модуль, процедуру и строку (или лист и ячейку), которые это породили.
Документы без макросов также охватываются. Удалённая инъекция шаблонов, поля DDE, связанные и внедрённые объекты OLE (включая эксплойты Equation Editor в RTF), изображения-приманки с гиперссылками и VBA stomping сообщаются как статические находки.
.doc, .xls, .ppt), OOXML (.docx, .docm, .xlsx, .xlsm, .pptm), RTF и необработанный текст VBA. Включает распаковку MS-OVBA, свойства элементов управления UserForm и ограничения ресурсов против zip-бомб и повреждённых контейнеров..xls (формулы BIFF8, декомпилированные из разобранных токенов с использованием таблиц функций MS-XLS) и .xlsm, включая скрытые и очень скрытые листы;Auto_Open (любое имя, которое выполнил бы Excel). Он отслеживает GOTO, RUN, IF, WHILE/FOR/NEXT, ON.TIME и RETURN, а также применяет FORMULA/FORMULA.FILL/SET.VALUE/SET.NAME, поэтому самодекодирующиеся макросы восстанавливают свой реальный код;EXEC, CALL, REGISTER и псевдонимов (URLDownloadToFileA, ShellExecuteA, WinExec, CreateProcessA) и FOPEN/FWRITE. Антипесочные проверки (GET.WORKSPACE, GET.WINDOW, GET.CELL) получают правдоподобные ответы с пометкой «симулировано»;attachedTemplate, RTF \*\template);ms-msdt (Follina);QUOTE) и формулы и ссылки DDE Excel;\objdata, повреждённые заголовки OLE1), с обнаружением эксплойта Equation Editor: переполнение MTEF FONT (CVE-2017-11882 / CVE-2018-0802) и переполнение MATRIX (CVE-2018-0798), а также извлечение следующих за ними байтов;Sheets("x").Range("A1"), Cells(r, c)), свойства документа (BuiltInDocumentProperties("Comments"), пользовательские свойства), переменные документа (ActiveDocument.Variables) и элементы управления UserForm (TextBox.Text, Label.Caption) — всё это доступно эмулируемому макросу..docx. Дропперы часто прячут полезную нагрузку в теле документа и считывают её обратно через ActiveDocument.Paragraphs(n).Range.Text.ByRef, именованные аргументы, условная компиляция, циклы, массивы и встроенные строковые функции.Chr/StrReverse/Replace/конкатенации. Каждое значение фиксирует, как оно было восстановлено (concatenation+Chr, StrReverse, ...).WScript.Shell, Shell, WMI Win32_Process.Create (как через GetObject, так и через CreateObject("winmgmts:..."))FileSystemObject, ADODB.Stream, XMLHTTP/WinHttpMSScriptControl.ScriptControlParagraphs, Range, Delete, SaveAs2Sheets, Worksheets, Range, Cells, Offset), общая с движком XLM, и ExecuteExcel4Macro/Application.Run в макролистыVarPtr-EncodedCommand со статической свёрткой конкатенаций 'ht'+'tp' перед извлечением URLMultiByteToWideChar(CP_UTF7)certutil -decode, воспроизводимый поверх виртуальной файловой системы, построенной из того, что записал макросScriptControl.AddCode, выводятся как скриптовые полезные нагрузки, а не как командные строкиevent-3, command-1, payload-1) и местоположения в исходнике. Вторичные представления ссылаются на элемент по его ID вместо повторения крупных блоков данных.Готовые бинарные файлы для Windows, Linux и macOS (x64 и ARM64) доступны на странице Releases вместе с контрольными суммами SHA-256. Примечания к каждому релизу берутся из CHANGELOG.md.
Требуется Go 1.23+.
go build -o maldocTrace ./cmd/maldoctrace
В 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
| Параметр | Описание |
|---|---|
--format text | Отчёт, удобный для чтения человеком (по умолчанию). |
--format json | Полный версионированный JSON-отчёт (схема 1.3.0). Всегда включает индикаторы, диагностику, декодированные строки и полное содержимое полезной нагрузки. |
--format jsonl | Один JSON-отчёт на строку, для пакетного анализа с --recursive. |
--show-strings | Только для текстового формата. Выводит восстановленные строки без дубликатов, с указанием каждого вхождения модуля/процедуры/строки и метода восстановления. |
--dump-payloads DIR | Записывает декодированные полезные нагрузки и файлы, сброшенные макросом, в DIR/<input-sha256>/ вместе с manifest.json. Файлы получают нейтральные расширения (.bin, .txt), поэтому ничего не может запуститься при двойном щелчке. Существующие файлы никогда не перезаписываются. |
--input-format vba | Анализировать файл VBA в виде простого текста. |
--timeout, --max-steps | Бюджет времени на файл и бюджет шагов интерпретатора. |
Коды выхода: 0 — успех (даже если образец вредоносный), 1 — ошибка анализа или внутренняя ошибка, 2 — ошибка использования.
Четыре отчёта ниже получены из реальных вредоносных документов и показывают основные пути восстановления. Длинные блоки данных сокращены с помощью …. Полные значения приведены в выводе JSON.
MultiByteToWideChar → EnumUILanguages)