Как найти скрытый PowerShell в исполняемом файле: практическое руководство по анализу

Вы скачали полезную утилиту или патч, запустили его, и вроде бы всё работает. Но где-то на заднем плане в диспетчере задач на секунду мелькнуло окно PowerShell, или вы просто не доверяете источнику. Это правильный инстинкт. Сегодня злоумышленники редко пишут полноценные вирусы с нуля — гораздо проще «зашить» внутрь обычного .exe файла короткий скрипт, который при запуске вызовет PowerShell, скачает вредоносный код из сети и исполнит его прямо в оперативной памяти. Это называется Fileless Attack (безфайловая атака), и классические антивирусы часто пропускают такие вещи, потому что сам файл выглядит чистым.

Если вам нужно проверить подозрительный файл на наличие таких «сюрпризов», не обязательно быть экспертом по реверс-инжинирингу. Я разберу методы, которые используют практики: от простых бесплатных инструментов до более глубокого анализа строк и поведения.

Почему PowerShell так любят хакеры?

PowerShell — это мощнейший инструмент администрирования Windows. У него есть доступ практически ко всему: к реестру, процессам, файловой системе и сетевым запросам. Для атакующего это идеальный «посредник». Вместо того чтобы тащить в систему тяжелый исполняемый код, который легко обнаружить, они используют PowerShell, чтобы:

  • Скачать полезную нагрузку (payload) из интернета одной командой.
  • Обойти политики исполнения скриптов (Execution Policy).
  • Зашифровать команды (Base64), чтобы их нельзя было прочитать обычным поиском по тексту.
  • Выполнить код прямо в памяти, не оставляя следов на жестком диске.

Метод 1: Быстрая проверка через статические инструменты

Статический анализ — это когда мы изучаем файл, не запуская его. Это самый безопасный путь. Мы ищем в коде файла текстовые упоминания ключевых слов, которые характерны для вызова PowerShell.

Самый простой способ — использовать утилиту Strings (из пакета Sysinternals от Microsoft). Она вытаскивает из бинарного файла все читаемые последовательности символов. Если в файле спрятан скрипт, он рано или поздно «вылезет» в виде текста.

На что смотреть в результатах поиска:

  1. powershell.exe или pwsh.exe — прямое указание на запуск интерпретатора.
  2. -EncodedCommand или -e — это самый важный признак. Хакеры используют этот флаг, чтобы передать длинную строку в кодировке Base64, которую невозможно прочитать глазами.
  3. -WindowStyle Hidden или -W Hidden — попытка запустить скрипт так, чтобы пользователь не увидел черного окна консоли.
  4. IEX (Invoke-Expression) — команда, которая заставляет PowerShell исполнять полученный текст как код. Это «золотой стандарт» для запуска вредоносов.
  5. Net.WebClient или DownloadString — команды для скачивания файлов или кода из сети.

Если вы видите комбинацию powershell.exe -e [длинная абракадабра] — перед вами почти наверняка вредоносный скрипт.

Метод 2: Использование онлайн-песочниц

Если вы не хотите копаться в строках вручную, отдайте файл на «прожарку» в облачную песочницу. Сервисы вроде VirusTotal или Any.Run делают это за вас. Но здесь есть нюанс: нужно знать, куда смотреть в отчетах.

Когда файл попадает в песочницу, система запускает его в изолированной среде и записывает каждое действие. В отчете ищите раздел «Behavior» (Поведение) или «Process Tree» (Дерево процессов).

Сравнение методов проверки
Критерий Поиск строк (Strings) Онлайн-песочницы (Any.Run/VT) Динамический анализ (Debugger)
Сложность Низкая Средняя Высокая
Безопасность Максимальная (файл не запускается) Высокая (запуск в облаке) Низкая (нужна изоляция)
Что ищем Текстовые маркеры и флаги Связи процессов (Parent-Child) Пошаговое выполнение кода
Главный риск Пропуск обфусцированного кода Обнаружение антивирусом песочницы Заражение вашей системы

Как понять, что песочница нашла подвох: В дереве процессов вы должны увидеть цепочку: file.execmd.exepowershell.exe. Если ваша программа — это простой калькулятор, а она порождает PowerShell, который лезет на какой-нибудь странный IP-адрес — удаляйте её не задумываясь.

Метод 3: Глубокий анализ (для продвинутых)

Если строки чистые, а песочница говорит «всё ок» (такое бывает, если вредонос настроен на проверку наличия виртуальной среды), пора переходить к тяжелой артиллерии. Это использование отладчиков (x64dbg) или дизассемблеров (IDA Pro, Ghidra).

Здесь мы ищем не просто слова, а системные вызовы (API Calls). Скрытый скрипт часто прячется внутри ресурсов файла или зашифрован в секциях данных. При запуске программа расшифровывает этот кусок и передает его функции CreateProcess или ShellExecute с аргументами PowerShell.

Ваш алгоритм действий при подозрении:

  1. Проверьте цифровой подпись файла. Если её нет или она принадлежит неизвестному издателю — это первый красный флаг.
  2. Прогоните файл через VirusTotal. Смотрите не только на процент обнаружений, но и на вкладку «Relations» (связи).
  3. Если есть возможность, запустите файл в изолированной виртуальной машине (VMware/VirtualBox) с отключенным интернетом, чтобы посмотреть, какие файлы он пытается создать.

Частые ошибки при проверке

Многие совершают одни и те же ошибки, которые приводят либо к ложной безопасности, либо к заражению системы:

  • Запуск подозрительного файла на основной ОС. Никогда не проверяйте «на ощупь» файлы, в которых вы не уверены. Только виртуальная машина или песочница.
  • Доверие только антивирусу. Современные загрузчики (loaders) специально пишутся так, чтобы обходить сигнатурный анализ. Если антивирус молчит, это не значит, что файл чист.
  • Игнорирование длинных строк Base64. Многие думают: «Это просто странный текст, наверное, часть данных». В 90% случаев в исполняемых файлах такой текст — это и есть команда для PowerShell.
  • Проверка только одного метода. Скрытый код может не содержать строк (быть зашифрованным), но проявиться при запуске. Поэтому статика и динамика должны идти рука об руку.

Как лучше поступить: сценарии выбора

Выбор метода зависит от того, насколько вы готовы погружаться в детали и сколько времени у вас есть.

Сценарий А: У вас есть 2 минуты и файл кажется «подозрительным, но не критичным».
Просто залейте его на VirusTotal. Если там больше 5-10 детектов или в разделе «Behavior» видны вызовы PowerShell — файл в корзину.

Сценарий Б: Вы системный администратор или разработчик, и вам нужно проверить софт перед развертыванием в сети.
Используйте связку: Strings для быстрого поиска + запуск в песочнице (например, Any.Run) для анализа сетевой активности. Вам важно увидеть, куда именно PowerShell пытается «стучаться».

Сценарий В: Вы нашли подозрительный фрагмент кода или работаете с реверс-инжинирингом.
Используйте дизассемблер. Ищите функции загрузки библиотек и вызовы процессов. Ваша цель — найти момент распаковки (unpacking) скрытого тела скрипта в память.

Итоговые рекомендации

Чтобы не стать жертвой скрытых PowerShell-скриптов, придерживайтесь простого правила: «Если я не вижу, что делает программа, я ей не верю».

Ваш чек-лист перед запуском любого EXE:

  1. Проверьте источник. Официальный сайт производителя или случайный форум?
  2. Посмотрите на размер. Если крошечный скрипт весит 50 МБ или наоборот — огромный установщик весит 100 КБ — это повод для беспокойства.
  3. Используйте Strings. Ищите powershell, -e, IEX и WebClient.
  4. Используйте песочницы. Смотрите на дерево процессов. Появление PowerShell из-под обычного приложения — это почти всегда атака.
  5. Следите за сетью. Если программа без функций интернета пытается открыть соединение через PowerShell — это 100% вредонос.

Данная информация предоставлена исключительно в ознакомительных целях для обучения методам анализа программного обеспечения. Попытки модификации или анализа чужого ПО могут нести риски для вашей системы. Для профессиональной оценки безопасности рекомендуется обращаться к сертифицированным специалистам по кибербезопасности.

Оцените статью
PEFile — Безопасность и технологии простым языком