Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Macrome — Lecteur/Écrivain de documents macro Excel pour les red teamers et analystes | Kitploit
Outils/GitHubGitHub/michaelweber/macrome
Génération de PayloadsExploitationHameçonnageAnalyse de MalwareTests d'IntrusionIngénierie SocialeAnalyse de BinairesRed Teaming
GitHubmichaelweber/macrome

Macrome

Lecteur/Écrivain de documents macro Excel pour les red teamers et analystes

Voir le dépôt
52278il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Macrome

Un lecteur/écrivain de documents macro Excel pour les équipes rouges et les analystes. Les articles de blog décrivant ce que fait réellement cet outil sont disponibles ici et ici.

Un exemple de document créé avec le modèle par défaut.

Installation / Compilation

Clonez ou téléchargez ce dépôt, l'outil peut ensuite être exécuté en utilisant dotnet – par exemple :

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

ou

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

Notez qu'une version 5.0+ de dotnet est nécessaire pour que cela fonctionne comme configuré – elle peut être obtenue sur https://dotnet.microsoft.com/download/dotnet/5.0.

Des versions binaires de l'outil qui ne nécessitent pas dotnet et contiennent un exécutable peuvent être trouvées dans la section Releases pour Windows, OSX et Linux.

Utilisation

Exécutez Macrome soit en utilisant dotnet run depuis le répertoire de la solution, soit dotnet sur le binaire Macrome compilé. Il existe trois modes de fonctionnement pour Macrome – le mode Build, le mode Dump et le mode Deobfuscation.

Mode Build

Exécutez Macrome avec la commande build pour générer un document Excel contenant une feuille de macro obfusquée en utilisant un document leurre fourni et une charge utile macro. dotnet Macrome.dll build -h affichera les instructions d'utilisation complètes.

Par exemple, pour construire un document en utilisant le document leurre path/to/decoy_document.xls et du shellcode binaire x86 stocké dans path/to/shellcode.bin, exécutez dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. Cela générera un document XLS 2003 qui, après avoir été ouvert et après avoir cliqué sur le bouton "Activer le contenu", exécutera le shellcode de shellcode.bin.

Comment DOIS-JE exécuter cela ?

Le reste de la documentation expliquera chaque drapeau/fonction en détail, mais pour l'instant, le "dernier cri" que Macrome propose peut être obtenu en exécutant :

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

Utilisation d'une charge utile binaire

Générez d'abord un document Excel "leurre" de base qui contiendra le contenu que les utilisateurs doivent voir. Cela devrait être une sorte d'appât qui convainc les utilisateurs de cliquer sur le bouton "Activer les macros" affiché dans Excel. Quelques exemples de création d'appât "dernier cri" sont disponibles sur https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. Une fois cette feuille créée, enregistrez le document sous le type Classeur Excel 97-2003 (*.xls) plutôt que le format plus récent Classeur Excel (*.xlsx). Un exemple de document leurre est inclus dans /Docs/decoy_document.xls. Notez que si vous utilisez l'obfuscation XOR pour protéger votre document, vous NE POUVEZ PAS actuellement ajouter d'image à votre leurre.

Ensuite, générez une charge utile shellcode à fournir à l'outil. L'exemple de charge utile binaire (qui ouvre la calculatrice) a été généré avec msfvenom en utilisant les paramètres suivants :

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

Les charges utiles 64 bits sont également prises en charge. L'exemple de charge utile 64 bits, popcalc64.bin, a été généré avec la commande :

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

Cette charge utile peut ensuite être intégrée en exécutant la commande :

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

Actuellement, les charges utiles 64 bits nécessitent qu'une charge utile x86 soit également fournie. Si cela ne pose pas de problème, vous pouvez simplement spécifier des données factices pour le drapeau de charge utile x86.

Il existe un support éventuel pour intégrer directement des assemblies .NET dans le document, mais si vous souhaitez le faire maintenant, je vous suggère d'utiliser EXCELntDonut.

À partir de Macrome 0.5.0 et plus, toutes les charges utiles seront encodées en base64, donc votre charge utile pourra contenir n'importe quelle séquence d'octets (y compris les octets nuls).

Intégration d'exécutables

Si vous souhaitez intégrer un exécutable .NET avec Macrome, je suggère d'utiliser Donut avec la commande donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe, puis d'intégrer la charge utile résultante comme vos charges utiles 32 bits et 64 bits.

Une autre alternative solide est Amber qui a très bien fonctionné pour intégrer des binaires Go assez volumineux.

Encodage de charge utile hérité

Si pour une raison quelconque vous souhaitez utiliser le mode d'encodage de charge utile hérité d'avant Macrome 0.5.0, utilisez le drapeau --payload-method avec SheetPackingMethod. Notez qu'en mode hérité, l'utilisation d'une charge utile principalement alphanumérique réduira la taille du fichier macro généré car il est plus facile d'exprimer des lettres et des chiffres sous forme de macro que d'ajouter des appels de fonction CHAR de manière répétée comme =CHAR(123)&CHAR(124)&CHAR(125)... etc. Mais l'outil devrait également pouvoir gérer une charge utile binaire totalement non imprimable.

Utilisation d'une charge utile macro

Similaire à l'utilisation d'une charge utile binaire, un document leurre doit d'abord être généré. Ensuite, un fichier texte contenant les macros à exécuter doit être créé. Les macros doivent avoir des colonnes séparées par des caractères ; et des lignes séparées par des sauts de ligne. Actuellement, le contenu des macros spécifiées sera écrit et exécuté à partir de A1 – un support futur sera ajouté pour permettre de spécifier l'emplacement de départ. Des exemples de macros se trouvent dans /Docs/macro_example.txt et /Docs/multi_column_macro_example.txt.

Enfin, exécutez la commande :

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

Notez l'utilisation du drapeau payload-type défini sur Macro.

Vous pouvez générer vous-même une macro, ou utiliser l'excellent outil EXCELntDonut pour en créer une pour vous.

Sélection de la méthode d'encodage

Celles-ci seront détaillées dans un prochain article de blog, mais Macrome peut désormais encoder les charges utiles macro de trois manières différentes. La plupart d'entre elles ne sont toujours pas détectées par les antivirus – mais expérimentez avec vos charges utiles pour voir ce qui fonctionne le mieux.

  1. CharSubroutine – Remplace l'utilisation répétée des fonctions CHAR() en créant une sous-routine dans une cellule aléatoire, puis en l'invoquant via une longue chaîne de fonctions IF et SET.NAME. Cela n'a pas encore été abusé par des auteurs de maldoc célèbres, il est donc peu probable que cela déclenche une alerte antivirus pour l'instant.
  2. ObfuscatedCharFunc – La fonction d'encodage originale de Macrome. Invoque CHAR() mais l'ajoute à une cellule vide aléatoire et enveloppe la valeur dans une fonction ROUND.
  3. ObfuscatedCharFuncAlt – Une légère variation de l'encodage original, au lieu d'utiliser un PtgFunc pour invoquer CHAR, nous utilisons un PtgFuncVar – cela brise la plupart des signatures qui tentent de compter les invocations CHAR.
  4. AntiAnalysisCharSubroutine – Identique à CharSubroutine mais les variables passées à la sous-routine sont obfusquées à l'aide de manipulations Unicode comme décrit ici. Notez que cela générera un document plus volumineux que le mode CharSubroutine en raison de l'ajout de noms de variables leurres.
  5. ArgumentSubroutines – Crée une sous-routine personnalisée pour CHAR() et FORMULA(), les invoque comme des fonctions personnalisées et analyse les arguments à l'aide de la macro ARGUMENT() qui est moins prise en charge par les émulateurs.

Spécifiez un encodage en utilisant le drapeau method lors de la construction – par exemple, pour utiliser l'encodeur CharSubroutine :

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

Macros préambule

Parfois, vous pouvez souhaiter que certaines macros s'exécutent AVANT le code de la charge utile. Cela est utile lorsque vous ajoutez des macros pour l'évasion des sandbox et/ou la vérification que votre charge utile s'exécute sur le bon hôte.

Le format des fichiers de préambule est exactement le même que celui utilisé avec payload-type Macro, mais il ne prend en charge qu'une seule colonne. Par exemple, vous pourriez avoir un préambule 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))

Cela vérifierait les valeurs de résolution d'écran, la présence d'une souris et la capacité à jouer du son. Si l'un de ces tests échouait, l'application se fermerait avant d'exécuter le contenu principal de la charge utile.

De plus, si vous souhaitez qu'une macro préambule s'évalue IMMÉDIATEMENT, plutôt qu'après le décompactage du reste des macros, vous pouvez préfixer une commande avec %%%%%. Par exemple :

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

Cela est utile pour minimiser le nombre de commandes XLM exécutées avant de tuer le document et peut aider à réagir plus immédiatement à la présence d'indicateurs de sandbox.

Protection par mot de passe avec obfuscation XOR

Macrome 0.3.0+ prend en charge la protection par mot de passe des documents en utilisant l'obfuscation XOR, un mode de chiffrement hérité de versions BEAUCOUP plus anciennes d'Office. Ce mode de chiffrement est souvent non pris en charge par les outils d'IR et peut aider à protéger le contenu du document contre l'inspection.

Excel a un mot de passe "par défaut" de VelvetSweatshop, qui vous permettra de chiffrer le contenu du document tout en le déchiffrant automatiquement lors de l'ouverture. C'est la manière "idéale" d'utiliser l'obfuscation XOR dans un contexte offensif. Macrome tentera automatiquement d'utiliser ce mot de passe lors de la désobfuscation ou du dump d'un document.

Pour utiliser cette fonctionnalité, ajoutez simplement --password <motDePasseAChiffrer> à votre commande de construction.

Mode Dump

Exécutez Macrome avec la commande dump pour afficher les enregistrements BIFF8 les plus pertinents pour des documents arbitraires. Cette fonctionnalité est similaire à la fonction de dump de macro de olevba, mais elle offre un traitement plus complet des entrées Ptg de cas particuliers pour garantir que le format soit aussi proche que possible des véritables entrées FORMULA d'Excel. C'est ce que j'ai utilisé pour déboguer certains documents étranges que j'ai générés en créant cet outil, c'est donc relativement robuste. Je suis sûr qu'il existe encore de nombreux cas particuliers non pris en charge, donc si vous trouvez un document dont le contenu n'est pas correctement dumpé, veuillez ouvrir un ticket et partager le document sous forme de fichier zip.

La commande dump nécessite uniquement un argument path pointant vers le fichier cible. Un exemple d'invocation est :

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

La plupart des drapeaux de la commande dump sont destinés au débogage, mais dump-hex-bytes peut être utile aux utilisateurs qui souhaitent voir les charges utiles d'octets individuelles pour les enregistrements pertinents. Cela est similaire à la fonctionnalité de BiffView, bien que seules les entrées spécifiques aux maldocs soient affichées par défaut.

Mode Deobfuscate

Exécutez Macrome avec la commande deobfuscate pour prendre un document XLS binaire obfusqué et tenter d'inverser plusieurs comportements anti-analyse. dotnet Macrome.dll deobfuscate -h affichera les instructions d'utilisation complètes. Actuellement, par défaut, ce mode :

  • Dévoile toutes les feuilles quel que soit leur état de masquage
  • Normalise les étiquettes spécifiées manuellement pour toutes les entrées Lbl qu'Excel interprétera comme des entrées Auto_Open malgré leur nom ne correspondant pas à cette chaîne.

Par exemple, pour désobfusquer un fichier macro XLS 2003 malveillant situé dans path/to/obfuscated_file.xls, exécutez dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls. Cela générera une copie du fichier obfusqué qui sera plus facile à analyser manuellement ou avec des outils.

NOTE : Cela ne fait pas encore grand-chose, cela vise principalement à démontrer comment l'utilisation de la bibliothèque b2xtranslator modifiée peut aider à automatiser la désobfuscation. Des fonctionnalités plus utiles arrivent bientôt.

Remerciements

Un grand merci à toutes les épaules sur lesquelles j'ai pu m'appuyer pour écrire ceci.

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/ - L'équipe d'Outflank a créé cette attaque, je ne fais qu'automatiser certaines des parties fastidieuses.
  • Les gens d'InQuest pour leurs excellents articles sur ce que font les auteurs de malwares actuellement pour échapper à la détection.
    • 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 pour leur super outil XLMMacroDeobfuscator qui a été génial pour tester et est vraiment une excellente technologie si vous êtes du côté défense/analyste.
  • @JoeLeonJr pour son excellent outil EXCELntDonut dont j'ai volé adapté les macros Excel multi-architecture pour ajouter le support x64 à Macrome.
  • Les auteurs originaux de la bibliothèque b2xtranslator ainsi que les gens d'EvolutionJobs qui l'ont mise à jour et portée vers dotnet. Le code utilisé ici a été initialement obtenu depuis https://github.com/EvolutionJobs/b2xtranslator.
  • Images tirées de la bande dessinée de KC Green sur https://gunshowcomic.com/648
Télécharger l’outil