Статьи · Безопасность

BAT, CMD, VBS-скрипты: как проверить перед запуском

Файл с расширением .bat, .cmd или .vbs выглядит безобидно — просто текстовый скрипт, не «настоящая» программа. Но именно скрипты часто используют для доставки вредоносного кода: внутри несколько строк могут незаметно скачать и запустить что угодно, а антивирус распознаёт это не всегда и не сразу. Прежде чем решать, какие расширения вообще считаются рискованными, полезно сверить файл с картой опасных расширений — а в этой статье разберём именно скрипты: как малварь прячется внутри .bat/.vbs/.ps1-файла и как проверить его перед запуском, не полагаясь на одну иконку или один антивирус.

Коротко: скрипт нельзя оценивать по иконке или расширению — вредоносный код внутри .bat/.vbs/.ps1 часто скрыт через шифрование и обфускацию и срабатывает только при запуске. Перед тем как дважды кликнуть по файлу, посчитайте его хэш (Get-FileHash), проверьте хэш или сам файл на VirusTotal, посмотрите, есть ли цифровая подпись (Get-AuthenticodeSignature), и при малейшем сомнении — откройте скрипт в Блокноте или прогоните в песочнице (Windows Sandbox, ANY.RUN), а не запускайте вслепую.

Обновлено: 7 ноября 2026 Редакция Loadfile Чтение 12 мин
BAT, CMD, VBS-скрипты: как проверить перед запуском
Содержание
  1. Почему расширению .bat/.vbs/.ps1 нельзя доверять на вид
  2. Как малварь прячется внутри скрипта: разбор реального случая
  3. Что искать, если открыть скрипт в Блокноте перед запуском
  4. Как проверить скрипт перед запуском — пошагово
  5. Если скрипт пришёл от «надёжного» источника — как запустить без риска
  6. Уже запустили подозрительный скрипт — что делать дальше
  7. Чек-лист перед запуском любого .bat/.vbs/.ps1-файла
  8. Частые вопросы

Скриптовые файлы — .bat, .cmd, .vbs, .ps1, а также смежные с ними .js, .wsf и .hta — объединяет одно: это не скомпилированная программа, а текст с командами, который операционная система выполняет построчно через свой интерпретатор. Именно поэтому их так часто используют для доставки вредоносного кода: написать и изменить такой скрипт проще, чем собрать полноценный исполняемый файл, а часть пользователей по-прежнему считает «просто текстовый файл» безопаснее .exe.

Почему расширению .bat/.vbs/.ps1 нельзя доверять на вид

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

РасширениеЧем исполняетсяТипичный рискЧто проверить первым
.bat / .cmdcmd.exeПростые команды-загрузчики: скачать файл, запустить программу, изменить реестрОткрыть в Блокноте, искать команды скачивания и запуска
.vbsWScript / CScriptЗапуск других программ через COM-объекты, часто с обфускацией кодаИскать Base64-строки и вызовы WScript.Shell
.ps1PowerShellПолноценный доступ к системе, загрузка кода прямо в память без записи на дискИскать флаги -enc / -EncodedCommand, -WindowStyle Hidden
.js / .wsfWScript (Windows Script Host)То же, что у .vbs — часто запускается двойным кликом по умолчаниюПроверить, не ассоциирован ли файл с WScript вместо браузера
.htamshta.exeHTML-приложение с полным доступом к скриптам Windows, в обход ограничений браузераНе открывать из писем и мессенджеров без проверки

Разница в интерпретаторе важна практически: .bat-файл ограничен возможностями командной строки, а .ps1 через PowerShell может сделать с системой почти всё — от скачивания файлов до загрузки кода прямо в память процесса. Поэтому проверять скрипт перед запуском нужно именно по его реальному расширению, а не по тому, как он выглядит на иконке.

Как малварь прячется внутри скрипта: разбор реального случая

Чтобы понимать, что именно искать при проверке, полезно разобрать один зафиксированный случай — опубликованный на Habr технический разбор реального VBS-скрипта с многослойной обфускацией. Это разбор одного конкретного образца, а не статистика по всем вредоносным скриптам, но он хорошо показывает логику, которую используют и другие похожие угрозы.

Скрипт был устроен так, что сам читал собственное содержимое через WScript.ScriptFullName — то есть открывал себя как обычный файл и извлекал из своего же текста зашифрованные данные. Дальше эти данные проходили цепочку расшифровки: сначала простое XOR, затем AES в режиме CBC — комбинация, которая усложняет статический анализ, потому что реальная полезная нагрузка не видна в самом файле до момента выполнения.

После расшифровки скрипт не записывал итоговый код на диск, а загружал .NET-сборку прямо в память процесса через [Reflection.Assembly]::Load — это значит, что на жёстком диске не оставалось отдельного «вирусного файла», который можно было бы просто найти и удалить. Запуск дальнейшего кода маскировался под легитимный процесс — через MSBuild.exe, стандартный инструмент сборки .NET, который редко попадает под подозрение у пользователя и части защитных решений.

Отдельно в разборе отмечены типичные флаги PowerShell, которые использовались на следующих этапах: -WindowStyle Hidden (запуск без видимого окна) и Set-ExecutionPolicy Bypass (временное снятие ограничения на запуск неподписанных скриптов). Скрипт также проверял LanguageMode PowerShell — это способ определить, не запущен ли он в ограниченной среде вроде песочницы или корпоративной политики безопасности, и изменить поведение, если обнаружено наблюдение.

На что это похоже внешне

Снаружи такой файл выглядит как обычный «безопасный» текстовый документ: несколько строк комментариев вида 'DATA:, за которыми следует длинный бессмысленный на вид набор символов — тот самый зашифрованный и закодированный в Base64 полезный код. Человек, открывший файл просто посмотреть, скорее всего решит, что это «какой-то технический мусор», и закроет его, не распознав угрозу — именно на эту реакцию и рассчитана обфускация.

Что искать, если открыть скрипт в Блокноте перед запуском

Прежде чем запускать незнакомый .bat, .vbs или .ps1-файл, его стоит сначала прочитать — но не двойным кликом (это сразу его выполнит), а через контекстное меню «Изменить» или явное открытие в Блокноте.

  1. Откройте файл правой кнопкой мыши → «Изменить» (или «Открыть с помощью» → Блокнот). Ни в коем случае не двойной клик — для .bat/.cmd/.vbs/.js/.wsf/.hta это сразу запустит код.
  2. Прочитайте текст целиком, а не только начало. Вредоносная часть часто спрятана в конце файла или после большого блока комментариев-«шума».
  3. Поищите длинные бессмысленные строки символов. Это обычно Base64-кодированная полезная нагрузка — легитимные скрипты редко содержат такие блоки без пояснения.
  4. Поищите флаги -enc или -EncodedCommand. Это прямой признак того, что PowerShell должен выполнить закодированную, то есть скрытую от беглого просмотра команду.
  5. Поищите WindowStyle Hidden и Set-ExecutionPolicy Bypass. Легитимным административным скриптам обычно незачем прятать своё окно и обходить политику выполнения.
  6. Поищите обращения к незнакомым IP-адресам или доменам. Строки с http:///https:// и явными числовыми IP в теле скрипта — повод насторожиться, особенно если скрипт пришёл не от разработчика ПО.
  7. Обратите внимание на нестандартные маркеры-разделители. Комментарии вроде 'DATA: или похожие самодельные метки часто используются именно для того, чтобы скрипт мог найти и расшифровать свою же полезную нагрузку — обычным скриптам такие маркеры не нужны.
!
Два признака — повод остановиться

Если в тексте скрипта вы заметили хотя бы два признака из списка выше — длинные Base64-строки, флаги кодирования/скрытия окна или обращения к незнакомым адресам — не запускайте файл. Переходите к пошаговой проверке в следующем разделе.

Как проверить скрипт перед запуском — пошагово

Даже если при просмотре в Блокноте ничего подозрительного не нашлось, это не стопроцентная гарантия — короткий легитимный на вид скрипт тоже может скачивать и запускать что-то дальше. Поэтому перед запуском любого незнакомого скрипта стоит пройти несколько быстрых технических проверок.

  1. Посчитайте хэш файла. В PowerShell выполните Get-FileHash <путь к файлу> -Algorithm SHA256 — команда вернёт контрольную сумму, по которой можно однозначно идентифицировать конкретный файл, независимо от его названия. Подробнее о том, как и зачем это делать, — в статье как проверить контрольную сумму файла. Документация команды — у Microsoft Learn.
  2. Проверьте хэш (или сам файл) на VirusTotal. Если файл уже встречался другим пользователям сервиса, достаточно вставить посчитанный хэш в поиск — результат появится мгновенно без загрузки содержимого. Если хэш не найден, можно загрузить сам скрипт на VirusTotal — сервис прогонит его через десятки антивирусных движков. Общий порядок такой проверки для любых файлов, не только скриптов, разобран в статье как проверить файл на вирусы онлайн.
  3. Посмотрите цифровую подпись файла. Команда Get-AuthenticodeSignature <путь к файлу> в PowerShell покажет, подписан ли скрипт и кем именно (документация — у Microsoft Learn). Подпись от известного и доверенного издателя — хороший сигнал; статус «не подписан» сам по себе не доказывает вредоносность (многие безобидные административные скрипты тоже не подписаны), но в сочетании с другими признаками повышает осторожность.
  4. При малейших сомнениях — прогоните скрипт в изолированной среде. Встроенный в Windows 10/11 Pro Windows Sandbox или онлайн-песочницы вроде ANY.RUN и Hybrid Analysis запускают файл в полностью изолированной системе и показывают его реальное поведение — какие процессы он создаёт, куда обращается по сети, что меняет в системе. Поведенческий анализ в песочнице ловит угрозы, которые пропускает статическое сканирование: обфусцированный код расшифровывается и проявляет себя только в момент выполнения.
✓
Почему именно в этом порядке

Хэш и VirusTotal — быстрая проверка «уже известен ли этот файл как опасный». Подпись — проверка происхождения. Песочница — самый надёжный, но и самый медленный шаг: его стоит делать именно тогда, когда первые две проверки не дали однозначного ответа, а не каждый раз подряд.

Если скрипт пришёл от «надёжного» источника — как запустить без риска

Даже когда скрипт прислал коллега, скачан с сайта разработчика ПО или идёт в комплекте с легальной программой, стоит соблюдать несколько правил запуска — они не требуют отдельной проверки, но снижают ущерб, если источник всё же оказался скомпрометирован.

  • Запускайте скрипт под обычной учётной записью, а не под администратором — если потребуются повышенные права, Windows отдельно спросит об этом через UAC.
  • Не отключайте Windows Defender и SmartScreen «чтобы не мешали» — это штатные фильтры первого уровня, и временное отключение ради одного запуска может остаться без контроля надолго.
  • Не переводите ExecutionPolicy PowerShell в Unrestricted глобально. Если конкретный доверенный скрипт требует обхода политики, делайте это разово для одного запуска, а не меняйте политику для системы целиком.

Уже запустили подозрительный скрипт — что делать дальше

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

  1. Отключите устройство от сети. Выключите Wi-Fi или выдерните кабель — это остановит возможную передачу данных наружу и загрузку дополнительных вредоносных компонентов.
  2. Проверьте автозагрузку. Откройте Планировщик заданий (Task Scheduler) и посмотрите, не появились ли новые незнакомые задачи; проверьте ветки реестра Run и RunOnce — туда часто добавляют записи для повторного запуска при каждой загрузке системы.
  3. Запустите offline-сканирование Microsoft Defender. Этот режим проверяет систему до полной загрузки Windows, что помогает обнаружить компоненты, которые прячутся от обычного сканирования в рабочей сессии.
  4. Если файлы на диске оказались зашифрованы — это уже не обычное заражение, а программа-вымогатель, и здесь другой алгоритм действий. Не платите выкуп сразу — иногда файлы можно восстановить другими способами, подробный разбор — в статье как восстановить файлы после шифровальщика без выкупа.

Чек-лист перед запуском любого .bat/.vbs/.ps1-файла

💡
Перед тем как запустить незнакомый скрипт

1. Источник файла ожидаемый и проверенный, а не случайное вложение?
2. Реальное расширение видно (включены расширения файлов в проводнике), а не спрятано за двойным расширением?
3. Хэш файла посчитан через Get-FileHash?
4. Хэш или файл проверены на VirusTotal?
5. Цифровая подпись проверена через Get-AuthenticodeSignature?
6. При сомнениях — скрипт прогнан в Windows Sandbox или онлайн-песочнице?
7. Запуск планируется под обычным пользователем, без отключения Defender и SmartScreen?

Частые вопросы

Можно ли доверять скрипту, если антивирус его пропустил?

Не полностью. Обфусцированный и зашифрованный код — именно так, как в разобранном выше случае — может не распознаваться антивирусом на статическом этапе, потому что реальная полезная нагрузка расшифровывается только в момент выполнения. Отсутствие детектов снижает вероятность угрозы, но не исключает её — для скриптов из непроверенных источников стоит дополнительно проверить содержимое и подпись.

Чем .bat отличается от .ps1 по опасности?

.bat-файл выполняется через cmd.exe и ограничен возможностями командной строки — скачать файл, запустить программу, изменить несколько настроек. .ps1-скрипт работает через PowerShell, который имеет гораздо более широкий доступ к системе: может загружать код прямо в память процесса, управлять сетевыми подключениями и взаимодействовать с .NET напрямую. При прочих равных .ps1-файл потенциально опаснее.

Безопасно ли открыть .vbs-файл в Блокноте, не запуская?

Да, открытие текстового содержимого файла через «Изменить» или явный выбор Блокнота не запускает скрипт — это просто просмотр текста. Опасность возникает только при двойном клике или явном запуске через интерпретатор WScript/CScript.

Что означает цифровая подпись у скрипта и зачем её проверять?

Цифровая подпись подтверждает, кто именно подписал файл и что его содержимое не менялось после подписания. Для скрипта от известного издателя это хороший дополнительный сигнал доверия. Но отсутствие подписи — не приговор: многие легитимные административные и пользовательские .ps1/.vbs-скрипты никогда не подписываются, поэтому этот признак стоит оценивать вместе с остальными, а не отдельно.

Нужна ли песочница, если VirusTotal показал 0 детектов?

Если скрипт выглядит стандартно и пришёл из надёжного источника — обычно нет. Но если в тексте файла при этом есть признаки обфускации (длинные Base64-строки, флаги -enc, скрытие окна), песочница всё равно оправдана: мультисканер на VirusTotal проверяет файл статически, а обфусцированный вредоносный код часто не детектируется именно на этом этапе и проявляет себя только при реальном выполнении.

Как включить отображение расширений файлов в Windows, чтобы не спутать .jpg.vbs с .jpg?

В проводнике откройте вкладку «Вид» → «Показать» → включите «Расширения имён файлов» (в более старых версиях — через «Параметры папок» → вкладка «Вид» → снимите галочку «Скрывать расширения для зарегистрированных типов файлов»). После этого двойное расширение вроде .jpg.vbs станет видно целиком, а не только как «.jpg».

Читайте также

Читайте также