Telegram Bot / Channel C2 Link

Telegram_Link Вредоносное ПО (Malware) LOW +1 очков

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

Многие разработчики и сообщества ведут информационные каналы на платформах Discord, Telegram или Matrix для публикации списков изменений, технической поддержки и анонсов обновлений.

Telegram_Link находит файлы классов, содержащие строковые константы со ссылками t.me/. В исследованном образце из ru.pulse.Pulse модификация выполняет метод runtimeBrandingTick(), который меняет заголовок окна GLFW на рекламный текст, проверяет системное свойство и принудительно открывает в браузере игрока два Telegram-канала через Desktop.getDesktop().browse(). Если интерфейс Desktop не поддерживается, код вызывает системную утилиту Windows (rundll32 url.dll,FileProtocolHandler) в качестве резервного пути.

Такое поведение не является скрытым каналом управления (C2) или кражей данных, однако навязчивое открытие сторонних ссылок при запуске нарушает пользовательский опыт и навязывает рекламный переход без явного действия пользователя.

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

ConstantPool CONSTANT_Utf8

Строковый литерал в пуле констант класса с адресом t.me или telegram.me.

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

public static void runtimeBrandingTick() {
   try {
      Object var0 = Class.forName("net.minecraft.client.MinecraftClient").getMethod("getInstance").invoke(null);
      Object var1 = var0.getClass().getMethod("getWindow").invoke(var0);
      Long var2 = (Long)var1.getClass().getMethod("getHandle").invoke(var1);
      Class.forName("org.lwjgl.glfw.GLFW")
         .getMethod("glfwSetWindowTitle", long.class, String.class)
         .invoke(null, var2, "<redacted_branding_text>");
   } catch (Throwable var6) {
   }

   try {
      if (System.getProperty("pulse.telegram.links.opened") == null) {
         System.setProperty("pulse.telegram.links.opened", "true");

         try {
            if (Desktop.isDesktopSupported()) {
               Desktop.getDesktop().browse(new URI("hxxps://t[.]me/<redacted_channel_1>"));
               Desktop.getDesktop().browse(new URI("hxxps://t[.]me/<redacted_channel_2>"));
               return;
            }
         } catch (Throwable var4) {
            // ...
         }

         try {
            Runtime.getRuntime().exec(new String[]{"rundll32", "url.dll,FileProtocolHandler", "hxxps://t[.]me/<redacted_channel_1>"});
            Runtime.getRuntime().exec(new String[]{"rundll32", "url.dll,FileProtocolHandler", "hxxps://t[.]me/<redacted_channel_2>"});
         } catch (Throwable var3) {
            // ...
         }
      }
   } catch (Throwable var5) {
   }
}

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

Детектор анализирует строковые константы в пуле констант класса (CONSTANT_Utf8) на совпадение с шаблоном адресов сервиса Telegram:

https?://(?:t(?:elegram)?\.me)/[a-zA-Z0-9_]+

Правило фиксирует строковые ссылки на Telegram в константах скомпилированного класса. Главное техническое ограничение состоит в том, что детектор оценивает только наличие строкового шаблона: он не анализирует назначение ссылки (является ли она ссылкой на автора в меню, кодом принудительного открытия браузера при запуске или каналом передачи данных).