Загрузить файл
  1. base64hub
  2. Веб и токены
  3. PowerShell -EncodedCommand

Декодер PowerShell EncodedCommand

Вставьте командную строку из алерта целиком, например powershell.exe -nop -w hidden -enc JAB…, или только Base64. Декодер найдёт аргумент, превратит Base64 в UTF-16LE обратно в скрипт и перечислит все вложенные в него данные в Base64.

Бесплатно без регистрации и ограничений Локально ничего не загружается Вложенность находит и перечисляет данные из FromBase64String Обновлено 27 окт. 2026 г.
Ввод 0 BРезультат 0 B

Обработка идёт в браузере. Эта страница не может никуда отправить ваши данные – откуда мы это знаем

Как декодировать закодированную команду PowerShell

  1. Скопируйте полную командную строку из алерта, события создания процесса или консоли EDR и вставьте её в поле Командная строка или Base64. Кавычки вокруг Base64 не мешают.
  2. Декодер найдёт аргумент -EncodedCommand в любом сокращении (-e, -ec, -enc и так далее, с - или /) и декодирует его.
  3. Статус сообщает, какая кодировка использована: UTF-16LE, как ожидает PowerShell, или UTF-8, если байты не похожи на UTF-16.
  4. Прочитайте Декодированный скрипт. Если в нём есть литералы [Convert]::FromBase64String('…'), они перечислены ниже с определённым типом и размером. Текстовые данные открываются в поле результата, у сжатых (gzip, zlib или raw deflate, как с GzipStream и DeflateStream) есть кнопка распаковки, а прочие двоичные данные можно сохранить файлом.

Безобидный пример:

powershell.exe -NoP -NonI -W Hidden -Enc VwByAGkAdABlAC0ATwB1AHQAcAB1AHQAIAAnAGgAZQBsAGwAbwAnAA==

декодируется в Write-Output 'hello'. Тот же текст в Base64 от UTF-8 был бы V3JpdGUtT3V0cHV0ICdoZWxsbyc=, и PowerShell его отверг бы или прочитал неправильно.

Как распознать закодированные команды в логах

Из-за UTF-16LE у начала закодированного скрипта узнаваемая форма в Base64. Правила обнаружения срабатывают на такие варианты:

Base64 начинается сСкрипт начинается с
JAB$ (присваивание переменной, например JABzAD0A означает $s=)
SQBFAFgAIEX
aQBlAHgAiex
SQBuAHYAbwBrAGUALQBFAHgAcAByAGUAcwBzAGkAbwBuAAInvoke-Expression
SQBuAHYAbwBrAGUALQBXAGUAYgBSAGUAcQB1AGUAcwB0AAInvoke-WebRequest
TgBlAHcALQBPAGIAagBlAGMAdAANew-Object
WwBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIAaQBuAGcA[Convert]::FromBase64String

Эти формы верны только в самом начале. Дальше по скрипту у того же слова три возможных записи в Base64 (в зависимости от смещения в байтах по модулю 3), поэтому поиск по логам одной записи пропускает две другие.

Как безопасно разобрать подозрительную команду

Закодированными командами обычно прячут скрипт от беглого взгляда на список процессов. Когда такая команда всплывает в алерте:

  • Декодируйте, но не выполняйте. Эта страница только преобразует текст и никуда его не отправляет. Не вставляйте команду в окно PowerShell и никогда не передавайте декодированный результат в iex.
  • Ищите намерение и индикаторы. Выпишите URL, домены, IP-адреса, пути к файлам, ключи реестра и имена задач планировщика для заметок по инциденту и блоклистов.
  • Ищите следующие слои. Частые обёртки: вложенные вызовы FromBase64String, IO.Compression.DeflateStream или GzipStream, -join по кодам символов и разворот строк. Декодируйте каждый слой тем же способом.
  • Считайте извлечённые бинарники образцами. Данные, сохранённые из списка вложенных, могут оказаться вредоносом. Посчитайте хеш и анализируйте их только в изолированной среде.
  • Проверьте логи, где уже есть открытый текст. Если включено журналирование блоков скриптов (Script Block Logging), Windows записывает декодированный скрипт как событие 4104 в Microsoft-Windows-PowerShell/Operational. События создания процессов (Security 4688 с аудитом командной строки или событие Sysmon 1) записывают саму закодированную командную строку.

Легитимное применение и вкладка кодирования

Администраторы используют -EncodedCommand, чтобы избежать проблем с кавычками, когда скрипт проходит через cmd.exe, планировщик задач, удалённую оболочку или систему управления конфигурацией. Закодировать скрипт выдаёт готовый аргумент: введите скрипт, выберите префикс в Команда (powershell -NoProfile -EncodedCommand, pwsh -NoProfile -EncodedCommand, powershell -enc или Только Base64) и скопируйте. Если результат превышает ограничение cmd.exe в 8191 символ на командную строку, появится предупреждение.

Декодирование в Python и PowerShell

import base64
script = base64.b64decode(b64).decode("utf-16-le")
$script = [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($b64))

Оба варианта только возвращают текст. Подробнее о кодировании рассказывают страница про Base64 в PowerShell и конвертер UTF-16 в Base64.

Частые проблемы

  • Результат похож на китайские иероглифы: Base64 от UTF-8 декодирован как UTF-16. Инструмент переключается на UTF-8, если узор байтов не подходит под UTF-16, а строка статуса сообщает, какая кодировка использована.
  • Некорректный Base64: команду обрезало ограничение длины поля в логе или её разбило на строки. Склейте куски и уберите всё, что стоит после Base64 и не относится к нему.
  • Командная строка вообще не декодируется: возможно, Base64 стоит не в аргументе -EncodedCommand, а, например, в строке внутри -Command "…FromBase64String('…')…". Вставьте только строку Base64; если это не текст в UTF-16, декодер Base64 или Base64 в файл покажут, что это такое.

Вопросы и ответы

Что делает powershell -enc?

Это сокращённая форма -EncodedCommand. PowerShell декодирует аргумент из Base64 как текст в UTF-16LE и выполняет его как скрипт. Принимаются и другие сокращения, например -e и -ec.

Безопасно ли декодировать здесь вредоносную команду PowerShell?

Декодирование только преобразует текст и ничего не выполняет, а политика безопасности контента этой страницы блокирует все сетевые запросы, кроме счётчика просмотров Cloudflare. Никогда не запускайте декодированный скрипт, чтобы посмотреть, что он делает, а с сохранёнными двоичными данными работайте только в изолированной среде для анализа.

Почему в Base64 буква A повторяется через символ?

PowerShell ждёт UTF-16LE, где за каждым ASCII-символом идёт нулевой байт. Эти нулевые байты и дают повторяющийся узор из A, как в VwByAGkAdABlAC0A для Write-.

Как декодировать -EncodedCommand, не запуская его в PowerShell?

Используйте [Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($b64)): эта команда только возвращает текст. Не передавайте результат в Invoke-Expression или iex.