
Оглавление
Дисклеймер: в тексте для простоты используется название IntelliJ IDEA. Описанные механизмы активации, внедрения Java-агента и связанные с этим риски применимы ко всем IDE и продуктам JetBrains, использующим ту же платформу и архитектуру лицензирования.
Введение
Многие Java разработчики выбирают IntelliJ IDEA Ultimate для своей работы, но с уходом JetBrains из России и введением экспортных ограничений на покупку продуктов JetBrains возникли сложности с приобретением IntelliJ IDEA Ultimate. Некоторые из разработчиков начали использовать активаторы для IntelliJ IDEA.
Один из популярных активаторов основан на одном из известных фреймворков для Java-агентов и распространяется в виде shell-скрипта, который можно запустить и он выполнит активацию продуктов JetBrains. Скрипт работает стабильно, и многие считают его "безобидной альтернативой" покупке лицензии. Но что на самом деле происходит, когда вы запускаете скрипт? Какой код выполняется в вашей системе? И главное — затрагивает ли этот "активатор" только проверку лицензии, или его влияние гораздо шире?
Дисклеймер
Мы не хотим иметь отношение к распространению нелегального софта, поэтому не скажем, как называется упомянутый в статье активатор. Однако, понять, о чем идет речь, особенно для разработчиков, которые уже его использовали, труда не составит. Названия плагинов, использующихся в активаторе мы оставили оригинальные.
Мы изучили работу этого популярного активатора: проанализировали .sh скрипты и трансформеры байткода, проследили цепочки вызовов от высокоуровневых API до приватных методов в Java SDK.
В этой статье мы покажем основные технические детали. К концу вы поймёте:
Что скачивается с неизвестных серверов и какой код получает полный доступ к внутренностям JVM
Какие техники используются для сокрытия следов взлома
Как именно работает обход защиты на уровне Java Cryptography Architecture
Почему патчится
BigInteger#oddModPow()- фундаментальный метод для всей криптографии в JVM и какие побочные эффекты может иметь модификация криптографических примитивов для ваших проектов
Рассмотрим шаг за шагом работу активатора, начиная от shell-скрипта до модификации приватных методов стандартной библиотеки Java.
Shell скрипт установки. Первая линия компрометации.
Запуск активатора выполняется при помощи .sh скрипта. Выглядит безобидно: скрипт приветствует нас сообщением: "Welcome to JetBrains Activation Tool" и ждет, пока пользователь нажмёт на Enter.
Инициализация окружения
После нажатия Enter выполняется инициализация окружения и сбор данных для лицензии:
определяет тип операционной системы
указываются пути к рабочим директориям скрипта
у пользователя запрашивается имя лицензии и дата окончания лицензии. По умолчанию дата устанавливается на 2099-12-31 — то есть лицензия на 75 лет вперёд. Ни одна лицензия не выдается на такой срок, это явный признак нелегального инструмента
Установка зависимостей и первые опасности
Скрипт проверяет наличие необходимых утилит curl и jq (для работы с JSON) в системе и если их нет, то происходит автоматическая установка. Процесс установки отличается для операционных систем macOS и Linux.
Установка для macOS
Для macOS установка дополнительных утилит происходит через Homebrew https://brew.sh/. Если Homebrew не установлен, скрипт автоматически устанавливает его, выполняя команду скачивания и установки:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)
Важно отметить, что активатору нужны утилиты curl и jq, но при этом загрузка Homebrew происходит через curl, команда не должна отработать, но утилита curl включена по умолчанию в дистрибутив macOS и активатору для своей работы потребуется только установить утилиту jq.
Вернемся к Homebrew, после его установки необходимо добавить его в PATH, скрипт активатор добавляет команду вида в файл ~/.zshrc:
eval "$(/opt/homebrew/bin/brew shellenv)"
И после этого начинается установка дополнительных пакетов через команду
brew install curl jq
Риски для macOS
Модификация файла ~/.zshrc несет потенциальные проблемы с безопасностью.
-
Риск: изменения без вашего согласия
Скрипт модифицирует файл без создания резервной копии. Вы не даёте явного согласия на это изменение. Существует риск перезаписи ваших важных настроек — алиасов, переменных окружения.
-
Риск: команда выполняется при каждом запуске терминала
Добавленная строка будет автоматически выполняться каждый раз, когда вы открываете терминал. Это механизм персистентности — код запускается при каждом входе в систему.
Сегодня это команда для Homebrew. Но что, если завтра скрипт добавит туда что-то другое? Это потенциальный бэкдор — точка входа для вредоносного кода, который будет выполняться автоматически и незаметно.
Установка для Linux
Теперь рассмотрим установку для Linux. Для Linux установка дополнительных недостающих утилит происходит через пакетные менеджеры apt, dnf, packman. Команды выгля��ят так:
sudo apt install -y curl jq
sudo dnf install -y curl jq
sudo pacman -Sy --noconfirm curl jq
Риски для Linux
-
Риск: использование sudo
Скрипт запрашивает пароль для установки пакетов через sudo. Кажется, что вы выдаёте права только для одной команды
sudo apt install curl jq. Но это не так.После ввода пароля система кэширует ваш доступ примерно на 15 минут. Это значение задано параметром
timestamp_timeoutв файле/etc/sudoers.В течение этого времени все команды sudo в скрипте выполняются без запроса пароля. Фактически весь скрипт получает root-доступ, а не только команда установки пакетов.
Какие опасные действия может выполнить скрипт:
Создать скрытого администратора с заранее известным паролем
Выполнить модификацию критических системных файлов, например изменить /etc/ssh/sshd_config, чтобы разрешить удалённый доступ для root и добавить чужие SSH-ключи.
-
Установить бэкдор или кейлоггер для постоянного контроля над системой
Вы вводите пароль один раз, а скрипт получает 15 минут неограниченных прав в вашей системе.
-
Риск: флаги
-yи--noconfirmСкрипт использует команды установки с автоматическим подтверждением:
sudo apt install -y curl jq sudo dnf install -y curl jq sudo pacman -Sy --noconfirm curl jqБез флага
-yустановка происходит более безопасно. При командеsudo apt install curlсистема показывает полный список пакетов, которые будут установлены, включая зависимости. Затем система запрашивает подтверждение "Do you want to continue? [Y/n]".Вы видите список устанавливаемых пакетов, можете проверить его и при необходимости отменить установку.
С флагом -y установка происходит мгновенно. Нет возможности увидеть список пакетов. Нет возможности отменить или проверить, что устанавливается.
Какие риски это несёт:
-
Скрытая установка транзитивных небезопасных пакетов.
Пакетные менеджеры автоматически устанавливают транзитивные зависимости.
Без флага -y вы увидите список: "The following NEW packages will be installed: curl libcurl4 ca-certificates some-library malicious-dep" и сможете заметить подозрительный пакет.
С флагом -y всё устанавливается скрыто. Вредоносный пакет уже в системе.
-
Тайпсквоттинг атака.
Злоумышленники создают пакеты с похожими названиями. Например: node1js вместо nodejs.
Без -y система покажет "Installing: node1js" и спросит подтверждение. Вы видите неправильное имя и можете остановить установку.
С -y пакет установится автоматически.
Флаги -y и --noconfirm превращают установку пакетов в чёрный ящик – вы не видите, что именно попадает в вашу систему.
-
Скачивание исполняемого кода и внедрение агента
Скачивание файлов с неизвестного сервера
Скрипт скачивает файлы со стороннего сервера. Этот сервер контролируется создателями активатора и не связан с JetBrains. Файлы размещаются в рабочей директории активатора. Скачиваемые файлы:
activator.jar- ядро агента, координирует работу плагиновpower.jar- модификация криптографииprivacy.jar- сокрытие следов агента, исходников нет!dns.jar,url.jar,hideme.jar,native.jarконфигурации:
power.conf,url.conf,dns.conf
Все файлы скачиваются без проверки контрольных сумм (SHA256/MD5) и без верификации цифровых подписей. Невозможно гарантировать, что содержимое JAR-файлов безопасно или что оно не изменится при повторном выполнении активатора. Завтра на сервере активатора может появиться совершенно другой код.
Внедрение агента в JVM
Скрипт модифицирует параметры виртуальной машины для JetBrains IDEA. В файл конфигурации VM добавляются следующие строки:
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
-javaagent:/Users/user/.jb_run/activator.jar
Первые две строки открывают доступ к библиотеке ASM – инструменту для чтения и манипуляции байткода
Третья строка внедряет агента
activator.jarв приложение JetBrains IDEA
Агент загружается до запуска основного приложения и получает полный контроль над JVM
Установка поддельной лицензии
Скрипт отправляет запрос на сервер активатора для получения файла лицензии. Файл лицензии сохраняется в конфигурационную директорию JetBrains IDEA.
При следующем запуске IDE обнаружит этот файл и попытается проверить лицензию. Но проверка уже скомпрометирована — загруженный Java-агент подменит результаты.
В следующем разделе мы погрузимся в работу Java-агента и увидим, как он модифицирует базовые операции на уровне стандартной библиотеки Java.
Java-агент и архитектура обхода защиты JetBrains IDEA
После успешного запуска скрипта и внедрения параметра -javaagent:/path/to/activator.jar в конфигурацию IDE, при следующем запуске IntelliJ IDEA в JVM загружается Java-агент.
Java Agent — это легитимная технология, встроенная в платформу Java. Технология при помощи Instrumentation API позволяет перехватывать и модифицировать байткод классов до их загрузки в JVM. Агенты в основном используются для сбора данных: как пример, для профилирования, мониторинга, определения покрытия кода, но способность модифицировать классы Java делает агенты мощным инструментом и одновременно опасным в недобросовестных руках.
Агент активатора построен на одном из известных фреймворков для Java-агентов — это не монолитный агент, а агент с возможностью загрузки плагинов. Каждый плагин отвечает за свою часть обхода защиты. Это модульная архитектура, которая позволяет легко добавлять новые техники обхода без изменения основного кода. Разберемся, что делает каждый из плагинов.
Плагин URL
Плагин URL блокирует сетевые соединения для определенного списка URL. Плагин затрагивает класс sun.net.www.http.HttpClient, который используется многими библиотеками для HTTP. Плагин инструментирует скрытый метод sun.net.www.http.HttpClient#openServer:
// Класс: sun.net.www.http.HttpClient
protected void openServer() {
URL url = this.url;
URLFilter.testURL(url); // Проверяет url по url.conf
//основная логика
…
}
Если URLFilter#testURL найдёт совпадение по URL с файлом url.conf, то будет выброшено исключение SocketTimeoutException и дальнейшее выполнение HTTP запроса прекратится. Таким образом, плагин имитирует таймаут подключения (SocketTimeoutException), создавая иллюзию недоступности сервера вместо явной блокировки.
В нашем случае блокируются соединения с серверами лицензирования JetBrains:
https://account.jetbrains.com.cn/lservice/rpc/validateKey.action
https://account.jetbrains.com.cn/lservice/rpc/validateLicense.action
https://account.jetbrains.com.cn/lservice/rpc/obtainAgreement.action
https://account.jetbrains.com.cn/lservice/rpc/obtainLicense.action
Плагин DNS
Плагин DNS блокирует вызовы разрешения доменного имени для определенного списка хостов. Плагин затрагивает класс java.net.InetAddress - фундаментальный класс Java для работы с IP-адресами и DNS. Плагин инструментирует методы:
java.net.InetAddress#getAllByName- публичный метод разрешения IP-адресов по хосту. Из описания JavaDoc: Given the name of a host, returns an array of its IP addresses, based on the system-wide resolver.java.net.InetAddress#isReachable(java.net.NetworkInterface, int, int)- публичный метод доступности хоста. Из описания JavaDoc: Тest whether that address is reachable.
Инструментация выглядит следующим образом:
// Класс: java.net.InetAddress
public static InetAddress[] getAllByName(String host) {
// Проверяет host по dns.conf
DNSFilter.testQuery(host); // Проверяет host по dns.conf
// оригинальная логика
}
// Класс: java.net.InetAddress
public boolean isReachable(NetworkInterface netif, int ttl, int timeout)
throws IOException {
String hostName = this.holder.hostName;
// Проверяет host по dns.conf
boolean blocked = DNSFilter.testReachability(hostName);
if (blocked) {
return false; // хост недоступен
}
// оригинальная логика
}
Если DNSFilter#testQuery найдёт совпадение по хосту с файлом dns.conf, то будет выброшено исключение UnknownHostException, создавая иллюзию проблемы с разрешением DNS. Инструментация срабатывает раньше, чем JVM обращается к операционной системе для разрешения имени, даже кэш DNS не помогает. Аналогичным образом работает инструментация для метода isReachable, но возвращается false (хост недоступен) вместо исключения.
Данное изменение затрагивает ВСЕ сетевые операции в JVM — любой код (ваш проект, плагины, библиотеки), использующий InetAddress, будет затронут блокировкой.
При работе в связке с url плагином выстраивается многоуровневая защита: если запрос прошел DNS, его могут заблокировать на уровне HTTP, и наоборот.
В нашем случае блокируется разрешение DNS для доменного имени: jetbrains.com, поддомены в эту блокировку не входят.
Плагин Hideme
Плагин Hideme — позволяет сделать агент "невидимым" для детектирования со стороны виртуальной машины. JetBrains может попытаться обнаружить взлом разными способами, и Hideme блокирует каждый из них.
Плагин инструментирует методы:
java.lang.ClassLoader#loadClass- публичный метод загрузки класса по FQN. Из описания JavaDoc: Loads the class with the specified binary name.java.net.sun.management.VMManagementImpl#getVmArguments- публичный метод получения списка аргументов VM.
Для java.lang.ClassLoader инструментация выглядит следующим образом:
// Класс: java.lang.ClassLoader
public Class<?> loadClass(String name) throws ClassNotFoundException {
// Проверка по списку скрытых пакетов
if (LoadClassRule.check(name)) {
throw new ClassNotFoundException(name);
}
// оригинальная логика загрузки класса
}
При загрузке класса проверяется, находится ли FQN класса в списке скрытых пакетов (пакеты агента) и в этом случае выбрасывается исключение ClassNotFoundException.
Если IDE попытается загрузить класс агента, то будет ошибка класс не найден и IDE думает, что агента не существует.
Для java.net.sun.management.VMManagementImpl инструментация выглядит следующим образом:
// Класс: sun.management.VMManagementImpl
public List<String> getVmArguments() {
List<String> originalArgs = /* получить оригинальные аргументы */;
// Фильтрация аргументов через VmArgumentFilter
List<String> filteredArgs = new ArrayList<>();
for (String arg : originalArgs) {
// Удаляет -javaagent:, если он указывает на activator
if (arg.startsWith("-javaagent:") && arg.contains("activator")) {
continue; // Пропускаем этот аргумент
}
filteredArgs.add(arg);
}
return filteredArgs;
}
По модификации видно, что из списка аргументов виртуальной машины скрывается агент: -javaagent:activator.jar, следовательно, IDE при проверке лицензирования для аргументов виртуальной машины вместо реальных значений, получит список в котором будет скрыт Java-агент.
Таким образом JetBrains IDE не может обнаружить агента стандартными средствами. Плагин hideme модифицирует фундаментальные классы Java делая агент полностью невидимым. По используемым техникам агент функционально близок к rootkit’ам для JVM, использует те же техники, что и вредоносное ПО для сокрытия своего присутствия в системе. Но это еще не все техники скрытия, дополнительные мы еще рассмотрим в плагине Privacy.
Плагин Power
Плагин Power — самый опасный плагин в системе активатора. В отличие от плагинов URL и DNS, которые блокируют сетевые операции, плагин Power модифицирует фундаментальные криптографические примитивы Java. Его цель – подменить результаты операций модульного возведения в степень, которые используются для проверки лицензии JetBrains. Но последствия этой модификации затрагивают всю RSA-криптографию в JVM, а не только проверку лицензии.
Плагин затрагивает класс java.math.BigInteger – фундаментальный класс Java для работы с произвольно большими целыми числами. Плагин инструментирует приватный метод oddModPow(BigInteger exponent, BigInteger modulus) - метод модульного возведения в степень для нечётных модулей. Из JavaDoc по методу modPow(BigInteger exponent, BigInteger modulus) в котором используется наш приватный метод: Returns a BigInteger whose value is (this ^ exponent mod modulus)
Метод oddModPow() является приватным (private) методом класса BigInteger. В обычных условиях к нему невозможно обратиться извне класса. Но Java-агент с доступом к ASM может модифицировать даже приватные методы на уровне байткода.
Плагин применяет два типа трансформаций. Первая трансформация – это подмена аргументов. Инструментация выглядит следующим образом:
// Класс: java.math.BigInteger
private BigInteger oddModPow(BigInteger exponent, BigInteger modulus) {
BigInteger[] newArgs = ArgsFilter.testFilter(this, exponent, modulus);
if (newArgs != null) {
exponent = newArgs[0]; // exponent заменяется
modulus = newArgs[1]; // modulus заменяется
}
//оригинальные вычисления модульного возведения в степень, но с новыми ПОДМЕНЕННЫМИ аргументами
}
Эта инструментация позволяет подменить входные параметры операции: экспоненту или модуль. Вычисление выполняется, но с другими числами.
Вторая трансформация подменяет результат вычисления. Инструментация выглядит следующим образом:
// Класс: java.math.BigInteger
private BigInteger oddModPow(BigInteger exponent, BigInteger modulus) {
BigInteger forcedResult = ResultFilter.testFilter(this, exponent, modulus);
if (forcedResult != null) {
// Результат был предопределен в конфигурации - немедленный возврат в обход всех вычислений
return forcedResult;
}
// оригинальные вычисления модульного возведения в степень, не выполняются если результат был подменен
}
Эта инструментация полностью обходит вычисления. Вместо того чтобы выполнять сложную математическую операцию, метод сразу возвращает предопределенное значение из конфигурационного файла power.conf. Например, конфигурации вида:
[Result]
EQUAL,x,exponent1,modulus1->fakeResult
для операции x^exponent1 mod modulus1 вернёт предопределенный результат fakeResult.
Настройка плагина Power для активатора JetBrains IDEA использует только вторую трансформацию, рассмотрим поподробнее конфигурационный файл для JetBrains IDEA:
[Result] EQUAL,573073346913444247...,
65537,
860106576952879101192782...,
-> 3187221928140742420257...
Первая строка - основание степени
Вторая строка - экспонента
Третья строка - модуль
После -> предопределенный результат, который должен вернуть метод.
Что происходит, когда метод oddModPow вызывается с основанием 573073... и экспонентой 65537 и модулем 86010…, вместо реального вычисления возвращается число 318722..., которое было заранее вычислено на сервере активатора.
Вернемся к криптографии. Операция модульного возведения в степень m^e mod (или как это реализовано в Java BigInteger#modPow и связанный с этим приватный метод oddModPow) – это фундаментальная операция для криптографии, в частности это базовая операция для RSA, который используется для шифрования и цифровой подписи. Подробности по работе алгоритма RSA можно посмотреть в Wiki, или в статье на Хабр. Кроме RSA, существуют и другие алгоритмы шифрования, которые используют модульное возведение в степень, такие как алгоритм Диффи-Хеллмана, DSA.
Таким образом задача плагина Power подменить результаты работы операции модульного возведения в степень. Рассмотрим, как выглядит процедура обхода лицензии в JetBrains IDEA. Детально этот процесс мы представить не можем, поскольку не имеем права декомпилировать код, можем лишь предположить как работает обход:
Файл лицензии
idea.keyгенерируется на сервере активатора с приватным ключом, который никак не связан с JetBrains.IntelliJ IDEA читает лицензию и пытается проверить подпись публичным ключом JetBrains.
При проверке вызывается метод
BigInteger.oddModPowПлагин Power перехватывает этот вызов и подменяет результат предопределенным значением
IDE получает "правильный" результат и считает подпись валидной
Лицензия принимается, хотя она подписана чужим ключом
Поскольку плагин Power модифицирует операцию модульного возведения в степень не только для проверки лицензии в IDE, могут возникнуть уязвимости в произвольных местах при использовании криптографии в JVM. Это фундаментальный метод, используемый всей криптографией с открытым ключом в Java.
Компрометация RSA открывает путь для атак Man-in-the-Middle на весь HTTPS-трафик, включая Git-операции по HTTPS, API-запросы к облачным сервисам, аутентификацию в корпоративных системах, работу с базами данных (если соединение идет по SSL), загрузку зависимостей из Maven Central, NPM registry c возможностью подмены библиотек. Сценарий Man-in-the-Middle атаки может выглядеть следующим образом:
Злоумышленник перехватывает трафик между вашей IDE и удалённым сервером (например, GitHub, AWS API, корпоративный сервер)
Подсовывает поддельный SSL-сертификат, подписанный собственным "фальшивым CA"
IDE проверяет подпись сертификата — вызывается BigInteger.oddModPow() для проверки RSA-подписи
Плагин Power подменяет результат — если параметры операции совпадают с правилами в power.conf, проверка подписи вернёт "валидный" результат
IDE принимает поддельный сертификат как валидный и устанавливает "защищённое" соединение
Злоумышленник получает полный доступ к расшифрованному трафику: API-ключи, пароли, исходный код, credentials.
Использование взломанной IDE с плагином Power – равносильно работе в скомпрометированной криптографической среде, где нельзя доверять ни одной RSA-операции. Это не просто "обход проверки лицензии" – это компрометация криптографической инфраструктуры всей JVM. Последствия могут затронуть безопасность ваших проектов, корпоративных систем и привести к юридическим проблемам.
Плагин Privacy
Плагин Privacy – кастомный закрытый плагин, исходный код которого недоступен в публичных репозиториях. В отличие от других плагинов (URL, DNS, Hideme, Power), которые размещены на Gitee с открытым исходным кодом, плагин Privacy распространяется только в виде скомпилированного JAR-файла. Для анализа его работы потребовалась декомпиляция байткода. Целью плагина является: модифицировать конкретные методы IntelliJ IDEA, отвечающие за проверку и отображение информации о лицензии, а также скрывать следы агента от встроенных средств детектирования IDE.
Вкратце расскажем о выполняемых модификациях:
В классе
com.intellij.diagnostic.VMOptionsтрансформация методаgetUserOptionsFileвозвращает пустой.vmoptionsфайл без-javaagentи методаreadOptionвозвращаетnullдля опций, содержащих "javaagent". Это позволяет скрыть следы использования агента-javaagent:activator.jar.В классе
sun/management/RuntimeImplтрансформация методаgetInputArgumentsвозвращает пустой список входных аргументов. Это позволяет скрыть настоящие входные параметры, включая агента -javaagent:activator.jarВ классе, отвечающем за текущее состояние лицензии, метод получения даты истечения лицензии всегда возвращает дату на 60 дней вперед от текущего дня. Это позволяет в IDE считать лицензию всегда активной.
Модификации, описанные выше, работают с дополнительной проверкой стектрейсов: стектрейсы анализируются на наличие методов проверяющих лицензию JetBrains. Это позволяет описанным выше модификациям работать только из кода проверки лицензии JetBrains, не затрагивая остальное использование тех же API.
Плагин Privacy — это специализированный слой обхода, настроенный конкретно под архитектуру IntelliJ IDEA и ее систему проверки лицензий. В сочетании с плагинами Hideme, Power, URL, DNS создаётся многоуровневая система сокрытия и проверки фиктивной лицензии. Эту систему крайне сложно обнаружить стандартными средствами.
Риски безопасности
После детального анализа активатора становится очевидно, что использование этого активатора может создать крит��ческие риски безопасности на всех уровнях системы.
1. Системный уровень: компрометация операционной системы
При установке зависимостей скрипт запрашивает пароль sudo, после чего получает root-доступ на ~15 минут. В течение этого времени скрипт может выполнять любые команды с правами администратора: создавать скрытых пользователей, модифицировать ssh конфиги, устанавливать бэкдоры или кейлогеры.
2. Уровень JVM: полный контроль над виртуальной машиной
Java-агент получает полный контроль над JVM. Агент может читать весь исходный код ваших проектов, перехватывать пароли баз данных из конфигурационных файлов, SSH-ключи, API-токены и реквизиты доступа облачных сервисов. Он может модифицировать любой класс в runtime: от стандартной библиотеки Java до классов ваших приложений. Агент имеет доступ к сети и может отправлять собранные данные на внешние серверы, при этом домен активатора контролируется третьей стороной. В отличие от контейнеризации, агент работает в том же процессе, что и IDE – нет никаких барьеров между агентом и вашими данными.
3. Криптографический уровень: компрометация всей криптографии
Java-агент, и в частности плагин Power, модифицирует операцию модульного возведения в степень – фундаментальную операцию для всей криптографии с открытым ключом в Java. Это затрагивает не только проверку лицензии JetBrains, но и RSA-операции (проверку подписей, шифрование). Если параметры вашей криптографической операции случайно совпадут с правилами в power.conf, результат будет заменен, что может привести к компрометации защищенных соединений и неверной проверке подписей.
4. Отсутствие контроля и доверия
Все конфигурационные файлы и JAR-файлы плагинов скачиваются с сервера активатора без проверки контрольных сумм, верификации цифровых подписей и возможности аудита. Завтра на сервере может появиться новый вредоносный код, изменённые правила подмены криптографии или бэкдоры – вы не контролируете, что именно выполняется в вашей системе. Плагин Privacy распространяется только в виде скомпилированного JAR без исходного кода, и даже после декомпиляции невозможно гарантировать отсутствие скрытых бэкдоров или логики сбора данных.
Таким образом использование активатора JetBrains на основе Java-агента – это не просто обход проверки лицензии, а комплексная компрометация системы на всех уровнях. Операционная система получает root-доступ, JVM получает неограниченный контроль над вашим кодом и данными, криптография становится ненадежной, а вы теряете контроль над тем, что именно выполняется в вашей системе. Риски сопоставимы с намеренной установкой вредоносного ПО с правами администратора и полным доступом к вашим проектам, ключам и паролям.
5. Юридические и прочие риски
В первую очередь и разработчикам, и линейным руководителям, и CTO важно отдавать себе отчет: использование пиратского программного обеспечения — это прямое нарушение российского законодательства. Статья 146 УК РФ предусматривает уголовную ответственность за нарушение авторских прав, включая лишение свободы, уже при ущербе свыше 100 000 рублей.
Для одиночного разработчика эта граница может казаться далёкой, но в корпоративной среде она достигается крайне быстро. Достаточно двух нелегальных лицензий IntelliJ IDEA Ultimate, чтобы формально перейти в зону уголовной ответственности. А использование порядка 15 пиратских лицензий квалифицируется как особо крупный размер — с потенциальным наказанием до шести лет лишения свободы.
Возможные последствия
Отдельный риск — безопасность. Практика показывает, что пиратский софт нередко становится точкой входа для атак на ИТ-инфраструктуру, что может привести к простоям, потере данных и прямым финансовым убыткам. Конкретные кейсы приводить не будем — многие читатели и без того с ними знакомы и могут вспомнить собственные примеры.
Наконец, стоит учитывать и человеческий фактор. При любом серьезном инциденте внутри компании начинается поиск ответственных. В такой ситуации разработчик, установивший нелегальное ПО, легко может оказаться «крайним» — с рисками не только для карьеры, но и для личных финансов и свободы.
Легальные альтернативы
К счастью, брать на себя такие риски не требуется. На российском рынке уже существует альтернатива, изначально спроектированная с учетом этих ограничений — OpenIDE.
OpenIDE — это форк IntelliJ IDEA, развитие которого поддерживается консорциумом из трёх компаний: Haulmont, Группы компаний «Астра» и Axiom JDK. Такая модель снижает зависимость от одного вендора и делает проект более устойчивым в долгосрочной перспективе.
При этом OpenIDE — это не просто «замена IDE». Проект развивается как платформа: вокруг него формируется экосистема плагинов и сообщество разработчиков, которые могут создавать, публиковать и развивать собственные расширения. Это позволяет инструменту эволюционировать вместе с потребностями рынка, а не следовать за решениями одного центра влияния.

Скачивайте OpenIDE и пробуйте новые возможности в деле и подписывайтесь на нас в Telegram, чтобы не пропустить свежие обновления и полезные материалы. Мы активно развиваем IDE и всегда рады вашей обратной связи в чате!
Комментарии (60)

Akuma
23.01.2026 11:54Разработчики и платить то не против, просто JB отгородилсь от РФ как только могли.
С другой стороны, без этого так и не попробовал бы VSCode (на нем и остался по сути).

2medic
23.01.2026 11:54Ну это не они отгородились, а их вынудили, тем не менее, разработчики из JB достаточно лояльно относятся к своим клиентам. Проверяют всего лишь географию IP, хотя вычислить кто есть кто и заблочить труда не составляет. Так что сервис из трёх букв + карта Казахстана решают проблему.

max9
23.01.2026 11:54не решает. по крайней мере для юрлиц. их комплаенс отдел заблочил продажу лицензий европейской дочке, с маткомпанией в РФ

foxsoft2005
23.01.2026 11:54Вынудили блокировать действующие лицензии? Это такой новый тип лояльности?
P.S. Хотя, пост уже давнишний, может они и вправду стали более лояльны...

ImagineTables
23.01.2026 11:54стали более лояльны
В отсутствие извинений или другого способа признания ошибок, доверие определяется низшей точкой в отношениях.

KVentz
23.01.2026 11:54Их никто не вынуждал, они сами выбрали путь быть святее Папы Римского. Та же Apple, хоть и «ушла» из России, тем не менее продолжает оказывать в России свои услуги, причём платные, легально с использованием рублей. JB никто не заставлял блокировать оплаченные лицензии. Оплачивали бы их и дальше с казахских карт, все были бы довольны и счастливы. Нет людей, которые хуже относятся к своим уже бывшим соотечественникам, чем русские эмигранты. Это была их принципиальная позиция — сделать так гадко, как это вообще возможно. Продемонстрировали лояльность, доказали преданность новым хозяевам, молодцы.

Ryav
23.01.2026 11:54Ну вы сравнили, конечно, Apple и небольшую компанию разработки софта. При том, что у Apple не было никакой связи с РФ и «cancelling» им ни при каких условиях не грозит.
Выбор был скорее между «быть востребованными во всём мире» и «барахтаться в РФ со всеми вытекающими», ну уж точно не поднасрать соотечественникам (даже с точки зрения выгоды тут отрицательный выхлоп).

KVentz
23.01.2026 11:54Ну вы сравнили, конечно, Apple и небольшую компанию разработки софта.
Разница только в ширине манёвра и вариантах действий. А варианты обхода есть везде, в любой области и для компаний любого размера. Условно, не связанный с головной компанией армянский реселлер, который продаёт лицензии только гражданам Армении (определяется лишь по галочке в форме «ага, я из Армении») и который, ну просто случайно принимает к оплате «Мир». Схемы есть всегда, вопрос лишь в желании их применить.
Выбор был скорее между «быть востребованными во всём мире» и «барахтаться в РФ со всеми вытекающими»
Они задолго до СВО уже не «барахтались в РФ». JetBrains объявила о переносе своего головного офиса в Прагу в 2012 году. За два года даже до Крыма, не то что до СВО. Никакими санкциями ещё даже не пахло, всё было букетно-конфетно, мир-дружба-жвачка. А к 2021 году Россия была лишь одной из, кажется, шести стран, где у них были центры разработки. Решение не «барахтаться в РФ» они приняли задолго до того, как вообще появилось слово «санкции» и задолго до того, как тема России стала токсичной в западном мире. Так что никакого такого решения они в 2022 году не принимали. JetBrains — международная компания со штаб-квартирой в центре Евросоюза. С таким количеством точек присутствия по миру и таким влиянием на мир разработки ПО у них был огромный простор для действий в условиях санкций. Они сами намеренно выбрали из всех вариантов действий максимально болезненный для российских клиентов. И принцип здесь оказался важнее выгоды.

Ryav
23.01.2026 11:54Решение не «барахтаться в РФ» они приняли задолго до того, как вообще появилось слово «санкции» и задолго до того, как тема России стала токсичной в западном мире.
Будто это что-то плохое. Вы бы на месте владельца компании не хотели, чтобы ваши продукты покупали по всему миру, а не только в стране зарождения?
И принцип здесь оказался важнее выгоды.
Я вижу тут минимизацию рисков, вы видите какой-то принцип (откуда он берёт начало, мне неизвестно).

KVentz
23.01.2026 11:54Будто это что-то плохое.
Вообще не важно. В контексте обсуждения важно, что это было сделано не из-за санкций. Поэтому:
Выбор был скорее между «быть востребованными во всём мире» и «барахтаться в РФ со всеми вытекающими»
Не было такого выбора после 2022 года. Так вопрос вообще не стоял. Вопрос стоял так: «Мы будем искать варианты обхода санкций, как это сделали многие другие компании, и сохраним возможности для российских разработчиков или отрубим этот мордор нахрен, нечего было там оставаться?». Выбрали второе.
Варианты были, выбор есть всегда. Я в сфере автоматизации зданий работаю. Многие немецкие компании блокируют для России всё, что можно. Закрыли удалённое управление, забанили аккаунты, даже доступы к сайтам своим. А испанцы из того же самого Евросоюза спокойно продолжают и оборудование поставлять, и лицензии продавать, и удалённое управление через их облака спокойно работает. А уж у компании с точками присутствия в неприсоединившихся к санкциям странах, типа Сербии или Армении возможностей вообще выше крыши. Было бы только желание. Желания нет.

trinxery
23.01.2026 11:54JB отгородилсь от РФ как только могли
Поэтому во вкладке плагинов под рукой выведены настройки прокси, проверки идут только по айпи и только при установке плагинов, и спокойно выдаются студенческие лицензии?

gigimon
23.01.2026 11:54давать прокси это задел для корпоративных юзеров, где каждый первый ходит через прокси. От рф они отгородились, банят, денег не берут и вообще не вспоминают.
P.S до 22 года они от Крыма отгораживались, иногда банили (был забанен сам)

lamerok
23.01.2026 11:54Тоже перетащили все в VSCode, старые лицензии вроде не заблокировали, но обновления уже не получить.

mixsture
23.01.2026 11:54А что, за последние 25 лет это как-то менялось, что кряки и активаторы могут быть потенциально опасны? Что они используют высокие права для патчинга. Что, скачивая их, вы доверяетесь источнику и его репутации. Что они вместе с лицензией могут еще какие-то части программы сломать.
Что нового то?
Lizdroz
23.01.2026 11:54Новое - уровень наивности)) Раньше кряки качали с варезников, понимая риски. Теперь это "shell скрипт с гитхаба" и люди думают, что если код (частично) открыт, то он безопасен. А внутри curl | sh может быть что угодно

kenomimi
23.01.2026 11:54Как всё сложно тут... На деле - берем любую просроченую оффлайн-лицензию, коих в интернетах навалом. Откручиваем время для процесса жавы на начало действия лицензии, в линуксе одна команда. Блокируем на файрволле адреса активации. Пользуемся бесконечно. Из минусов - местами в плагинах ломается https, ибо некоторые сертификаты оказываются в будущем, но это тоже обходимо... Ровно так и делал пару лет после известных событий, после чего ушел на openide - она вполне себе закрывает все кейсы среднего разраба, особенно в платной версии.

LeshaRB
23.01.2026 11:54Мне у JetBrians понравился подход
В 2023 закончилась подписка. Я оплатил новую
Со мной связалась девушка из саппрота сказала пока есть возможность лучше оформите возврат. JB ушел с рынка с РБНе просто забрали денег с умным видом, а помогли вернуть
С другой стороны. Я покупаю оффицально Eset, GoodSync.
Android приложения, также если купил, обновления приходят
Почему JB не может официально продавать на exUSSR (тут я имею ввиду если я уже купил, то не банить, работа с ВПН).
2medic
23.01.2026 11:54Здесь дело не в нежелании JB. Европейским компаниям запрещено предоставлять и обновлять определённое ПО в санкционный регион без специального разрешения.
Другие компании могут работать по другим юридическим схемам: у них могут быть локальные юрлица, дистрибьюторы или иная классификация продуктов, которая позволяет им формально оставаться в правовом поле.
JetBrains же, судя по их официальным заявлениям, выбрала полное соблюдение санкционного режима, чтобы не рисковать лицензией и бизнесом в ЕС и США.

tundrawolf_kiba
23.01.2026 11:54Я вот второй год спокойно покупаю - IDE all in one, AI Pro и Hyperskill из их продуктов. Из мелких неудобства только следующее: страну в профиле на Казахстан сменил, иначе страница оплаты не открывается(ну и покупка под ВПН страны действия виртуальной карты). И при обновлении плагинов и работе с ИИ нужно ВПН врубать. Но так в целом даже без ВПН работает.

serejk
23.01.2026 11:54А IDE айпишник не проверяет периодически?

tundrawolf_kiba
23.01.2026 11:54Не отслеживал, но в целом проблем при работе не было(кроме тех что писал выше - не коннектится к ИИ и не обновляется само приложение и плагины без впн), лицензию не блочили даже при работе без впн.

StreamThread
23.01.2026 11:54А что насчет винды, в которой софт JetBrains чаще "ломается" подменой исполняемого файла? Часто ли злоумышленники промышляют инъекциями ассемблерного кода?

Acreature
23.01.2026 11:54Забавно что используется не общеизвестная версия, а так которая скачивает и делает лишнее.

cher11
23.01.2026 11:54Чем больше раз в статье упомянуть слово «фундаментальный», тем страшнее должно стать?
Проверка контрольных сумм при скачивании - это же не репозиторий линукса. Тут и в самом первом варианте кряка может быть что угодно. Зато с правильной суммой? :)
В целом было бы интересно во второй части статьи увидеть не рекламу, а мини исследование - реально ли, например, действительно подменить сертификат так, чтобы тот же системный браузер позволил сделать MITM на практике.

tarantula58910
23.01.2026 11:54Практика показывает, что пиратский софт нередко становится точкой входа для атак на ИТ-
инфраструктуру, что может привести к простоям, потере данных и прямым финансовым убыткам.
Конкретные кейсы приводить не будем — многие читатели и без того с ними знакомы и могут вспомнить
собственные примеры.прошу читателей этого действительно привести собственные примеры (если они есть конечно).
потому что автор конкретных кейсов приводить не будет. потому что у него их нет.

vodevel
23.01.2026 11:54Оплачиваю лицензии IDE JetBrains с тех пор, как стал зарабатывать на регулярное питание. С их уходом никаких особых сложностей нет, просто на 20$ в год дороже из-за выбора другой страны в платежном аккаунте. Правда, для работы ИИ нужен VPN, но у них это такое корыто, что лучше сразу отключить плагин и пользоваться Cursor.
IDE получает "правильный" результат и считает подпись валидной
Как-то слишком просто. Что мешает защитному механизму послать заведомо невалидные данные и, получив "правильный" результат, детектить взлом?
Вместо того чтобы выполнять сложную математическую операцию, метод сразу возвращает предопределенное значение
Хм.. звучит как неплохая оптимизация :) Кто пользовался, подскажите, IDE под этим активатором всё так же страдает от внезапного съедания всей ОЗУ? Может, попросим автора чита починить и это по-братски, раз он всё равно уже в теме, как там и что, а то у разрабов JetBrains походу лапки на такие проблемы)

VADemon
23.01.2026 11:54Есть ощущение, что половину статьи размешала с водой LLMка.

semenovs
23.01.2026 11:54Да, тяжело читать текст написаный нейронкой. Я дальше первых нескольких абзацев не выдержал. (

KVentz
23.01.2026 11:54Этого джина обратно уже не затолкать, других текстов становится всё меньше, думаю в этом году уже их не останется, всё будет генерироваться. Слишком огромная разница в трудозатратах. Писать целый день текст, вычитывать, проверять источники или выдать «готовый» текст за 10 минут. А дальше можно либо пойти отдыхать, либо сделать ещё три десятка постов за день и ещё полдня останется на отдых.

andrey_subbotin Автор
23.01.2026 11:54Текст писали сами, не думаю что нейронная сеть сможет проанализировать код и скрипт и выдать готовый результат в виде статьи через 10 минут. По агенту нужно ответить на вопрос причины и следствия, что делает каждая модификация, как это может отразиться на результат работы, с первого взгляда кажется что некоторые модификации методов не такие страшные, но поменялось и поменялось. Нет даже предположений для чего это нужно.
Этап подготовки технического черновика для статьи это достаточный технический анализ, за 10 минут такая работа не делается.
Возможно "краткость не сестра моего таланта" и текст получился путанным и сложным.

Lippiece
23.01.2026 11:54Да, не может. Она это сделает через 10 секунд. Особенно позабавила опасность транзитивных пакетов вместе с установкой curl.

Siemargl
23.01.2026 11:54Это тут у многих читателей такая манечка.
Везде мнится ии
Ах да, забыл. Благодарим за обращение внимания на возникшую проблему, мы работаем над её устранением.

Lizdroz
23.01.2026 11:54Меня больше смущает даже не криптография, а то, что конфиги и джарники тянутся curl-ом с неизвестного домена без чексумм. Сегодня там лежит рабочий кряк, а завтра владелец домена решит монетизировать ботнет и подменит activator.jar на майнер или стилер. И вся эта армия разработчиков с правами доступа к продовым базам сама затянет трояна к себе на машину

Mitai
23.01.2026 11:54так а зачем использовать продукты Жидобрейнсов если есть вскод или зед или неовим

Bratken
23.01.2026 11:54Дае проблемы:
Куколдинг с санкциями и непродажа в РФ. У нас в компании пришлось через юрлицо в другой стране покупать
Идиотская подписочная байда без возможности купить раз и навсегда

Antoshink
23.01.2026 11:54Это те самые лагающие непомерно жрущие ide которые писались криворучками?

iroln
23.01.2026 11:54Да. Ещё там баги годами не чинят. Баги 5-летней давности - обычное дело. От релиза к релизу деградация качества и производительности стала особенно хорошо заметна после того как они ударились в гонку AI-агентов. Стало совсем невыносимо. Я отменил свою подписку в 2025.
foxsoft2005
Выглядит, как реклама. Или мне кажется?
С подтекстом - "активировать софт активатором - это плохо"...
P.S. Кстати, я бы посмотрел, как JetBrains, ушедшие из РФ и тотально от нее отгородившиеся судились бы с разработчиком, который активировал их продукт этим активатором...
NickSin
Мне тоже кажется, что прям на "заказную статью" похожа. Надеюсь, что это только мои домыслы)
С учетом того, что в статье написано :
А мы с вами находимся как раз в блоге Haulmont, то опасения не беспочвенные)
Ну так вот Nintendo год назад на модеров это не помешало "наехать". В наше время всё можно. Было бы желание и силы.
foxsoft2005
вот и я о том же.
плюс, вот этот тезис - "активатор - это опасно".. новость, конечно, мощная, ничего не скажешь))...
3ton
Я этой IDE не пользовался, но если она не плоха и бесплатна - какая разница в каком блоге о ней говорят и в принципе, даже если это реклама?
foxsoft2005
Никакой.
Просто Haulmont - это Cuba (ныне Jmix) - фреймворк для Java/Kotlin, который имеет собственный набор плагинов, визуальную студию (платную, кстати) именно в соотв. продукте JetBrains, активацию которого они здесь и обсуждают.
glaschenko
Конечно эта информация "выгодна" Haulmont - мы заинтересованы, чтобы о ней узнал широкий круг пользователей. Глупо это отрицать. Но это же не отменяет описанных в ней фактов.
NickSin
Это понятно. Я даже не против OpenIDE как продукта. Я жду когда он допилят поддержку С/С++/С#. Мне по работе нужно, потому жду. Ну и подход у консорциума более-менее ясен: берет открытие плагины и свой стор пилим, а что не открыто, но лицензии позволяют переиспользовать - используем.
Конечно, использовать кряк это всегда было и есть не безопасно. Тут никто и не спорит
Newbilius
А вам не кажется, что это 1 в 1 так же неэтично, как продвигается мессенджер Max? Ну т.е. рассказ не про преимущества вашего продукта, а накидыаание на конкурента. Масштаб не тот, но принцип - тот же.
glaschenko
Эээммм.. то есть вы считаете пиратство "конкурентом"? А рассказ о рисках пираства - "накидыванием"? Подумайте еще раз...
Alex_RF
Она ушла. Ее нет в российском реестре программного обеспечения. Нет в реестре - значит нет оснований для преследование на территории РФ. Таким образом ребята из СберТех декомпилируют ПО и даже не думаю проводить какой-то рефакторинг, просто добиваются собираемости и ПРОДАЮТ! Так что сначала уж лучше их
alexander-shustanov
Сильное заявление. Есть пруфы? Но вдруг, если так, то врядли это можно назвать хорошей стратегией. Как просто поддерживать код, который вы декомпилируете?
Alex_RF
Есть. Сам в СберТех в этом участвовал. Нет это не GigaIDE - другой продукт из линейки Platform V. Пока дело касалась расширение, доработки Open Source еще было терпимо. Потом понадобилось "перевести" комерческие плагины с нереальными сроками, началась эта жуть. Не было возможности что с кодом там происходит и как он работает. По этому ушел.
TerekhinSergey
Никакой связи между наличием в реестре и желанием/возможностью защищать свои права нет. Технически, они могут пойти в суд и защищать свои права хоть завтра. Практически, до официального возвращения в РФ они вряд ли это будут делать (это моё имхо)
Alex_RF
Для того что бы подать в суд в РФ, им надо доказать что этот программный продукт им принадлежит. На территории РФ, это делается одним способом, через реестр программного обеспечения. Я не подбиваю нарушать авторские права, я просто говорю как на самом деле обстоит.
TerekhinSergey
Ну нет же. Для этого программа должна быть зарегистрирована в роспатенте, а не в реестре отечественного ПО. Туда им не попасть никак (очень сложно и не за чем) , но от этого они не теряют возможность защищаться
coctic
Даже в Роспатенте регистрировать необязательно для защиты. Это облегчает доказательство, что эта программа - твоя, но это не единственный способ.
Alex_RF
Ниже объяснил все. Разъяснение юристов СберТех - продукт в котором случился казус тоже ниже назвал. Вот так все у нас в стране обстаит. А единственное что я хотел - это что бы дали время на нормальную декомпиляцию и ПОЛНЫЙ РЕФАКТОРИНГ! То есть переписывание кода на основе сторонего кода. К стати посмотрел OpenIde и их plugin они именно так и поступают. А вот в GigaIDE - опять прямая декомпиляция и .......
Alex_RF
Во заминусовали по полной. Но эта правда жизни. Продукт Platform V:Artifactoty - под эгидой СберТех. Приказ сверху - тупая декомпиляция плагин от SonaType Nexus - добиваемся минимальной работоспособности - и продаем направо и лево. Как я начал задавать вопросы - тут же создали условия для моего увольнения. При этом было заявлено - стратегия согласована с юристом и расклад согласования - как я озвучил! Так что удачи минусаторы и великая контора СберТех
tanderus
А это ещё "смотря кем" пытаться инициировать преследования: необязательно самими JB.
Вспомнился случай, когда пенсионер взломал PS3 , а за импортозамещение совсем не наградили
Lizdroz
Наличие или отсутствие в реестре отечественного ПО никак не влияет на защиту авторских прав. Бернская конвенция и ГК РФ все еще действуют. Другой вопрос, что JetBrains вряд ли пришлет юристов в нынешней ситуации, но формально использование ломаного софта это нарушение, независимо от реестров
alexander-shustanov
не могу говорить за JB, но не думаю, что они стали бы судиться с разработчиками
а вот запуск у себя сомнительных скриптов может привести к плачевным последствиям
alexger95
возможно кто-то на работе практиковал и безопасники нарыли дыру в шифроавани)
со стороны вглядит как безопасное для домашнего использования)