Как проверить исполняемый файл на наличие скрытых скриптов PowerShell

Вы скачали программу с неофициального сайта, получили файл по почте или нашли подозрительный .exe на флешке. Запускать страшно — а вдруг внутри спрятан вредоносный скрипт? PowerShell стал излюбленным инструментом злоумышленников: он встроен в Windows, легко маскируется и может загружать что угодно из интернета. Ниже — практические способы проверить исполняемый файл на скрытые PowerShell-команды, от простых до продвинутых.

Почему PowerShell прячут именно в .exe

PowerShell — мощная командная среда Windows. Злоумышленники используют её потому, что:

  • она есть на каждом компьютере с Windows;
  • позволяет загружать и выполнять код из интернета без сохранения файла на диск;
  • легко обходит антивирусы при правильной обфускации;
  • может быть встроена прямо в .exe через встроенные ресурсы или скрипты установки.

Типичная схема: запускается легитимный установщик, а в фоне тихо выполняется PowerShell-команда, которая скачивает и запускает вредоносный код. Пользователь видит обычную установку — и не подозревает о подвохе.

Быстрая проверка: статический анализ без запуска

Первый шаг — посмотреть внутрь файла, не запуская его. Это безопасно и часто даёт ответ сразу.

1. Откройте файл в HEX-редакторе

Скачайте HxD (бесплатный) или любой другой HEX-редактор. Откройте подозрительный .exe и поищите строки:

  • powershell
  • pwsh
  • -enc (закодированная команда)
  • -nop (NoProfile — часто используется в атаках)
  • -w hidden (скрытый запуск)
  • IEX (Invoke-Expression — выполнение строки как кода)
  • DownloadString, DownloadFile, Invoke-WebRequest
  • FromBase64String

Если нашли такие строки — файл почти наверняка запускает PowerShell-скрипт.

2. Используйте Strings для извлечения текста

Утилита strings (входит в Sysinternals Suite) вытаскивает все читаемые строки из бинарного файла:

strings.exe подозрительный_файл.exe | findstr /i "powershell iex download invoke"

Если видите длинные Base64-строки рядом с powershell -enc — это закодированная команда. Её можно декодировать через [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("тут_строка")) в безопасной среде.

3. Проверьте ресурсы файла

Некоторые .exe хранят PowerShell-скрипты как встроенные ресурсы. Откройте файл в Resource Hacker (бесплатный) и посмотрите разделы:

  • RCData
  • Script
  • Custom

Если внутри есть .ps1-файлы или текст с командами PowerShell — это явный признак скрытого скрипта.

Динамический анализ: наблюдайте за поведением

Если статический анализ ничего не дал, но подозрения остались — запустите файл в изолированной среде и посмотрите, что он делает.

1. Мониторинг через Process Monitor

Запустите Process Monitor от Sysinternals, установите фильтр на ваш файл, и запустите его. Смотрите:

  • запускается ли powershell.exe или pwsh.exe как дочерний процесс;
  • какие сетевые подключения устанавливаются;
  • какие файлы создаются или изменяются.

Если видите, что .exe запускает PowerShell с подозрительными аргументами — это подтверждение.

2. Логирование PowerShell

Включите расширенное логирование PowerShell на время проверки:

  • Group Policy → Administrative Templates → Windows Components → Windows PowerShell → Turn on Module Logging и Turn on PowerShell Script Block Logging;
  • или через реестр: HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging → включите EnableScriptBlockLogging.

После запуска файла проверьте Event Viewer → Applications and Services Logs → Microsoft → Windows → PowerShell → Operational. Там будут все выполненные команды.

3. Песочница: безопасный запуск

Для анализа используйте изолированную среду:

  • Windows Sandbox (встроен в Pro/Enterprise);
  • VirtualBox или VMware с снапшотом;
  • Any.Run или Hybrid Analysis — онлайн-песочницы с мониторингом поведения.

В песочнице можно безопасно запустить файл и увидеть все его действия.

Автоматизированные инструменты проверки

Инструмент Что делает Когда использовать
VirusTotal Проверяет файл 70+ антивирусами, показывает поведение в песочнице Первая быстрая проверка любого файла
PEStudio Анализирует структуру PE-файла, ищет подозрительные импорты и строки Статический анализ без запуска
Detect It Easy (DIE) Определяет упаковщики, компиляторы, аномалии в структуре Если файл упакован или обфусцирован
PowerShell AST Parser Разбирает синтаксическое дерево PowerShell-кода Для анализа извлечённых .ps1-скриптов
AMSI (Antimalware Scan Interface) Встроен в Windows, сканирует скрипты перед выполнением Для перехвата скриптов в реальном времени

Что искать в коде: красные флаги

При анализе извлечённого PowerShell-кода обращайте внимание на:

  • Обфускация: длинные строки с символами вроде +, -replace, char[] — попытка скрыть реальные команды;
  • Загрузка из интернета: Invoke-WebRequest, Net.WebClient, Start-BitsTransfer;
  • Выполнение из памяти: IEX, Invoke-Expression, [Reflection.Assembly]::Load;
  • Отключение защиты: Set-MpPreference -DisableRealtimeMonitoring $true, Set-ExecutionPolicy Bypass;
  • Работа с реестром: автозагрузка через HKCU\Software\Microsoft\Windows\CurrentVersion\Run;
  • Base64: длинные строки, которые декодируются перед выполнением.

Типичные ошибки при проверке

  • Проверка только антивирусом: свежие вредоносные скрипты часто не детектируются. Антивирус — первый шаг, но не единственный;
  • Запуск на рабочей машине: даже если «просто посмотреть» — файл может успеть навредить. Используйте песочницу;
  • Игнорирование ложных срабатываний: легитимные программы тоже используют PowerShell (например, установщики, обновление драйверов). Важно отличать нормальное поведение от подозрительного;
  • Проверка только расширения: файл может быть переименованным .scr, .bat, .cmd или даже .docx с макросом, который запускает PowerShell;
  • Отключение логов «чтобы не замедлять»: без логов вы не увидите, что делал скрипт.

Как лучше организовать проверку

  1. Первый эшелон: загрузите файл на VirusTotal. Если детектируется — не запускайте. Если чисто — идите дальше;
  2. Статический анализ: откройте в PEStudio и HEX-редакторе, проверьте строки и ресурсы;
  3. Динамический анализ: запустите в песочнице с Process Monitor и включённым логированием PowerShell;
  4. Анализ результатов: изучите логи, сетевые подключения, созданные файлы;
  5. Решение: если нашли скрытый PowerShell — удалите файл, проверьте систему на изменения.

Что делать в зависимости от ситуации

Если вы обычный пользователь и нашли подозрительный файл: не запускайте его. Проверьте через VirusTotal. Если есть сомнения — удалите и скачайте программу с официального сайта.

Если вы системный администратор и проверяете файл от пользователя: используйте песочницу и Process Monitor. Включите логирование PowerShell на время анализа. Задокументируйте результаты.

Если вы аналитик безопасности: используйте полный цикл — от статического анализа до динамического в изолированной среде. Обратите внимание на AMSI-обходы и обфускацию.

Если файл уже запущен и вы подозреваете компрометацию: немедленно отключите машину от сети, проверьте автозагрузку, запущенные процессы PowerShell, и просканируйте систему антивирусом с обновлением.

Итог

Проверка .exe на скрытые PowerShell-скрипты — это многоуровневый процесс. Начните с быстрой проверки через VirusTotal и анализа строк в HEX-редакторе. Если подозрения остались — используйте песочницу с мониторингом процессов и включённым логированием PowerShell. Не полагайтесь только на антивирус — он не видит всё. Главное правило: никогда не запускайте подозрительный файл на рабочей машине. Лучше потратить 15 минут на анализ, чем потом восстанавливать систему.

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