L’obfuscation de commande est une technique souvent utilisée pour masquer le contenu des scripts ou des commandes afin d’éviter leur détection par des outils de sécurité. Une méthode courante consiste à utiliser l’encodage Base64 pour transformer une chaîne de caractères en une forme difficilement lisible. Cet article vous expliquera comment obfusquer et exécuter une commande en PowerShell en utilisant l’encodage Base64.
Exemple de Code pour Obfusquer et Exécuter une Commande
Le script suivant montre comment obfusquer une commande avec Base64 et ensuite la décoder pour l’exécuter.
# Chaîne de commande originale
$originalString = 'SensitiveCommand'
# Obfusquer la chaîne en utilisant l'encodage Base64
$obfuscatedString = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($originalString))
# Afficher la chaîne obfusquée
Write-Output "Obfuscated String: $obfuscatedString"
# Décoder la chaîne obfusquée
$decodedString = [System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($obfuscatedString))
# Exécuter la chaîne décodée
Invoke-Expression $decodedString
Explication du Code
- Chaîne de commande originale : La variable
$originalString
contient la commande originale que vous souhaitez obfusquer.$originalString = 'SensitiveCommand'
- Obfuscation de la chaîne : La commande suivante transforme la chaîne originale en une chaîne encodée en Base64.
$obfuscatedString = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($originalString))
[System.Text.Encoding]::Unicode.GetBytes($originalString)
: Convertit la chaîne originale en un tableau de bytes en utilisant l’encodage Unicode.[Convert]::ToBase64String(...)
: Convertit le tableau de bytes en une chaîne encodée en Base64.
- Affichage de la chaîne obfusquée : La chaîne encodée en Base64 est affichée pour vérification.
Write-Output "Obfuscated String: $obfuscatedString"
- Décodage de la chaîne obfusquée : La chaîne encodée en Base64 est décodée pour retrouver la chaîne originale.
$decodedString = [System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($obfuscatedString))
[Convert]::FromBase64String($obfuscatedString)
: Convertit la chaîne encodée en Base64 en un tableau de bytes.[System.Text.Encoding]::Unicode.GetString(...)
: Convertit le tableau de bytes en une chaîne en utilisant l’encodage Unicode.
- Exécution de la chaîne décodée : La chaîne décodée est exécutée en utilisant
Invoke-Expression
.Invoke-Expression $decodedString
Exemple d’Utilisation
Supposons que vous ayez une commande sensible comme :
$originalString = 'Get-Process'
En exécutant le script avec cette commande, voici ce que vous obtiendrez :
$originalString = 'Get-Process'
$obfuscatedString = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($originalString))
Write-Output "Obfuscated String: $obfuscatedString"
La sortie affichera :
Obfuscated String: RwBlAHQALQBQAHIAbwBjAGUAcwBzAA==
Une fois la commande encodée vous pouvez la récupérer et l’insérer directement dans votre script et l’executer sur la cible:
$obfuscatedString = 'RwBlAHQALQBQAHIAbwBjAGUAcwBzAA=='
$decodedString = [System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($obfuscatedString))
Invoke-Expression $decodedString
La commande Get-Process
sera exécutée après avoir été décodée.
Disclaimer
L’obfuscation de commande, comme illustrée dans cet article, peut être utilisée à des fins légitimes pour protéger des scripts sensibles ou pour des tests de sécurité. Cependant, elle peut également être utilisée de manière malveillante pour dissimuler des activités non autorisées. Utilisez ces informations de manière responsable et éthique. L’auteur de cet article et le fournisseur de cette plateforme déclinent toute responsabilité en cas d’utilisation abusive de ces informations. Respectez les lois en vigueur et obtenez toujours l’autorisation appropriée avant d’exécuter des tests de sécurité.