Статический сканер Minecraft-модов. Он читает .jar и .jar.sample как архив,
разбирает байткод через ASM и ищет подозрительные строки, вызовы и упакованные
файлы. Код мода не загружается и не выполняется.
Интерфейс на тестовых JAR; онлайн-сверка на снимке пропущена.
Выберите папку с модами или один JAR и нажмите «Проверить» — быстрая проверка сверит хеши с Modrinth и CurseForge. Для анализа содержимого выберите полную проверку: сканер прочитает архив и байткод без запуска мода, покажет вердикт, очки и причины находок.
Программа работает в двух режимах:
- без аргументов открывается окно Swing;
- с одним аргументом печатается консольный отчёт.
В версии 1.3 доступны новый интерфейс FlatLaf со светлой и тёмной темами, быстрая сверка с сайтами, фильтры, экспорт TXT/JSON и проверка хешей нативных файлов через VirusTotal. Готовую сборку можно скачать в релизе ниже. Правила 1–29, их очки и условия вердиктов сохранены.
- Новый интерфейс FlatLaf, светлая/тёмная темы и увеличенное окно настроек. Ключи находятся в настройках, дополнительные команды — в меню «Действия».
- Поиск и фильтры по результату, правилу и источнику; сортировка таблицы, сворачиваемые подробности с изменяемой высотой.
- Выбранный файл, выделение текста и прокрутка подробностей сохраняются, пока поступают новые результаты.
- «Быстрая проверка» сверяет хеши с Modrinth и CurseForge без анализа кода; неподтверждённые файлы можно отправить на полную проверку.
- Кнопка «Стоп → Продолжить» сохраняет очередь и готовые результаты.
- Экспорт TXT/JSON; отчёты различают основной и вложенные JAR.
- VirusTotal для SHA-256 нативных файлов: ключ в настройках, кэш и квоты. Файлы не отправляются на сервис, баллы сканера не меняются.
- Лимиты чтения архивов с явной ошибкой незавершённой проверки; в настройках можно снять лимиты размера, числа файлов и времени.
- Потоковый отпечаток CurseForge и автоматические сборки Windows/Linux.
- 120 автопроверок и 11 GUI-сценариев, включая остановку и продолжение.
Готовые файлы: релиз v1.3.
Для запуска скачайте modchecker.jar либо ZIP с JAR и инструкцией.
Требуется Java 17 или новее. SHA256SUMS.txt содержит контрольные суммы файлов.
- Правило 4 ищет данные браузера только в
.class, включая скрытые строки.Local Storageв JSON перевода больше не даёт эту находку. - Правило 11 отличает обычный числовой XOR в хешах и масках изображений от признаков обработки скрытых байтов или строк.
- В отчёте есть пояснение о находках во вложенных JAR. Возможности библиотек остаются видимыми, включая нативные файлы по правилу 17.
- Ниже описаны все 29 правил с очками, связками и примером расчёта.
- Сборка проверена 96 автопроверками. Дополнительно выполнен статический прогон 495 файлов ATM10: 491 ОК, 4 ПОДОЗРИТЕЛЬНО, 0 ОПАСНО, 0 ошибок. Это результат конкретного набора файлов, а не гарантия для любой сборки.
- проверяет строковые константы в
.class; - проверяет текст в
.json,.txt,.properties,.cfg; - смотрит вложенные
.jarи.jar.sampleдо двух уровней с полными путями; - ищет известные строки: Discord/Telegram, данные аккаунтов и браузера,
кошельки, Pastebin, Fractureiser; правила
Данные браузераиCookiesпроверяются только в.class, чтобы не ловить переводы и имена методов в.json,.txtи.properties; - ищет простую маскировку строк: Base64, hex, переворот, XOR, сборку через
StringBuilderиchar[]; - показывает до 10 Base64-строк, которые раскрываются в обычный текст, как заметки для ручной проверки (очков они не дают);
- отмечает опасные вызовы: загрузку кода,
Runtime.exec/ProcessBuilder, сетевые подключения, обращение кAPPDATA/user.home; запускexplorer/xdg-open/open/rundll32+url.dllрядом сRuntime.exec(в том числе через helper-метод класса) считается открытием папки или ссылки и даёт 1 очко; - отмечает сбор ID железа: OSHI, MAC-адрес,
wmic/реестр Windows (правила 22 и 23); - ищет RAT: скрытые jar в
assets/data/resources/корне (24), имена-улики как заметку без очков (25), три и больше разных команд (26), реальные API вебкамеры/захвата экрана (27), кражу токенов Discord (28), туннели и публичные голые IP (29); - критическая связка даёт
ОПАСНОи +10, только если высоконадёжная вредная часть (реальная слежка, кража или правило 26) совпала с правилом 24 или 29 в одной области; обычные имена-улики и игровая камера её не образуют; - выводит найденные ссылки, домены, IP-адреса, вебхуки и токены для ручной проверки;
- считает связки
КРАЖАиЗАГРУЗЧИКтолько внутри основного кода или одного и того же вложенного jar; - отмечает исполняемые файлы внутри jar;
- проверяет SHA-1 на Modrinth и отпечаток CurseForge;
- учитывает ручной список доверенных SHA-1;
- складывает находки в очки и выдаёт вердикт.
Номер в квадратных скобках в отчёте — это номер правила из таблицы ниже. Очки показывают вес найденного признака, а не вероятность заражения. Сканер ищет строки и вызовы в файлах: наличие вызова не означает, что он выполнялся. Код проверяемого мода никогда не загружается и не запускается.
Каждое правило добавляет очки один раз на весь мод, включая вложенные JAR. Для правил 9, 10 и 13 берётся максимальный найденный вес. Дополнительные очки за сочетания признаков описаны после таблицы.
Правила 1–8 ищут совпадения без учёта регистра в строковых константах
.class и тексте .json, .txt, .properties, .cfg. Исключение:
правила 4 и 5 действуют только в .class, включая скрытые строки из классов.
| № | Что ищет правило | Очки |
|---|---|---|
| 1 | Discord-вебхук: discord.com/api/webhooks или discordapp.com/api/webhooks. |
4 |
| 2 | Telegram Bot API: api.telegram.org. |
3 |
| 3 | Имена файлов аккаунтов Minecraft: launcher_accounts или launcher_profiles. |
3 |
| 4 | Данные браузера: local storage, leveldb, login data. Только в .class; слова в переводах и конфигурациях не учитываются этим правилом. |
4 |
| 5 | Строка cookies. Только в .class, чтобы не учитывать имена методов в refmap JSON. |
1 |
| 6 | Имя файла Bitcoin-кошелька: wallet.dat. |
3 |
| 7 | Известные строки Fractureiser: dev/neko или skyrage. |
10 |
| 8 | Строка pastebin.com. |
1 |
| № | Что ищет правило | Очки |
|---|---|---|
| 9 | Сигнатура правил 1–8 скрыта через Base64, hex или переворот строки. Для данных браузера и Cookies сохраняется ограничение на .class. |
Вес найденной сигнатуры + 3; от 4 до 13 |
| 10 | Сигнатура правил 1–8 восстановлена статическим разбором простого XOR, сборки через StringBuilder или char[]. Произвольный код для расшифровки не выполняется. |
Вес найденной сигнатуры + 3; от 4 до 13 |
| 11 | В байткоде есть XOR-цикл с байтовым массивом и записью XOR-результата в байты либо преобразованием байтов в строку, но опасная XOR-строка не восстановлена. Обычный числовой XOR в хешах и масках без этих признаков не учитывается. | 2 |
| 12 | Вызовы загрузки кода: URLClassLoader или defineClass с массивом байтов. Генерация классов встречается и в легальных библиотеках. |
4 |
| 13 | Вызовы Runtime.exec или создания/запуска ProcessBuilder. При распознанном открытии папки или ссылки вес снижается до 1. |
3 или 1 |
| 14 | Известные сетевые вызовы: URL.openConnection, Socket, SSLSocket, HttpClient. Сам сканер эти вызовы из мода не выполняет. |
2 |
| 15 | Строки с APPDATA / AppData или user.home: возможное обращение к данным пользователя. |
2 |
| 16 | В статическом блоке класса (<clinit>) найден вызов из правил 12–14. Этот блок сканер не запускает. |
2 |
| 17 | Внутри JAR есть .exe, .dll, .bat, .cmd, .ps1, .vbs или .scr. Содержимое этих файлов не анализируется и не запускается. |
4 |
| 18 | В строковой константе .class есть ASCII-фрагмент длиной от 64 символов с энтропией от 4,8 бит — строка выглядит случайной. Похожие на алфавит таблицы исключаются; текстовые ресурсы не учитываются. |
1 |
| 19 | Файл размером от 4096 байт с энтропией от 7,5 бит. Известные форматы изображений, звука, шрифтов, архивов, .nbt, .class и файлы подписей в META-INF исключаются. |
2 |
| 20 | В моде не менее 10 классов и хотя бы у половины простое имя не длиннее двух символов. Это слабый признак обфускации, который сам по себе не даёт ОПАСНО. |
1 |
| 21 | Не менее 20% имён классов содержат символы вне ASCII. Это слабый признак, который сам по себе не даёт ОПАСНО. |
1 |
HWID — идентификаторы компьютера или его компонентов. RAT — программа удалённого управления; перечисленные признаки могут встречаться и в легальных модах, поэтому важны контекст и сочетания находок.
| № | Что ищет правило | Очки |
|---|---|---|
| 22 | Известные признаки сбора HWID: вызовы OSHI, получение MAC через NetworkInterface, строки wmic, csproduct, MachineGuid. baseboard и diskdrive учитываются только вместе с маркерами команд/реестра в той же строке. |
3 |
| 23 | Признак правила 22 находится в классе с коротким или похожим на обфусцированное именем, а больше половины классов названы обычно. Одно необычное имя без сбора HWID это правило не включает. | 2 |
| 24 | Вложенный JAR или .jar.sample спрятан в assets, data, resources или корне архива. Штатные вложенные библиотеки в META-INF/jars и META-INF/jarjar этим правилом не отмечаются. |
6 |
| 25 | Имена классов/методов с маркерами вроде keylog, grabber, backdoor, либо отдельными частями steal, rat, c2. Это заметка для просмотра, без очков. |
0 |
| 26 | Найдены хотя бы три разных командных маркера: например, PASSWORD_STEAL, DISCORD_STEAL, STREAM_START, WEBCAM_START, MIC_START. Пара FILE_UPLOAD + FILE_DOWNLOAD считается одним дополнительным маркером. |
6 |
| 27 | Вызовы известных API захвата экрана или вебкамеры дают 4 очка; обращения к TargetDataLine для микрофона добавляют 1. Игровая камера Minecraft не считается вебкамерой. |
1, 4 или 5 |
| 28 | Есть маркер хранилища Local Storage, leveldb или .ldb и токен Discord либо известный шаблон его поиска. Это отдельная проверка сочетания признаков, а не правило 4. |
5 |
| 29 | В байткоде создания URL или сокета найден подозрительный адрес: числовой IPv4 вне исключённых локальных диапазонов либо известный туннель/DDNS, например ngrok, portmap, serveo, trycloudflare, DuckDNS или No-IP. Произвольная ссылка в JSON это правило не включает. | 3 |
Связка — дополнительные очки за сочетание признаков в одной области: в основном коде мода или внутри одного и того же вложенного JAR. Каждый тип связки добавляется не больше одного раза.
- КРАЖА: +4. Канал передачи из правила 1 или 2 сочетается с данными аккаунтов, браузера или кошелька из правила 3, 4 или 6. Восстановленные скрытые сигнатуры тоже учитываются.
- ЗАГРУЗЧИК: +3. Одно из правил 9, 10, 11 или 19 сочетается с загрузкой кода по правилу 12. Длинная случайная строка из правила 18 сюда не входит.
- КРИТИЧЕСКАЯ: +10 и признак RAT. Правило 24 или 29 сочетается с
захватом экрана/вебкамерой, правилом 26 или 28 либо специальным маркером
кражи. В текущей реализации такими маркерами также служат команды
PASSWORD_STEAL,DISCORD_STEAL,TELEGRAM_STEALи распознанные имена сstealPassword,stealToken,stealDiscordToken,stealTelegramToken. Обычная заметка правила 25 и один микрофон критическую связку не образуют. Если файл не подтверждён на сайте, критическая связка даётОПАСНО.
Пример: Discord-вебхук (1: +4) и Local Storage в .class (4: +4)
в основном коде дают ещё связку КРАЖА (+4). Итого 12 очков и
ПОДОЗРИТЕЛЬНО, если нет ручного доверия или критической связки.
Если Local Storage находится только в JSON перевода, правило 4 и эта
связка не сработают.
Вложенные библиотеки проверяются теми же правилами. В отчёте отдельно указывается число находок во вложенных JAR и поясняется их происхождение. Исключений по одному имени библиотеки или её пакета нет: все находки сохраняются. Поэтому скриптовые и ML-библиотеки с загрузкой классов, процессами и нативными файлами могут получить ПОДОЗРИТЕЛЬНО.
Наличие DLL не доказывает заражение: например, легальная библиотека
media-player-info от dev.redstones тоже может дать правило 17.
Ссылки, домены, IP, токены и заметки о раскрытом Base64 выводятся для
ручного просмотра; их список сам по себе дополнительных очков не даёт.
Приоритет: ОШИБКА > ОПАСНО > ДОВЕРЕН (вручную) > ПОДОЗРИТЕЛЬНО >
ОК > НЕИЗВЕСТНО.
ОПАСНО- сработала критическая RAT-связка. Ручное доверие этот вердикт не отменяет. Если файл подтверждён на Modrinth или CurseForge, вердикт не может быть вышеПОДОЗРИТЕЛЬНО: официальный файл никогда не получаетОПАСНО.ПОДОЗРИТЕЛЬНО- 10 и больше очков.ДОВЕРЕН (вручную)- SHA-1 файла найден вtrusted_hashes.txt; это ручное решение пользователя, а не подтверждение сайта.ОК- меньше 10 очков и файл подтверждён на Modrinth или CurseForge.НЕИЗВЕСТНО- меньше 10 очков, но подтверждения сайта нет.ОШИБКА- файл не читается как jar.
ПОДОЗРИТЕЛЬНО - не приговор. НЕИЗВЕСТНО - не гарантия безопасности.
Совпадение с сайтом означает только то, что файл совпал с официальной
страницей, а не то, что он безопасен. Ручное доверие не скрывает находки:
они остаются в отчёте, но не отменяют ОПАСНО у неподтверждённого файла.
- Java 17 или новее.
- Windows, Linux или macOS.
- Для сборки отдельный Gradle не нужен: в репозитории есть Gradle Wrapper.
Windows:
gradlew.bat buildLinux/macOS:
./gradlew buildГотовый файл появится здесь:
build/libs/modchecker.jar
Рядом с ним Gradle также копирует README.txt.
gradlew, gradlew.bat, gradle/wrapper/gradle-wrapper.jar и
gradle/wrapper/gradle-wrapper.properties являются частью проекта. Их нужно
хранить в репозитории, иначе проект не соберётся у другого человека.
После сборки откройте build/libs/modchecker.jar двойным кликом.
Если двойной клик не открывает jar, запустите его из консоли:
java -jar build\libs\modchecker.jarВ окне можно выбрать папку с модами, один .jar или .jar.sample,
перетащить папку/файл мышкой и выбрать режим рядом с кнопкой «Проверить».
Основную часть окна занимает таблица. Заголовки столбцов сортируют строки,
поиск проверяет имя файла и текст находок. Фильтры позволяют выбрать вердикт,
номер правила и источник находки: основной или вложенный JAR.
Фильтры не меняют результаты и баллы; экспорт сохраняет весь набор строк.
Нажатие на строку показывает подробности снизу. Кнопка «Подробности» сворачивает панель, разделитель меняет её высоту. Внизу находятся статистика, прогресс и статус. Вердикты обозначены и текстом, и цветом. Новые результаты не сбрасывают выбранный файл, выделение текста и прокрутку уже открытых подробностей, в том числе при сортировке таблицы.
Кнопка «Стоп» рядом с прогрессом завершает текущий файл (в быстром режиме — текущее хеширование/сверку пакета), сохраняет готовые строки и меняется на «Продолжить». Продолжение обрабатывает оставшиеся файлы; готовые файлы повторно не проверяются. Во время остановки можно просматривать и экспортировать результаты. Новая проверка через кнопку «Проверить» заменяет старую очередь; очередь хранится до закрытия программы.
«Действия» и меню по правой кнопке дают доступ к полной проверке
выбранного файла / неподтверждённых файлов, ручному доверию, копированию
подробностей и VirusTotal. «Экспорт» сохраняет TXT или JSON в UTF-8.
JSON содержит режим, очки (null для быстрой проверки), источники и места
находок, связки и результаты сайтов. Отчёты могут содержать найденные токены:
проверяйте содержимое перед публикацией.
В отдельном окне «Настройки» находятся ключи CurseForge/VirusTotal и переключатель темы. Выбор темы сохраняется на этом компьютере.
Файлы .jar.sample проверяются так же, как .jar. Это удобно для образцов,
которые нельзя случайно запустить двойным кликом.
- Выберите папку или файл, режим «Быстрая проверка» и нажмите «Проверить». Программа прочитает файлы для вычисления хешей и отправит пакетные запросы на Modrinth и CurseForge. Архивы и байткод в этом режиме не разбираются.
- «ПОДТВЕРЖДЁН НА САЙТЕ» означает совпадение с опубликованным файлом. Это результат сверки, а не анализа кода: колонка очков остаётся пустой.
- Если подтверждения нет, выберите строку и откройте «Действия → Полная проверка выбранного». Пункт «Полная проверка неподтверждённых» запускает полный анализ всех оставшихся файлов без подтверждения. Остальные строки сохраняются; результат выбранного файла обновляется на месте.
- Режим «Полная проверка» рядом с кнопкой «Проверить» сразу анализирует все моды по указанному пути. Анализ подтверждённого файла также доступен через меню полной проверки выбранного мода.
«НЕ НАЙДЕН НА САЙТАХ» показывается, только когда оба сайта ответили, что файл не найден. Если нет ключа CurseForge, сайт недоступен или ответ некорректен, соответствующая проверка отмечается как пропущенная либо недоступная. В таком случае это не подтверждение отсутствия файла. Отсутствие на сайтах само по себе не означает, что мод вредоносный.
Быстрый режим не применяет ручное доверие и не выдаёт статический вердикт. При полной проверке заново читается файл и заново выполняется сверка: изменённый после быстрой проверки файл не получает старое подтверждение. Оба режима работают в фоне и позволяют сохранить отчёт с указанием режима.
С одним аргументом выполняется полная проверка в консоли:
java -jar build\libs\modchecker.jar "C:\путь\к\mods"
java -jar build\libs\modchecker.jar "C:\путь\к\моду.jar"
java -jar build\libs\modchecker.jar "C:\путь\к\образцу.jar.sample"Без аргументов открывается окно. Если аргументов больше одного, программа показывает подсказку по запуску.
Ключ нужен только для проверки отпечатка файла на CurseForge. Если ключа нет, эта проверка пропускается, а Modrinth продолжает работать.
В «Настройки → CurseForge» есть поле ключа, кнопки Показать,
Проверить ключ, Удалить и галочка Сохранять ключ на этом компьютере.
Если включить сохранение, ключ записывается сюда:
- Windows:
%APPDATA%\modchecker\curseforge_key.txt - Linux/macOS:
~/.modchecker/curseforge_key.txt
При следующем запуске GUI сам загрузит сохранённый ключ.
Старый способ тоже поддерживается: если сохранённого ключа нет, GUI ищет
curseforge_key.txt в папке запуска, затем в ~/.modchecker. Консольный
режим ищет ключ по этим старым правилам.
Не кладите ключ в build/libs: команда gradlew clean удаляет папку build.
Ключ в корне проекта, в %APPDATA%\modchecker или в ~/.modchecker переживает
пересборку.
Ключ никогда не выводится в консоль, отчёт или сообщения об ошибках.
Локальный curseforge_key.txt исключён в .gitignore и не должен попадать
в репозиторий.
В «Настройки → VirusTotal» задайте собственный API-ключ. Он сохраняется
в %APPDATA%\modchecker\virustotal_key.txt (Linux/macOS:
~/.modchecker/virustotal_key.txt). Ключ не входит в сборку и отчёты.
Выберите строку и «Действия → Нативные файлы → VirusTotal». Сканер читает
.exe, .dll, .so, .dylib, включая вложенные JAR, и отправляет только
SHA-256 в API получения отчёта VirusTotal.
Файлы не извлекаются на диск, не загружаются на сервис и не запускаются.
Проверка выполняется по запросу пользователя, отдельно от основной проверки.
Результат показывает число срабатываний, подозрительных оценок, дату анализа и использование кэша. Нет ключа, HTTP 404, ошибка сети и исчерпанная квота показываются раздельно. Отсутствие данных или срабатываний не означает безопасность. Баллы, правило 17 и статический вердикт не меняются.
Ограничение клиента: максимум 4 запроса за 60 секунд и 500 за скользящие
24 часа, общий журнал между запусками. Это учитывает
квоты публичного API.
При исчерпании квоты запросы пропускаются с пояснением; действие можно
повторить позже. Кэш найденных отчётов действует 24 часа, отсутствующих — час.
Кэш и журнал находятся в папке modchecker/virustotal-cache пользователя;
они не содержат ключа.
В «Настройки → Проверка архивов» можно включить «Снять ограничения
проверки архивов». Выбор сохраняется в scan-settings.properties в папке
modchecker пользователя и применяется к следующим полным проверкам и
чтению нативных файлов в GUI. Отключаются лимиты размера, количества записей
и времени. Большим архивам может потребоваться больше памяти и времени.
Глубина разбора остаётся равной двум уровням, квоты VirusTotal — прежними.
По умолчанию ограничения включены.
Файл с ошибкой лимита можно выбрать в таблице и проверить повторно через
«Действия → Полная проверка выбранного» после изменения настройки.
Чтение ограничено 75 000 записей архива, 64 МиБ на одну запись, 8 МиБ на
.class, 512 МиБ на исходный архив и на суммарные читаемые распакованные
данные. Общий бюджет включает вложенные архивы и их содержимое; глубина
разбора остаётся равной двум уровням.
Бюджет времени — 120 секунд на файл; он проверяется во время чтения и между
этапами анализа. Это кооперативная проверка времени, не отдельный процесс.
Превышение лимита даёт ОШИБКА: «Проверка не завершена», а не чистый вердикт. Большой легальный архив тоже может превысить лимит. Лимиты не считаются признаком вредоносности. Отпечаток CurseForge вычисляется потоково, без чтения всего JAR в массив; алгоритм MurmurHash2 seed 1 сохранён.
Ручной список доверенных файлов читается из двух мест:
trusted_hashes.txtрядом с проверяемым jar;%APPDATA%\modchecker\trusted_hashes.txt(на других системах~/.modchecker/trusted_hashes.txt).
Формат строки:
SHA-1 комментарий
Пустые строки и строки, начинающиеся с #, пропускаются. Если SHA-1 мода
найден в списке, вердикт становится ДОВЕРЕН (вручную) независимо от очков.
Все находки всё равно показываются в отчёте, а очки не меняются.
Исключение: критическая RAT-связка у неподтверждённого файла сохраняет
вердикт ОПАСНО даже при ручном доверии.
В GUI для выбранной строки есть кнопки:
Доверять этому файлу- спрашивает подтверждение и добавляет хеш в общий файл%APPDATA%\modchecker\trusted_hashes.txt;Убрать из доверенных- удаляет хеш из общего файла и из файла рядом с выбранным модом.
trusted_hashes.txt с личными хешами исключён в .gitignore и не должен
попадать в репозиторий.
Изолированная динамическая песочница остаётся отдельным будущим проектом. Текущая программа работает только статически; VirusTotal получает хеши, не код образцов.
Это статический эвристический сканер, а не антивирус и не песочница. Он не запускает мод и не видит, что мод делает во время игры.
- Не выполняет мод и не наблюдает его поведение.
- Не делает полную декомпиляцию и не восстанавливает весь код.
- Не строит полный граф потока данных и не эмулирует произвольный байткод.
- Не расшифровывает AES/RC4/кастомные шифры и сложную обфускацию.
- Не ловит строки, которые появляются только во время выполнения.
- Не ловит полезную нагрузку, скачанную позже, и код, загруженный с сервера.
- Не анализирует содержимое
.exe,.dll,.bat,.cmd,.ps1,.vbs,.scr: правило 17 только отмечает сам факт наличия такого файла. - Не ищет
.so/.dylibотдельным правилом и не анализирует native-код. - Не проверяет содержимое скриптов и не знает, что они делают.
- Не сканирует как текст
.yml,.yaml,.toml,.xml,.lang,.nbt,.datи другие форматы. - Не смотрит вложенные jar глубже двух уровней.
- Не рекурсивно проверяет произвольные
.zipи ресурсы, кроме вложенных.jarи.jar.sample. - Не ловит рефлексию,
MethodHandle,invokedynamicи кастомные загрузчики классов, если в байткоде нет известных вызовов. - Не ловит вредоносные действия через обычные API (например, удаление файлов), если для них нет отдельной сигнатуры.
- Не ловит неизвестные домены, кастомные протоколы, DNS-туннели и стеганографию.
- Не гарантирует обнаружение любого сбора HWID: правило 22 ищет известные вызовы OSHI/NetworkInterface и строки Windows-команд, а не все способы.
- Правила 24-29 эвристические: они не доказывают вредоносность и могут пропускать RAT без знакомых имён, команд, API-вызовов и хостов.
- Не проверяет сетевой трафик и не видит, куда реально уходят данные.
- Не проверяет подписи jar, сертификаты и личность автора.
- Не определяет зависимости и их версии, не проверяет известные уязвимости (CVE) в библиотеках. Shaded-код просматривается только теми же строками и вызовами.
- Не находит логические бомбы, атаки по времени/условию и социальную инженерию.
- Не проверяет страницы сайтов вручную: только SHA-1/отпечаток файла.
- Возможны ложные срабатывания и пропуски.
В текущей ветке selfTest включает 120 проверок, включая быстрый режим,
ограничения архивов, потоковый Murmur2 и VirusTotal на локальном сервере.
Дополнительная задача gradlew.bat quickGuiSmoke проверяет 11 GUI-сценариев:
переходы между режимами, остановку/продолжение и сохранение просмотра во время
проверки в скрытом окне. Сетевые сценарии тестов выполняются на локальном
HTTP-сервере, без обращения
к внешним сайтам и без запуска кода модов.
gradlew.bat selfTestgradlew.bat build также запускает selfTest через задачу check.
Для проверки на реальных модах без добавления их jar в репозиторий:
gradlew.bat realModsTest -PrealModsDir="C:\путь\к\папке\с\модами"В папке должны лежать fancymenu.jar, modern-industrialization.jar,
crashassistant.jar, appliedenergistics2.jar, kubejs.jar, create.jar,
valkyrienskies.jar, guideme.jar, immersive-portals.jar, journeymap.jar
и kotlinforforge.jar. Тест проверяет, что новые правила 24-29 не дают на них
очков и ОПАСНО.
Для смешанного набора, где могут быть и вредоносные образцы:
gradlew.bat corpusAudit -PtestModsDir="C:\virus\test_mods"Задача только читает файлы и проверяет хеши на сайтах. Результаты сохраняются
в игнорируемой папке build/corpus-audit; отсутствие ОПАСНО для всех файлов
не является условием успеха. Перед повторным прогоном изменённого набора
удалите его старый sites.json из этой папки, чтобы пересчитать сверку.
Образцы не добавляются в classpath и не запускаются.
GitHub Actions проверяет Java 17 на Windows и Linux: сборку, selfTest
и скрытые GUI-сценарии. API-ключи для тестов не нужны.
Артефакт Windows содержит JAR, README, ZIP и SHA256SUMS.txt.
Локальная упаковка после успешных проверок:
.\gradlew.bat build selfTest quickGuiSmoke
powershell -ExecutionPolicy Bypass -File scripts\package-release.ps1Пакет создаётся в build/release/<версия>. Скрипт проверяет версию манифеста.
Workflow Release запускается при отправке нового тега v<версия>:
проверяет совпадение тега и build.gradle, собирает и тестирует, публикует
четыре файла, скачивает публичные файлы и сверяет SHA-256. Существующий релиз
не перезаписывается. Перед следующим релизом нужно согласованно обновить
версию в коде, сборке и документации. Текущий стабильный релиз — v1.3.
