Рассчитывает углы поворота (yaw и pitch) в сторону хитбокса противника с помощью тригонометрических формул (atan2, asin) и напрямую изменяет углы обзора игрока, мгновенно приклеивая прицел к цели.
Документация правил детекта
Технический справочник правил статического анализа. Узнайте, как каждая механика чита работает внутри клиента Minecraft и какие сигнатуры оставляет в скомпилированном Java-байткоде.
Бой (Combat) 11 правил
Автоматизирует взрыв якорей возрождения в обычном мире (Overworld). Моментально ставит блок якоря, заряжает его светящимся камнем и активирует пустой рукой, вызывая мощнейший взрыв в течение 1 тика.
Мгновенно переключает активный слот в хотбаре на топор, как только противник поднимает щит, наносит удар топором (вызывая оглушение щита на 5 секунд) и возвращает меч обратно за 1 игровой тик.
В ванильной боевке Minecraft критический удар наносит +50% базового урона, но требует, чтобы игрок находился в падении и строго НЕ бежал на спринте. Этот чит сбрасывает флаг спринта (setSprinting(false)) ровно на тик перед отправкой пакета атаки, обеспечивая 100% гарантированные криты на полной скорости бега без замедления.
В ванильном PvP Minecraft подрыв вагонетки с ТНТ (Carting) требует точной ручной последовательности действий: установки рельса под ноги противника, установки на него вагонетки с динамитом и мгновенного подрыва выпущенной из лука стрелой, выстрелом заряженного арбалета или огнивом. Модификации с функцией Insta Cart полностью автоматизируют эту боевую комбинацию в пределах нескольких тиков. Мод автоматически отслеживает натяжение тетивы, программно спускает выстрел, доводит угол обзора (pitch) под ноги цели, переключает слоты хотбара и через эмуляцию нажатий клавиш выставляет рельс и вагонетку ровно по траектории стрелы, нанося мгновенный смертельный урон.
Перебирает список загруженных сущностей, фильтрует доступных игроков и мобов, сортирует их по наименьшей дистанции или уровню здоровья (Comparator) и циклично распределяет авто-удары по целям.
В ванильном Minecraft при каждом прыжке сущности переменная `LivingEntity.jumpingCooldown` устанавливается в значение 10 тиков (0.5 секунды). Пока таймер больше нуля, игрок не может совершить следующий прыжок сразу после приземления. Модификации с функцией No Jump Delay сбрасывают `jumpingCooldown` в 0 на каждом тике, что убирает паузу между прыжками, позволяет непрерывно распрыгиваться (BunnyHop) и сохранять максимальную скорость спринт-прыжков.
Отправляет искусственные пакеты микропрыжка (PlayerMoveC2SPacket.PositionAndOnGround со смещением y + 0.003 и флагом onGround = false) прямо в момент атаки, форсируя 100% критический урон на сервере даже при неподвижном стоянии на земле или в паутине.
Формирует модифицированные сетевые пакеты движения (PlayerMoveC2SPacket) с углами наведения на цель и отправляет их на сервер, оставляя локальную камеру игрока неподвижной. На экране игрок смотрит прямо, но удары наносятся по целям сзади или сбоку.
Автоматически наносит удар в ту же миллисекунду, когда луч прицела пересекает хитбокс противника. Полностью исключает задержку человеческой реакции (~150-250мс), обеспечивая гарантированный первый удар в дуэлях.
Рассчитывает высокочастотные векторы луча из глаз камеры игрока в обход ванильного рейкастинга, обнаруживая цели в заданном радиусе и мгновенно атакуя до того, как игра зарегистрирует наведение прицела.
Кристаллы (Crystal) 1 правил
В ванильном Minecraft кристаллы Края, установленные на обсидиан или бедрок, детонируют при нанесении удара, нанося разрушительный взрывной урон в радиусе поражения (более 10 сердец в эпицентре). В соревновательном режиме «кристального PvP» игроки используют это для быстрого устранения соперников, вручную чередуя установку обсидиана, размещение кристалла правой кнопкой мыши и мгновенный удар левой кнопкой мыши. Auto_Crystal автоматизирует данный боевой цикл. В исследованном модуле `com.larpclient.module.impl.AutoCrystalModule` клиент вызывает `onTick()` на каждом игровом такте. При удержании клавиши активации модуль проверяет текущий объект под прицелом игрока. Если обнаружен кристалл (`class_1511`) или опорный блок обсидиана (`class_2246.field_10540`), метод `serviceBase()` либо взрывает существующий кристалл через `tryBreak()`, либо выбирает кристалл (`class_1802.field_8301`) в хотбаре и устанавливает его с помощью `BlockHelper.interactBlock()`. Метод `tryBreak()` проверяет предельную дистанцию `range`, вызывает атаку `attackEntity(player, crystal)` (`method_2918`) и анимацию руки (`method_6104`) с учетом таймеров задержки (`breakDelay`, `placeDelay`). Это позволяет чит-клиенту производить взрывы с нечеловеческой скоростью и точностью.
Эксплойты (Exploits) 8 правил
Удаляет стойки для брони и вагонетки из клиентского мира через Entity.remove(), снимая блокировку прицела и луча взаимодействия (raycast). Это позволяет беспрепятственно атаковать врагов, взрывать кристаллы и кидать эндер-жемчуг сквозь спам-ловушки из сущностей.
Отправляет лавину пакетов движения и скорости за один игровой тик, многократно увеличивая кинетическую скорость стрел или динамита для нанесения колоссального урона.
Автоматизирует построение маршрута, добычу блоков и менеджмент инвентаря для непрерывного копания руды без участия игрока.
Содержит встроенный фреймворк Baritone (baritone.api, baritone.pathing), предоставляющий функционал автономной навигации по миру, алгоритмов A* и автоматического строительства.
В режиме выживания время добычи блока определяется его твердостью, характеристиками инструмента и эффектами игрока (Спешка, Утомление). При разрушении клиент отправляет серверу пакеты `PlayerActionC2SPacket` со статусами `START_DESTROY_BLOCK`, `ABORT_DESTROY_BLOCK` и `STOP_DESTROY_BLOCK`. На стороне сервера метод `ServerPlayerInteractionManager.processBlockBreakingAction()` подсчитывает прошедшие тики с момента начала копки и рассчитывает прогресс через `calcBlockBreakingDelta()`. Сервер подтверждает поломку только при достижении прогресса 1.0 (100%). В исследованном модуле (`com.example.timer.mixin.ServerPlayerInteractionManagerMixin`) метод `timer$scaleStopValidation` служит сервером компенсации ускорения таймера. При получении действия `STOP_DESTROY_BLOCK` миксин вычисляет эффективные тики копки, умножая разницу времени на множитель чита: `scaledTicks = Math.max(1, Math.round((field_14000 - field_20326) * multiplier))`. Если полученный прогресс превышает `0.7F` (70%), метод досрочно вызывает завершение поломки `this.method_21717(pos, sequence, "destroyed")` и отменяет стандартную проверку через `ci.cancel()`, снижая требуемый объем работы на 30% сверх ускорения тиков. Поскольку класс `ServerPlayerInteractionManager` относится к логике сервера, этот миксин работает исключительно в одиночной игре, на интегрированном LAN-сервере или при установке мода на сам сервер. На удаленных выделенных серверах проверка выполняется независимо от клиента, поэтому клиентские читы FastBreak воздействуют на клиентский класс `ClientPlayerInteractionManager` (обнуляя задержку между блоками `blockBreakDelay` в 5 тиков). В легитимных модах библиотека Fabric API (`ServerPlayerGameModeMixin`) также подключается к `processBlockBreakingAction` для вызова событий `AttackBlockCallback` и `PlayerBlockBreakEvents.Before`, однако не изменяет прогресс разрушения и не вызывает `method_21717`.
Принудительно подменяет блоки в клиентском мире на Blocks.AIR в обход сервера, позволяя игроку просматривать скрытые полости и проходить сквозь твёрдые стены и преграды.
Внедряется в методы расчёта коллизий сущностей и подмешивает искусственные твердотельные VoxelShape, позволяя игроку ходить по воздуху или стоять на невидимых фантомных опорах.
В ванильном Minecraft физика персонажа, расчет перемещения, опрос клавиш управления и локальный прогресс разрушения блоков привязаны к базовой частоте 20 тиков в секунду (50 миллисекунд на один тик). Начиная с версии 1.20.3, расчет целевой длительности тика для главного цикла клиента вынесен в метод `MinecraftClient.getTargetMillisPerTick()`. Чит-модули Timer перехватывают данный метод и делят возвращаемое значение на пользовательский множитель (например, 2.0x или 3.0x). В исследованном модуле таймера (`com.example.timer.mixin.MinecraftClientMixin`) аннотация `@Inject` встраивается в точку `RETURN` метода `method_54785` с флагом `cancellable = true`. При включенном чите миксин считывает `TimerState.get().tickMultiplier()` и подменяет результат: `cir.setReturnValue(cir.getReturnValueF() / multiplier)`. В результате локальный клиент отрабатывает несколько тиков за промежуток реального времени одного тика, ускоряя перемещение и взаимодействие игрока с миром. При подключении к внешнему многопользовательскому серверу серверный мир продолжает работать с собственной частотой 20 TPS. Клиент с ускоренным таймером начинает отправлять пакеты перемещения (`PlayerMoveC2SPacket`) и действий с аномально высокой частотой по отношению к серверному времени. Серверные античиты фиксируют превышение лимита входящих пакетов за интервал времени и блокируют игрока за Timer или Speedhack. В легитимном контексте ванильный Minecraft предоставляет команду `/tick rate <значение>` (доступную с версии 1.20.3) для синхронного изменения скорости симуляции мира администраторами сервера. Инструменты создания видеороликов (например, ReplayMod) используют интерполяцию кадров и управление временем при рендеринге сцен, однако не форсируют отправку пакетов в соревновательном мультиплеере.
Хитбоксы (Hitbox) 7 правил
Создает искусственные объекты EntityHitResult и внедряет их в MinecraftClient.crosshairTarget. В результате игра считает, что игрок целится во врага, даже если прицел направлен в пустое небо.
Создает экземпляры Box с гигантскими числовыми константами расширения (>10.0 блоков), раздувая хитбоксы на всю арену для нанесения ударов сквозь стены с огромного расстояния.
Каждый тик обходит список всех загруженных в мир сущностей и принудительно увеличивает размеры хитбокса каждого противника, поддерживая их увеличенными непрерывно.
Перехватывает методы Entity.getBoundingBox() или Entity.getTargetingMargin() через Mixin (@ModifyReturnValue, @Inject), возвращая искусственно раздутый хитбокс, благодаря чему по игрокам можно попадать далеко за пределами их видимой модели.
Подписывается на события шины рендера Forge (RenderPlayerEvent, RenderLivingEvent), подменяя хитбоксы каждый раз, когда игра рендерит модель игрока.
Внедряется в WorldRenderer.renderEntity() через @Inject прямо перед отрисовкой кадра для перезаписи хитбоксов, удерживая их расширенными каждый кадр без рассинхронизации игровых тиков.
Напрямую изменяет хитбокс сущностей врагов через setBoundingBox() в сочетании с Box.expand() или Box.stretch(), искусственно увеличивая объем регистрации ударов и стрел.
Инвентарь (Inventory) 7 правил
Отслеживает слот второй руки (offhand). Как только тотем активируется и сгорает, модуль мгновенно (за 0 тиков) находит запасной тотем в инвентаре и помещает его во вторую руку через пакеты clickSlot.
Отслеживает уровень здоровья, остаток тотемов или близость врагов. При падении HP ниже порога (например, 4 сердца) клиент моментально разрывает сетевое соединение, предотвращая смерть и потерю экипировки на анархии или хардкоре.
В PvP ситуациях бросок эндер-перла требует ручного выбора слота на хотбаре, нажатия ПКМ и последующего возврата к мечу или щиту. Модули AutoPearl / MiddleClickPearl автоматизируют эту цепочку по нажатию одной клавиши: макрос сканирует хотбар, находит эндер-перл, переключает активный слот, вызывает `interactItem` для мгновенного броска и через 1 тик восстанавливает исходный предмет в руке.
Автоматически перемещает вспомогательные предметы (жемчуг Края, золотые яблоки, зелья, обсидиан) в активный хотбар при нажатии горячих клавиш или падении HP.
Автоматически достает из шалкеров и перекладывает в активный хотбар вагонетки с ТНТ, якоря возрождения или стрелы прямо во время дуэлей.
Обходит стандартную 4-тиковую задержку нажатия правой кнопки мыши путём сброса MinecraftClient.itemUseCooldown через Mixin Accessor, позволяя моментально строиться, мгновенно бросать зелья/пузырьки опыта и спамить кристаллами.
Слушает входящие пакеты анимации активации тотема или критического падения здоровья, заранее подставляя новый тотем до завершения тика урона.
Вредоносное ПО (Malware) 12 правил
Модификации Minecraft исполняются в пользовательском пространстве виртуальной машины Java. Отдельные сервисные утилиты или лаунчеры могут запускать внешние вспомогательные скрипты, однако модификациям игрового процесса обычно не требуется вызывать командные интерпретаторы ОС для скачивания файлов системными утилитами. Cmd_Curl_Dropper нацелен на шаблоны кода, в которых класс содержит ссылки на механизмы запуска процессов (`ProcessBuilder`, `Runtime`) совместно с именами командных оболочек и утилит скачивания. В сценариях вредоносного ПО этот прием может использоваться для передачи задач загрузки и выполнения нативным системным утилитам: вызываемая командная строка запускает `curl`, `wget`, `certutil` или `bitsadmin`, скачивая сторонний исполняемый файл в каталог пользователя и запуская его через `ProcessBuilder.start()` или `Runtime.getRuntime().exec()` автономно от клиента игры. Успешность запуска зависит от настроек безопасности системы. Если политики исполнения скриптов, антивирусные модули или контроль учетных записей (UAC) блокируют порождение дочерних процессов процессом `javaw.exe`, запуск завершится ошибкой.
Большинство внешних сервисов и платформ модов обращаются к серверам через доменные имена с помощью службы DNS. Доменные имена обеспечивают прозрачность владельца, проверяемые сертификаты SSL/TLS и возможность оценки репутации домена. Direct_IP_URL выявляет модификации, содержащие публичные числовые IP-адреса (например, `http://203.0.113[.]42:8080/`) непосредственно в коде сетевых обращений. Локальное тестирование или частные серверы могут использовать прямое указание адреса, однако в публичных модах использование жестко зашитых публичных IP встречается редко. В сценариях вредоносного ПО прямой IP-адрес может использоваться для сетевого взаимодействия через стандартные API (`HttpURLConnection`, сокеты) с серверами управления (C2) без формирования DNS-запросов, что затрудняет обнаружение соединений средствами мониторинга DNS. Наличие прямого IP-адреса само по себе не доказывает вредоносность кода, однако требует проверки назначения сетевого вызова, формата передаваемых данных и принадлежности удаленного сервера.
Входящие вебхуки Discord позволяют внешним сервисам отправлять сообщения и вложения в текстовые каналы через HTTP POST запросы в формате JSON без необходимости регистрации отдельного бота. Discord_Webhook выявляет наличие адресов webhook в коде модификаций. Во вредоносных сценариях вебхуки Discord могут использоваться как канал несанкционированной выгрузки конфиденциальных файлов и учетных данных (сессионных токенов из профилей лаунчеров, файлов cookie или сохраненных паролей) через стандартные HTTP-клиенты вроде `HttpURLConnection`. Поскольку трафик к доменам Discord обычно разрешен сетевыми экранами, выгрузка данных через webhook редко блокируется межсетевыми фильтрами. Хотя некоторые инструменты администрирования серверов или сборщики отчетов об ошибках могут использовать вебхуки для уведомлений, встраивание адреса входящего webhook в клиентский мод подвергает токен риску извлечения любым лицом, проанализировавшим файл.
Стандартные загрузчики подключают модификации, добавляя JAR-архивы в classpath. Код мода функционирует в рамках виртуальной машины JVM, взаимодействуя с клиентом через события, миксины и интерфейсы движка. Dropper_Download_Exec выявляет цепочки инструкций, когда один и тот же метод скачивает внешний бинарный файл по сети, сохраняет его на локальный диск и сразу же запускает. В исследованном образце из `com.magma4496.Creatormagma` модификация выполняет метод `fetchAndExec()` в фоновом потоке. Метод отправляет сетевой запрос с помощью `HttpClient.send()`, записывая тело ответа напрямую в файл во временной директории через `BodyHandlers.ofFile(dest)`. При получении HTTP-кода 200 метод вызывает `dest.toFile().setExecutable(true)` и запускает полученный файл через `powershell` с аргументами `-NoProfile`, `-WindowStyle Hidden` и командой `Start-Process ... -Verb RunAs`, запрашивая повышение привилегий в системе (UAC). Примечательно, что проверка операционной системы в теле метода отсутствует. Из-за безусловного вызова `powershell` и файла `.exe` без проверки системного свойства `os.name` запуск срабатывает исключительно в среде Windows. На системах под управлением Linux или macOS, где интерпретатор PowerShell отсутствует или не может запустить исполняемый файл формата PE/Windows, запуск завершается ошибкой, которая подавляется пустым блоком `catch`.
Модификации регулярно обращаются к внешним серверам для штатных задач: проверки наличия обновлений, перехода к документации или баг-трекеру, подгрузки скинов или отображения ссылок на сообщества в главном меню. Embedded_URL выполняет инвентаризацию всех строковых URL-адресов в байткоде мода. В исследованном образце Destra Client (`ru.destra.gui.MainMenuScreen`) встроенные строковые константы (`SOCIAL_URL_*`) используются методом инициализации интерфейса `ensureSocialButtons()` для создания кнопок быстрого перехода. Примечательно, что в оригинальном коде автора иконка `SOCIAL_ICON_TELEGRAM` передается вместе со ссылкой `SOCIAL_URL_DISCORD`, а иконка `SOCIAL_ICON_DISCORD` — вместе со ссылкой `SOCIAL_URL_TELEGRAM`. Наличие встроенных ссылок само по себе не свидетельствует о вредоносности: большинство легитимных модов содержат ссылки на исходный код и страницы авторов. Тем не менее учет встроенных адресов обеспечивает прозрачность внешних сетевых связей мода, позволяя аудиторам выявлять каналы сбора телеметрии, рекламные редиректы и адреса сторонних серверов.
Модификации для 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 метод выводит сообщение об ошибке и прерывает работу без скачивания бинарного файла.
Mod Menu — стандартный графический интерфейс просмотра модификаций для Fabric и Quilt, считывающий списки загруженных дополнений и пользовательские настройки для отображения меню в игре. ModMenu_Config_Hiding выявляет модификации, которые скрытно перезаписывают файл `<config>/modmenu.json` на диске для удаления своего названия из списка. В исследованном образце (`com.example.timer.TimerClientMod`) код мода выполняется в точке входа `onPreLaunch`. До загрузки графического интерфейса метод `hideFromModMenu()` находит `modmenu.json`, парсит его через `JsonParser.parseReader()`, обходит массивы `"hidden_mods"` и `"hiddenMods"` и добавляет строку `"timer"`. После этого метод создает необходимые директории и сохраняет обновленный JSON на диск через `Files.newBufferedWriter()` и `GsonBuilder().toJson(root, writer)`. Когда Mod Menu инициализирует интерфейс, он считывает обновленный файл и не показывает модификацию в списке модов. Чит продолжает исполняться с полными правами, но исключается из отображаемого в интерфейсе списка установленных дополнений. Этот метод дополняет правило `Modlist_Self_Hide` (score 9): если `Modlist_Self_Hide` фиксирует удаление контейнера мода из списка загрузчика через рефлексию (`FabricLoaderImpl.getMods().removeIf(...)`), то ModMenu_Config_Hiding фиксирует модификацию конфигурационного файла Mod Menu на диске. В легитимном окружении файл `modmenu.json` редактируется самим Mod Menu (`com.terraformersmc.modmenu`) по запросу пользователя через меню настроек либо поставляется в готовых сборках. Программная правка чужого конфига сторонним модом на этапе `preLaunch` свидетельствует о намеренном сокрытии чита.
Загрузчики модов хранят списки активных модификаций во внутренних структурах ядра и предоставляют публичные интерфейсы (например, `FabricLoader.getInstance().getAllMods()`), через которые меню и утилиты опрашивают загруженные дополнения. Modlist_Self_Hide нацелен на алгоритмы, получающие доступ к внутренним структурам загрузчика через рефлексию и удаляющие контейнер определенного мода из общего списка. После удаления контейнера модификация продолжает исполняться, но перестает отображаться в списках модов, меню настроек и при опросе через API загрузчика. Данный метод модификации списка загрузчика через рефлексию дополняет файловое сокрытие (`ModMenu_Config_Hiding`, оценка 9), при котором чит перезаписывает `modmenu.json` на диске для удаления из графического меню. Этот прием используется для сокрытия читерских модулей от модераторов при ручных проверках установленных модов. Вместе с тем принудительное вмешательство в закрытые структуры загрузчика может нарушить работу других модов, зависящих от проверки установленных библиотек, или приводить к сбоям при завершении работы клиента.
Интерфейс Java Native Interface (JNI) позволяет программам на Java вызывать скомпилированный код C, C++ или Rust. Базовые библиотеки Minecraft (такие как LWJGL для графики и OpenAL для звука) используют нативные модули. Кроме того, некоторые легитимные моды оптимизации (управление памятью, уменьшение задержки ввода) поставляют нативные библиотеки для конкретных платформ. Native_Library_Dropper выявляет классы, которые извлекают бинарные файлы во временный каталог и загружают их через `System.load()`. Хотя такой механизм используется и в легитимном системном коде, нативные библиотеки могут использоваться для выполнения машинного кода непосредственно в адресном пространстве процесса. Машинный код исполняется вне виртуальной машины JVM, что позволяет напрямую взаимодействовать с памятью и системными вызовами операционной системы. Поскольку распаковка нативных библиотек встречается как в оптимизационных дополнениях, так и в нежелательном ПО, правило классифицировано со средней степенью критичности (оценка 5) и требует отдельного анализа содержимого самой библиотеки.
Приложения могут использовать удаленные серверы конфигурации для показа объявлений, получения экстренных сообщений или обновления списка серверов без выпуска новой версии мода. Pastebin_C2 выявляет модификации, содержащие прямые ссылки на эндпоинты открытого текста (`pastebin.com/raw/`). Во вредоносном коде анонимные сервисы публикации текста могут использоваться как динамические конфигураторы: создатели мода размещают в пасте актуальные адреса вебхуков Discord, флаги деактивации или ссылки на дополнительные файлы. Мод обращается к пасте при запуске клиента через сетевой поток (например, `URL.openStream()`) и применяет полученные строки как параметры работы. Само по себе чтение текстового документа не исполняет код в системе, однако обращение к неаутентифицированным публичным пастам дает автору пасты возможность в любой момент изменить сетевое поведение мода без ведома пользователя.
Вредоносное ПО (стиллеры и трояны) маскируется под моды Minecraft для хищения сессионных токенов учетных записей, сохраненных паролей браузера и токенов Discord. Для скрытой передачи украденных данных злоумышленники часто используют Telegram Bot API, отправляя HTTP POST запросы на эндпоинт `api.telegram.org/bot<token>/sendMessage` или `sendDocument` в свой приватный чат.
Многие разработчики и сообщества ведут информационные каналы на платформах Discord, Telegram или Matrix для публикации списков изменений, технической поддержки и анонсов обновлений. Telegram_Link находит файлы классов, содержащие строковые константы со ссылками `t.me/`. В исследованном образце из `ru.pulse.Pulse` модификация выполняет метод `runtimeBrandingTick()`, который меняет заголовок окна GLFW на рекламный текст, проверяет системное свойство и принудительно открывает в браузере игрока два Telegram-канала через `Desktop.getDesktop().browse()`. Если интерфейс `Desktop` не поддерживается, код вызывает системную утилиту Windows (`rundll32 url.dll,FileProtocolHandler`) в качестве резервного пути. Такое поведение не является скрытым каналом управления (C2) или кражей данных, однако навязчивое открытие сторонних ссылок при запуске нарушает пользовательский опыт и навязывает рекламный переход без явного действия пользователя.
Обфускация (Obfuscation) 10 правил
Все имена методов, полей и параметров удалены или заменены на короткие 1-2 символьные токены по всему пакету классов.
Формирует чувствительные строки (URL-адреса, токены, пути к файлам) посимвольной конкатенацией символов или байтов во время выполнения в обход сканеров строк.
Линейное выполнение методов разбивается на блоки и помещается в бесконечный цикл while(true), управляемый конечным автоматом на основе инструкций switch.
Текстовые строки в классах сохранены в виде зашифрованных байтовых массивов и расшифровываются статическими методами непосредственно перед использованием.
JAR-архив содержит классы с некорректными именами путей, пробелами на конце или спецсимволами, вызывающими краш декомпиляторов и стандартных ZIP-распаковщиков.
Использует визуально неотличимые символы кириллицы или греческого алфавита (например, русские 'а', 'е', 'о', 'р') в именах классов и методов для обмана реверс-инженеров.
В файле манифеста fabric.mod.json или mods.toml объявлены точки входа, которые физически отсутствуют в JAR либо указывают на зашифрованные загрузчики.
Имена классов состоят из псевдослучайных последовательностей символов (например, IIlIlIIllI, O0OO0OO) для затруднения ручного анализа и навигации по коду.
Основной байткод мода зашифрован криптографическими алгоритмами (AES, DES, XOR) и расшифровывается в память во время выполнения через кастомный загрузчик классов (defineClass).
Мод содержит множество классов с однобуквенными именами (a.class, b.class, c.class), что характерно для глубокого переименования обфускаторами ProGuard или Zelix KlassMaster.
Дистанция (Reach) 3 правил
До версии Minecraft 1.20.5 дистанция атаки и взаимодействия игрока задавалась жестко зашитыми константами в коде клиента и сервера (3.0 блока для выживания, 4.5 для креатива). Начиная с версии 1.20.5 Mojang перенесла эти параметры в систему атрибутов сущностей: `player.entity_interaction_range` (`PLAYER_ENTITY_INTERACTION_RANGE`) и `player.block_interaction_range` (`PLAYER_BLOCK_INTERACTION_RANGE`). Reach_Attribute_Modifier фиксирует создание модификаторов атрибутов `EntityAttributeModifier`, нацеленных на реестр дистанции взаимодействия. В сценарии чит-модификации код создает экземпляр модификатора с положительным смещением и регистрирует его в контейнере атрибутов локального игрока. Это расширяет радиус атаки и взаимодействия на уровне стандартных игровых механик без необходимости прямого патчинга методов рейкастинга или байткода `ClientPlayerInteractionManager`. На серверах с ванильной валидацией или серверными античитами клиентские модификаторы атрибутов, не подтвержденные сервером, приводят к отклонению пакетов взаимодействия и отмене ударов.
В Minecraft класс `ClientPlayerInteractionManager` управляет взаимодействием персонажа с миром: установкой и разрушением блоков, а также кликами по сущностям. Метод `getReachDistance()` возвращает допустимую дистанцию взаимодействия в блоках, а `hasExtendedReach()` определяет, активен ли режим расширенной дальности (например, в творческом режиме). Reach_Mixin_Override выявляет модификации, которые внедряются в `ClientPlayerInteractionManager` через библиотеку Mixin для подмены логики этих методов. В чит-клиенте Phosphor (`net.caffeinemc.phosphor.mixin.ClientPlayerInteractionManagerMixin`) аннотация `@Inject` перехватывает `getReachDistance()F` в точке `HEAD` с параметром `cancellable = true`. Если чит-модуль включен, метод отменяет ванильное выполнение и возвращает значение ползунка `reachModule.blockReach.getFValue()`. Одновременно метод `hasExtendedReach()Z` переопределяется возвратом `false`, предотвращая сопутствующие расхождения в клиенте. Несмотря на то, что клиент получает возможность направлять прицел на удаленные объекты, серверные античиты и проверка дистанции на сервере отбрасывают входящие пакеты при превышении валидного радиуса.
В ванильном клиенте Minecraft прицеливание в ближнем бою рассчитывается в методе `GameRenderer.updateTargetedEntity()`. В режиме выживания максимальная дистанция луча для захвата цели `EntityHitResult` ограничена 3.0 блоками. Сущности, находящиеся дальше 3.0 блоков, не могут быть атакованы в ближнем бою. Reach_Raycast_Extended обнаруживает боевые модули, которые самостоятельно вычисляют траекторию атаки через `ProjectileUtil.raycast()` с увеличенными коэффициентами дальности. В моде SimpleAutoAttack (`org.simpleautoattack.SimpleAutoAttack.AutoAttack`) метод `AutoMeleeTick()` рассчитывает вектор направления взгляда: `float reach = (float)(mc.field_1724.method_7337() ? 4.5 : ...)`, где дальность креативного режима `4.5` блока сохраняется в переменную `reach`. Затем вызывается `ProjectileUtil.raycast(..., reach * reach)`. Если в расширенном радиусе обнаружена живая сущность, код вызывает атаку `attackEntity(player, target)` (`method_2918`). Это позволяет моду автоматически наносить удары по целям на увеличенном расстоянии. Если дистанция превышает порог валидации на сервере, атака будет аннулирована античитом.
Рендер / ESP 3 правил
В Minecraft точка обзора игрока жестко привязана к сущности персонажа. На каждом кадре метод `Camera.update()` обновляет положение и углы поворота камеры на основе координат игрока, высоты глаз и направления взгляда, а метод `clipToSpace()` предотвращает прохождение камеры сквозь блоки в режиме от третьего лица. Freecam_Camera_Detached выявляет модификации, внедряющиеся в `Camera` (`class_4184`) для отвязки камеры от тела персонажа. В исследованном чит-клиенте (`com.larpclient.mixin.CameraFreecamMixin`) аннотация `@Inject` встраивается в конец метода `Camera.update()` (`method_19321`). При активном модуле `FreecamModule` миксин перезаписывает ориентацию камеры через `this.method_19325(yaw, pitch)` и координаты через `this.method_19322(pos)`. Это позволяет игроку свободно перемещать бесплотную камеру сквозь непрозрачные стены и блоки для разведки баз, тайников и подземных пещер, в то время как физическое тело персонажа остается неподвижным на сервере.
В Minecraft эффект свечения (Glowing) подсвечивает контур сущности цветной обводкой, которая видна сквозь непрозрачные блоки и препятствия. В ванильной игре этот эффект выдается сервером строго по игровым правилам — например, при попадании спектральной стрелы или наложении соответствующего зелья. Glow_Mixin_Override обнаруживает модификации, перехватывающие метод `Entity.isGlowing()` (`method_5851`) через Mixin. В модификации FriendHighlight (`net.maksaidev.friendhighlight.mixin.EntityGlowMixin`) аннотация `@Inject` внедряется в начало метода `isGlowing` с параметром `cancellable = true`. Если сущность является игроком (`class_742`), код проверяет его наличие в списке друзей `FriendManager.isFriend(name)`. При совпадении метод вызывает `cir.setReturnValue(true)`. Принудительный возврат `true` заставляет клиент отрисовывать контур сквозь стены. Несмотря на то, что в данном образце функционал ориентирован на утилитарную подсветку союзников, абсолютно аналогичный байткод-шаблон используется в читах класса Wallhack / ESP для обнаружения любых противников на PvP-серверах.
В графическом конвейере Minecraft используется тест глубины OpenGL (Z-буфер), скрывающий объекты, расположенные позади непрозрачных блоков. При включенном тесте глубины пиксели удаленных объектов отсекаются, если перед ними уже отрисованы более близкие поверхности. Trap_ESP выявляет модификации, которые подписываются на события рендеринга Fabric (`WorldRenderEvents.AFTER_ENTITIES`) и создают кастомные слои отрисовки с отключенным тестом глубины (`depthTest(false)` / `method_23617(false)`). В моде Antitrap (`ru.antitrap.TrapRenderer`) класс регистрирует слушатель в `WorldRenderEvents.AFTER_ENTITIES`. Код сканирует блоки в радиусе 35 блоков на наличие элементов ловушек и стоек для брони. Координаты найденных объектов отрисовываются с использованием слоя `HIGHLIGHT_LAYER`, в котором тест глубины отключен вызовом `.method_23617(false)`. Отключение теста глубины позволяет цветным рамкам и коробкам отображаться поверх стен и грунта, предоставляя нечестное преимущество (Wallhack/ESP) за счет обнаружения скрытых ловушек и засад сквозь любые преграды.