Décoder un payload PowerShell -EncodedCommand
-EncodedCommand (ou -e) attend une chaîne Base64 qui se décode en UTF-16LE, pas en UTF-8. L’erreur classique : décoder en UTF-8 et obtenir du charabia illisible.
La chaîne décodée est souvent elle-même compressée en Gzip — on le reconnaît à l’en-tête 1f 8b. C’est typiquement le cas des stagers rencontrés en investigation numérique (DFIR). La chaîne de décodage complète :
- Extraire la chaîne Base64 passée à
-EncodedCommand. - Décoder le Base64, puis interpréter les octets en UTF-16LE : on obtient le script PowerShell en clair.
- Si le texte contient un bloc compressé (en-tête Gzip
1f 8b), le décompresser.
Ce que ça révèle en analyse d’incident : un stager qui contacte un serveur de commande et contrôle (C2), des identifiants, des chemins de persistance. C’est souvent la première ligne qui fait comprendre le scénario global.
Outils pratiques : CyberChef (recettes Base64 → UTF-16LE → Gunzip enchaînées), ou un petit script Python/PowerShell pour automatiser le décodage sur un grand nombre d’échantillons.