Я вижу как минимум два варианта этой ситуации. Одним из вариантов является отправка команды в кодировке base64 в Powershell.exe с использованием параметра -EncodedCommand
. Второй вариант заключается в создании сценария декодирования для приема другого сценария, который содержит закодированную команду base64 в качестве значения параметра.
Опция 1: передача закодированной команды
Это предполагает, что ваша закодированная команда base64 является строковой версией ваших команд PowerShell, отформатированных с использованием кодировки символов UTF-16LE (Unicode). Предположим также, что у вас есть скрипт с именем Encoded.ps1
, который содержит вашу закодированную команду base64. С выполнением предварительных условий вы можете сделать следующее:
Powershell.exe -EncodedCommand (Get-Content Encoded.ps1)
Вариант 2: Запуск сценария декодирования против закодированного сценария
Требование Unicode делаетне имеет значения в этом случае (вы можете использовать ANSI, если хотите). Вам просто нужно знать исходную кодировку командной строки, чтобы вы могли правильно ее декодировать. Мы примем набор символов ASCII. Также предположим, что Encoded.ps1
содержит вашу команду в кодировке base64.
Во-первых, давайте создадим скрипт декодирования с именем Decode.ps1.
# Decode.ps1
param([string]$FilePath)
$64EncodedData = Get-Content $FilePath
$DecodedData = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($64EncodedData))
& ([scriptblock]::Create($DecodedData))
Во-вторых, давайте запустим команду Powershell.exe, чтобы декодировать Encoded.ps1
и выполнить команду декодирования.
Powershell.exe -File Decoded.ps1 -FilePath Encoded.ps1
Приведенный выше код предназначен не для отображения содержимого декодированных команд, а для выполнения декодированных команд. $FilePath
- это путь к вашему Encoded.ps1
файлу, который содержит строку в кодировке base64 из набора символов в кодировке ASCII. Вы можете выбрать любую кодировку, применимую к вашей ситуации, в файле Decode.ps1
. $DecodedData
содержит исходные строки команд. Наконец, создается блок сценария, содержащий $DecodedData
, а затем вызывается с оператором вызова &
.