Telegram Bot / Channel C2 Link
Влияние на механику 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 в константах скомпилированного класса. Главное техническое ограничение состоит в том, что детектор оценивает только наличие строкового шаблона: он не анализирует назначение ссылки (является ли она ссылкой на автора в меню, кодом принудительного открытия браузера при запуске или каналом передачи данных).