Désobfuscateur PowerShell
Collez une commande ou un script PowerShell obfusqué. Il est décodé couche par couche dans votre navigateur — rien n'est téléversé, rien n'est exécuté — et le résultat est affiché comme texte inerte, avec les motifs suspects listés comme pistes à vérifier.
L'obfuscation PowerShell cache ce que fait un script derrière des couches : un -EncodedCommand en Base64, la compression gzip, des codes de caractères, la concaténation de chaînes, l'opérateur de format -f et les échappements avec accent grave — chaque couche est retirée à son tour jusqu'à ce qu'il reste du texte lisible, ou le point où le déroulement statique s'arrête. Cet outil retire ces couches une par une et montre chaque étape, pour que vous voyiez ce que dit le script sans l'exécuter. Si le script vient d'un journal d'événements Windows, la visionneuse EVTX lit le fichier .evtx et signale les événements 4104 ; pour les autres journaux texte, l'analyseur de journaux trouve les lignes qui comptent. L'article compagnon comment désobfusquer les scripts PowerShell explique les couches et le flux de travail sûr en prose.
Dernière mise à jour:
L'événement 4104 (journalisation des blocs de script PowerShell) divise les longs scripts en fragments numérotés. Collez les fragments — en-têtes dans n'importe quel ordre — et ils sont groupés par ScriptBlockId, triés par MessageNumber et joints. Les parties manquantes sont signalées, et le texte réassemblé peut être envoyé au désobfuscateur.
🔒 Votre script est déroulé dans votre navigateur et ne quitte jamais votre appareil. Pas de compte, pas de téléversement, pas d'appel serveur — et rien ici n'est jamais exécuté.
Ce qui arrive au script que vous collez
Rien ne quitte votre navigateur. Le script est déroulé localement par JavaScript sur cette page : pas de téléversement, pas d'appel serveur, pas de stockage, pas de compte. C'est important car un script suspect ne doit jamais être collé dans un chat — un chat peut l'exécuter, le citer ou le conserver — et ne doit jamais être exécuté pour voir ce qu'il fait. Fermer la page le supprime.
Ce qu'un résultat propre NE prouve pas
Un résultat propre n'est pas une preuve de sécurité. Cela signifie qu'aucune couche connue ne s'est appliquée et qu'aucun indicateur n'a correspondu — une chaîne construite dynamiquement, une charge chiffrée ou une valeur qui n'existe qu'à l'exécution ne peut pas être déroulée statiquement, et un script sans indicateur peut toujours être malveillant.
Un indicateur n'est pas une preuve de malveillance. Les berceaux de téléchargement, IEX et les commandes encodées ont des usages légitimes en administration et en déploiement ; chaque correspondance est une piste à vérifier en contexte, pas un verdict.
N'exécutez jamais un script inconnu pour découvrir ce qu'il fait. Décodez-le de façon inerte, remettez le résultat à votre EDR ou à un bac à sable, et traitez le texte décodé avec la même suspicion que la forme encodée — c'est une preuve, pas un certificat de bonne santé.
Comment fonctionne le déroulement
L'outil essaie huit couches dans l'ordre, une par étape, et répète jusqu'à ce qu'aucune couche ne s'applique ou que dix couches aient été retirées : extraction de -EncodedCommand (Base64 vers UTF-16LE, avec UTF-8 en repli) ; un blob Base64 nu ; décompression gzip ou deflate (l'entrée peut d'abord être enveloppée en Base64) ; séquences de codes [char] et [char[]] ; concaténation de chaînes avec guillemets mixtes et sur plusieurs lignes ; l'opérateur de format -f ; suppression des échappements avec accent grave ; et une liste des espaces réservés ${...} et $variable, qui ne sont jamais résolus car leurs valeurs n'existent qu'à l'exécution. Chaque étape montre le texte avant et après, avec le nombre de caractères.
Ce que l'outil NE fait pas : il n'exécute jamais rien — le résultat est du texte inerte, et la page ne peut pas l'exécuter même par accident. Il ne peut pas dérouler les chaînes construites dynamiquement, les charges chiffrées ou les valeurs qui n'existent qu'à l'exécution, et il ne juge pas si un script est sûr : les indicateurs sont des correspondances de motifs, et un script qui bat toutes les couches est signalé comme « impossible de dérouler davantage », jamais comme propre.
La journalisation des blocs de script (événement 4104) enregistre le texte du script que PowerShell a réellement exécuté, mais les longs scripts sont divisés en fragments d'environ 4 Ko, chacun portant un ScriptBlockId, un MessageNumber et un MessageTotal. L'onglet de réassemblage groupe les fragments par ScriptBlockId, les trie par MessageNumber, les joint et signale toute partie manquante — un groupe avec 2 parties sur 3 et la partie 2 manquante est incomplet, et le texte manquant ne peut pas être deviné. Le texte réassemblé alimente le même désobfuscateur.
Questions fréquentes
Pourquoi le résultat est-il affiché comme texte inerte plutôt que comme script exécutable ?
Parce que le but de la désobfuscation est de lire un script suspect, pas de l'exécuter. Le texte décodé peut toujours télécharger et exécuter une charge — l'afficher comme texte inerte avec un bouton de copie vous permet de l'inspecter, de le partager avec votre EDR ou un bac à sable, sans jamais risquer un double-clic.
L'outil s'est arrêté avec « impossible de dérouler davantage ». Et maintenant ?
Le texte restant utilise une couche que cet outil ne connaît pas, construit ses chaînes à l'exécution, ou est chiffré — le déroulement statique a atteint sa limite. Ne l'exécutez pas pour le découvrir : remettez la forme encodée et le décodage partiel à votre EDR ou à un bac à sable, et traitez la couche inconnue comme un motif de suspicion, pas comme un résultat propre.
Que faire des indicateurs ?
Traitez chacun comme une question, pas comme une réponse. Un berceau de téléchargement demande vers où pointe l'URL et si cet hôte est attendu ; un motif de contournement AMSI demande pourquoi le script essaie d'aveugler le scanner ; une commande encodée demande ce que l'encodage cachait. Vérifiez chacun en contexte — dans votre EDR, vos journaux et la machine d'où vient le script — avant de décider quoi que ce soit.