Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Macrome — Excel Macro Document Reader/Writer для специалистов по красным командам и аналитиков | Kitploit
Инструменты/GitHubGitHub/michaelweber/macrome
Генерация полезной нагрузкиЭксплуатацияФишингАнализ вредоносных программТестирование на ПроникновениеСоциальная инженерияАнализ Бинарных ФайловRed Teaming
GitHubmichaelweber/macrome

Macrome

Excel Macro Document Reader/Writer для специалистов по красным командам и аналитиков

Репозиторий
522784 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Macrome

Инструмент для чтения/записи Excel-документов с макросами для специалистов по Red Teaming и аналитиков. Посты в блоге, описывающие, что на самом деле делает этот инструмент, можно найти здесь и здесь.

Пример созданного документа с использованием шаблона по умолчанию.

Установка / Сборка

Клонируйте или скачайте этот репозиторий, затем инструмент можно запустить с помощью dotnet — например:

root@kitploit:~
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin 

или

root@kitploit:~
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls

Обратите внимание, что для работы требуется сборка dotnet версии 5.0+ — её можно скачать с https://dotnet.microsoft.com/download/dotnet/5.0.

Бинарные релизы инструмента, не требующие dotnet и содержащие исполняемый файл, можно найти в разделе Release для Windows, OSX и Linux.

Использование

Запускайте Macrome, используя dotnet run из каталога решения или dotnet для собранного бинарного файла Macrome. У Macrome есть три режима работы: режим сборки, режим дампа и режим деобфускации.

Режим сборки

Запустите Macrome с командой build, чтобы сгенерировать документ Excel, содержащий обфусцированный лист макросов, используя предоставленный документ-приманку и полезную нагрузку макроса. dotnet Macrome.dll build -h выведет полные инструкции по использованию.

Например, чтобы собрать документ, используя документ-приманку path/to/decoy_document.xls и бинарный x86 шеллкод из path/to/shellcode.bin, выполните dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. Будет сгенерирован документ XLS 2003, который после открытия и нажатия кнопки "Включить содержимое" выполнит шеллкод из shellcode.bin.

Как мне это запускать?

Остальная документация подробно объяснит каждый флаг/функцию, но прямо сейчас "последние и лучшие" возможности Macrome можно получить, выполнив:

root@kitploit:~
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls

Использование бинарной полезной нагрузки

Сначала создайте базовый "приманочный" документ Excel, который будет содержать контент, который увидят пользователи. Это должна быть некая приманка, убеждающая пользователей нажать кнопку "Включить макросы", отображаемую в Excel. Некоторые примеры создания "последних и лучших" приманок можно найти на https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. После создания этого листа сохраните документ как Excel 97-2003 Workbook (*.xls), а не в более новом формате Excel Workbook (*.xlsx). Пример документа-приманки включён в /Docs/decoy_document.xls. Обратите внимание: если вы используете XOR-обфускацию для защиты документа, вы НЕ МОЖЕТЕ добавлять изображение в приманку.

Затем сгенерируйте полезную нагрузку шеллкода для передачи инструменту. Пример бинарной полезной нагрузки (которая запускает калькулятор) был сгенерирован с помощью msfvenom со следующими параметрами:

root@kitploit:~
 msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin

Также поддерживаются 64-битные полезные нагрузки. Пример 64-битной полезной нагрузки, popcalc64.bin, был сгенерирован с помощью команды:

root@kitploit:~
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin

Эту полезную нагрузку можно встроить, выполнив команду:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin

В настоящее время для 64-битных полезных нагрузок требуется также указать x86-полезную нагрузку. Если это не проблема, вы можете просто указать мусор для флага x86.

Существует возможность встраивать .NET-сборки непосредственно в документ, но если вы хотите сделать это сейчас, я рекомендую использовать EXCELntDonut.

Начиная с Macrome 0.5.0 и выше, все полезные нагрузки кодируются в base64, поэтому ваша полезная нагрузка может содержать любую последовательность байтов (включая нулевые байты).

Встраивание исполняемых файлов

Если вы хотите встроить .NET-исполняемый файл с помощью Macrome, я рекомендую использовать Donut с командой donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe, а затем встроить полученную полезную нагрузку как для 32-битной, так и для 64-битной версий.

Ещё один хороший вариант — Amber, который отлично работает для встраивания довольно больших Go-бинарников.

Устаревшее кодирование полезной нагрузки

Если по какой-то причине вы хотите использовать устаревший режим кодирования полезной нагрузки из версий до Macrome 0.5.0, используйте флаг --payload-method со значением SheetPackingMethod. Обратите внимание, что в устаревшем режиме использование преимущественно буквенно-цифровой полезной нагрузки уменьшит размер генерируемого файла макроса, поскольку буквы и числа проще выразить в виде макроса, чем постоянно добавлять вызовы функции CHAR вроде =CHAR(123)&CHAR(124)&CHAR(125)... и т.д. Но инструмент должен справляться и с полностью непечатаемой бинарной полезной нагрузкой.

Использование макроса в качестве полезной нагрузки

Как и в случае с бинарной полезной нагрузкой, сначала необходимо создать документ-приманку. Затем создайте текстовый файл, содержащий макросы для выполнения. Макросы должны быть с столбцами, разделёнными символами ;, и строками, разделёнными переводами строк. В настоящее время содержимое указанных макросов будет записано и выполнено, начиная с A1 — в будущем будет добавлена поддержка указания начального расположения. Примеры макросов можно найти в /Docs/macro_example.txt и /Docs/multi_column_macro_example.txt.

Наконец, выполните команду:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro

Обратите внимание на использование флага payload-type со значением Macro.

Вы можете сгенерировать макрос самостоятельно или воспользоваться замечательным инструментом EXCELntDonut для создания макроса.

Выбор метода кодирования

Они будут подробно описаны в предстоящем посте в блоге, но сейчас Macrome может кодировать полезные нагрузки макросов тремя различными способами. Большинство из них по-прежнему не обнаруживаются никаким антивирусом — экспериментируйте с вашими полезными нагрузками, чтобы понять, что работает лучше всего.

  1. CharSubroutine — заменяет многократное использование функций CHAR() созданием подпрограммы в случайной ячейке, а затем вызывает её с помощью длинной цепочки функций IF и SET.NAME. Этот метод ещё не использовался известными авторами вредоносных документов, поэтому вряд ли будет обнаружен антивирусом.
  2. ObfuscatedCharFunc — оригинальная функция кодирования Macrome. Вызывает CHAR(), но добавляет его к случайной пустой ячейке и оборачивает значение в функцию ROUND.
  3. ObfuscatedCharFuncAlt — небольшое изменение оригинального кодирования: вместо использования PtgFunc для вызова CHAR, мы используем PtgFuncVar — это ломает большинство сигнатур, пытающихся подсчитать количество вызовов CHAR.
  4. AntiAnalysisCharSubroutine — то же, что и CharSubroutine, но переменные, передаваемые в подпрограмму, обфусцированы с использованием юникодных уловок, описанных здесь. Обратите внимание, что это создаст документ большего размера, чем режим CharSubroutine, из-за добавления имён фиктивных переменных.
  5. ArgumentSubroutines — создаёт пользовательскую подпрограмму для CHAR() и FORMULA(), вызывает их как пользовательские функции и разбирает аргументы с помощью макроса ARGUMENT(), который менее поддерживается эмуляторами.

Укажите кодирование с помощью флага method при сборке — например, для использования кодировщика CharSubroutine:

root@kitploit:~
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls

Преамбула макросов

Иногда вам может понадобиться, чтобы определённые макросы выполнялись ДО кода полезной нагрузки. Это полезно, когда вы добавляете макросы для обхода песочницы и/или проверки того, что полезная нагрузка выполняется на правильном хосте.

Формат файлов преамбулы точно такой же, как при использовании payload-type Macro, но поддерживается только один столбец. Например, у вас может быть преамбула:

root@kitploit:~
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))

Это проверит значения разрешения экрана, наличие мыши и возможность воспроизведения звука. Если какая-либо из проверок не пройдена, приложение закроется до выполнения основного содержимого полезной нагрузки.

Кроме того, если вы хотите, чтобы макрос преамбулы выполнился НЕМЕДЛЕННО, а не после распаковки остальных макросов, вы можете предварить команду префиксом %%%%%. Например:

root@kitploit:~
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())

Это помогает минимизировать количество команд XLM, выполняемых до закрытия документа, и может быть полезно для более быстрой реакции на наличие индикаторов песочницы.

XOR-обфускация и защита паролем

Macrome 0.3.0+ поддерживает защиту документов паролем с помощью XOR-обфускации — устаревшего режима шифрования из ГОРАЗДО более старых версий Office. Этот режим шифрования часто не поддерживается инструментарием IR и может помочь защитить содержимое документа от проверки.

В Excel есть "стандартный" пароль VelvetSweatshop, который позволяет зашифровать содержимое документа, но при этом документ будет автоматически расшифровываться при открытии. Это "идеальный" способ использования XOR-обфускации в атакующем контексте. Macrome будет автоматически пытаться использовать этот пароль при деобфускации или дампе документа.

Чтобы использовать эту функцию, просто добавьте --password <passwordToEncrypt> в вашу команду сборки.

Режим дампа

Запустите Macrome с командой dump, чтобы вывести наиболее релевантные записи BIFF8 для произвольных документов. Эта функциональность аналогична функции дампа макросов olevba, но имеет более полную обработку записей Ptg в граничных случаях, чтобы формат был максимально близок к фактическим записям FORMULA в Excel. Это то, что я использовал для отладки некоторых странных граничных документов, которые генерировал при создании этого инструмента, так что он сравнительно надёжен. Я уверен, что существует множество граничных случаев, которые сейчас не поддерживаются, поэтому если вы найдёте документ, содержимое которого не удаётся корректно выгрузить, пожалуйста, откройте issue и приложите документ в виде zip-файла.

Команда dump требует только аргумента path, указывающего на целевой файл. Пример вызова:

root@kitploit:~
dotnet Macrome.dll dump --path docToDump.xls

Большинство флагов команды dump предназначены для отладки, но флаг dump-hex-bytes может быть полезен пользователям, которые хотят увидеть отдельные байтовые полезные нагрузки для соответствующих записей. Это аналогично функциональности BiffView, хотя по умолчанию будут отображаться только записи, специфичные для вредоносных документов.

Режим деобфускации

Запустите Macrome с командой deobfuscate, чтобы взять обфусцированный бинарный документ XLS и попытаться обратить некоторые методы анти-анализа. dotnet Macrome.dll deobfuscate -h выведет полные инструкции по использованию. В настоящее время по умолчанию этот режим выполняет следующее:

  • Отображает все листы независимо от их скрытого статуса.
  • Нормализует вручную заданные метки для всех записей Lbl, которые Excel будет интерпретировать как записи Auto_Open, несмотря на то, что их имя не соответствует этой строке.

Например, чтобы деобфусцировать вредоносный файл макроса XLS 2003 по пути path/to/obfuscated_file.xls, выполните dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls. Будет создана копия обфусцированного файла, которую будет проще анализировать вручную или с помощью инструментов.

ПРИМЕЧАНИЕ: Пока что это делает не очень много, в основном предназначено для демонстрации того, как использование модифицированной библиотеки b2xtranslator может помочь автоматизировать деобфускацию. Более полезные функции скоро появятся.

Благодарности

Огромное спасибо всем, на чьи плечи я смог опереться, чтобы написать это.

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/ — команда Outflank создала эту атаку, я лишь автоматизирую некоторые утомительные части.
  • Ребята из InQuest за их отличные статьи о том, как авторы вредоносного ПО в настоящее время обходят обнаружение.
    • https://inquest.net/blog/2019/01/29/Carving-Sneaky-XLM-Files
    • https://inquest.net/blog/2020/03/18/Getting-Sneakier-Hidden-Sheets-Data-Connections-and-XLM-Macros
    • https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-
  • @DissectMalware за их убийственный инструмент XLMMacroDeobfuscator, который был отличным для тестирования и является просто очень хорошей технологией, если вы на стороне защиты/аналитика.
  • @JoeLeonJr за его отличный инструмент EXCELntDonut, многоплатформенные макросы Excel которого я украл адаптировал для добавления поддержки x64 в Macrome.
  • Оригинальным авторам библиотеки b2xtranslator, а также ребятам из EvolutionJobs, которые обновили её и портировали на dotnet. Используемый здесь код был первоначально взят из https://github.com/EvolutionJobs/b2xtranslator.
  • Изображения взяты из комикса KC Green по адресу https://gunshowcomic.com/648
Скачать инструмент