Décoder -EncodedCommand et l'obfuscation PowerShell
Fonctionnement de -EncodedCommand et de l'obfuscation PowerShell courante — base64/UTF-16LE, gzip/deflate, codes de caractères, concaténation, opérateur de format et accents graves — et comment les décoder en toute sécurité.
En bref. -EncodedCommand, c'est du Base64 de texte UTF-16LE. Au-delà, les attaquants superposent gzip/deflate, des codes [char], la concaténation de chaînes, l'opérateur de format -f et l'échappement par accent grave. Tout cela se renverse par des transformations purement textuelles qui n'exécutent jamais le code. Le PowerShell Parser les déroule couche par couche et affiche le résultat sous forme de texte inerte ; collez n'importe quoi dans sa vue de désobfuscation.
-EncodedCommand
powershell -EncodedCommand <base64> (aussi -enc, -e) prend la commande sous forme de Base64 des octets UTF-16LE du texte (Microsoft : about_PowerShell.exe). Pour décoder : décodez le Base64, puis interprétez les octets en UTF-16LE. Un indice révélateur est le rembourrage A visible dans le Base64 (VwByAGkAdABlA...), l'octet de poids fort nul de chaque caractère ASCII.
Obfuscation en couches
Les échantillons réels imbriquent les encodages. Les plus courants, tous réversibles comme du texte :
- Compression :
[Convert]::FromBase64String(...)alimentant unGzipStreamou unDeflateStream, puisIEX. Décodez le Base64, puis décompressez le flux gzip/deflate. - Codes de caractères :
[char]73+[char]69+[char]88ou[char[]](73,69,88)-join''— convertissez chaque nombre en son caractère. - Concaténation :
'IE'+'X'— joignez les littéraux de chaîne adjacents. - Opérateur de format :
("{1}{0}" -f 'X','IE')— réordonnez selon les emplacements numériques. - Accents graves :
IEX— un accent grave à l'intérieur d'un mot est un échappement sans effet ; supprimez-le.
Le parseur applique chacune de ces opérations et affiche chaque couche intermédiaire, pour que vous voyiez exactement comment une ligne unique a été construite. Voir commande encodée, cradle de téléchargement et Invoke-Expression.
Décoder en sécurité, jamais exécuter
Le décodage est l'opposé de l'exécution : ce sont du Base64, de l'UTF-16LE, de la décompression et des modifications de chaînes — rien de tout cela n'invoque PowerShell. C'est pourquoi un outil dans le navigateur peut révéler sans danger une charge utile que vous n'exécuteriez jamais. Le parseur signale les détections telles que les contournements d'AMSI, les cradles de téléchargement et l'altération de la journalisation dans le texte décodé, et extrait les URL et IP sous forme de chaînes inertes.
Où l'on rencontre chaque forme
La journalisation des blocs de script (4104) stocke généralement le bloc décodé, mais la ligne de commande des événements 400/800, l'historique PSReadLine et les transcriptions conservent la forme encodée — décodez-la donc là aussi. Analysez une collecte entière dans votre navigateur.
FAQ
Quel encodage utilise -EncodedCommand ?
L'argument est le Base64 du texte de la commande encodé en UTF-16LE (Unicode petit-boutiste). Décodez le Base64, puis lisez les octets en UTF-16LE pour retrouver le script.
Est-il sûr de décoder une commande malveillante ?
Le décodage est une transformation purement textuelle — Base64, UTF-16LE, décompression gzip/deflate, manipulation de chaînes. Il n'exécute jamais la commande. Lire le texte décodé est sûr ; l'exécuter ne l'est pas.
La journalisation des blocs de script ne montre-t-elle pas déjà le script décodé ?
Souvent oui : le 4104 enregistre le bloc après désobfuscation. Mais la ligne de commande des événements 400/800, l'historique PSReadLine et les transcriptions montrent la forme encodée : il faut donc la décoder là aussi.