Борьба с читерами на RustMe
Почему античит RustMe — один из самых развитых и современных защитных решений для Minecraft в мире; как он работает, и как мы его создаём — ответы на эти и многие другие вопросы, связанные с борьбой с нечестной игрой на RustMe (да и в играх в целом) вы найдёте в этой статье.
Статья весьма объёмная — приготовьте чай и печеньки ;)
Читы и скрипты в играх — специальные программы, которые делают пользователя мощнее других игроков. Они выполняют некоторые действия за читера (например, сами прицеливаются во врагов) и даже позволяют делать совсем невообразимое (например, летать). Такое ПО — бич всех онлайн-игр, в особенности тех, что ориентированы на противостояние игроков друг с другом.
Среди Minecraft-серверов сильнее всего от читов страдают медленные PvP-выживалки, ведь в аких режимах почти всё зависит от навыков игрока. Как вы, наверно, уже могли догадаться, RustMe — яркий представитель такого вида серверов. У нас значительную часть взаимодействия игроков составляют стрельба и рейды. Чтобы преуспеть в этих аспектах, честному игроку нужно много практиковаться и иметь отличные «механики» (реакцию, точность, знание тонкостей игры).
А читеру достаточно нажать пару кнопок, чтобы похоронить все труды, а заодно и мотивацию стараться честного игрока, без капельки пота убив его десять раз подряд в голову за полкарты. И нет, совесть его потом не сгрызёт.
Разновидности читов
Из-за того, что Minecraft в давние времена создавался неопытным в геймдеве разработчиком и изначально целился именно на одиночную игру, сегодня взлом клиента игры позволяет читерам делать практически всё, что угодно — летать, мгновенно разрушать блоки, видеть врагов и сундуки сквозь стены, произвольно телепортироваться по карте, отращивать километровые руки и многое другое.
Вещи, о которых наверняка наслышаны многие, кто играл в какие-либо шутеры — «WH» («ВэХа») — Wall Hack, ESP, Tracers… Подвидов много, но суть одна — обладатель такой функции всегда знает, где кто находится. От него не спрячешься в стенах дома и к нему не подкрадёшься со спины (даже на шифте).


Другой известный пример — AimBot — «авто-наводка». То самое, в чём неумелые игроки зачастую винят каждого, кто посмел их одолеть в огнестрельном поединке. «Аим» позволяет читеру дать меткий no-scope хедшот в прыжке, находясь за сотни световых лет от вас.
Из более узконаправленных читов— «Clip» (позволяет проникать внутрь домов, минуя двери и защитные механизмы), «Horse Jump» (позволяет прыгать на лошади), «Inventory Walk» (позволяет бегать с открытым инвентарём/сундуком/…), «Jesus» (позволяет бегать по поверхности воды).
Если бы нам понадобилось описать все известные читы на листе бумаги, то этим листом бы наверняка можно было в несколько слоёв обернуть всю Землю.
Серверный античит RustMe (RMAC)
В грамонтно спроектированной сетевой игре большинство категорий читов отсекается за счёт «авторитарности» сервера. Таким образом, большинство игровых механик и физика реализуются на защищённом от шаловливых ручек жуликов сервере, а клиент лишь говорит, в какую сторону бежать, и отрисовывает то, что ему диктует сервер, на экране (это описание крайне грубое, но в рамках нашей статьи его достаточно). В Майнкрафте же игрок может дать серверу команду «перемести меня на крышу вон той десятиэтажки», и сервер покорится. Это накладывает на сервер кучу дополнительных обязательств в виде анализа каждого чиха игроков.
Можно было бы, конечно, свалить весь контроль за соблюдением честной игры на модераторов — но тогда «модерку» бы пришлось выдавать каждому второму зашедшему, ведь иначе всех не проверить. Игроки в таком случае просто перебанят друг друга.
С чего всё начиналось
На помощь в такой ситуации приходит античит — «расширение игры», которое в автоматическом режиме сканирует поведение всех и каждого, и на основе наблюдаемых данных само определяет вероятность того, что какой-то конкретный игрок — нарушитель, — и самостоятельно же очищает сервер от нечестных действий, если упомянутая вероятность высока.
Конечно, RustMe — не первый и не последний сервер, которому понадобился античит. Есть множество готовых решений в этой области: как открытых, так и коммерческих. В последние годы создавать античиты на Майнкрафт в каком-то смысле стало флешмобом, и сейчас их существует уже много десятков (правда, почти все из них — не более чем детские поделки).
Но «Rust в Minecraft» — тематика новая и весьма необычная, что делает использование существующих систем защиты неоптимальным. Что бы мы ни пробовали, ничего не давало должного результата. Поэтому год назад, в августе 2021-го, мы решили присоединиться к этому флешмобу и создать ещё один античит: с блекджеком и плюхами, которые оптимизированы именно под наш сервер.
За основу был взят чистый лист. А спустя несколько месяцев работы на свет появился RMAC — RustMeAntiCheat (название временное (спустя год так и не сменили (да и зачем уже?). Это — серверный античит RustMe. Игрокам не нужно его устанавливать — система функционирует целиком и полностью на наших игровых серверах. Штука автономная и всеобъемлющая: RMAC внимательно внемлит каждому шороху на сервере и исследует образцы поведения всех игроков на предмет различных читов — описанных выше и не только, и сам наказывает их, когда считает нужным, не привлекая к этому персонал. Это позволяет модераторам заниматься другими категориями жалоб и помогать игрокам.
Эволюция полномочий античита
В список наказаний поначалу входил лишь «автокик» — отключение подозреваемого от сервера с возможностью для него тут же войти обратно. Причина такой скромности — риск ложных срабатываний.
К несчастью, ни одна защитная система в мире (будь то антивирус, антиспам или, как в нашем случае, античит) не совершенна: они все периодически пропускают нарушителей и, что хуже, ошибочно принимают за нарушителей простых работяг (в нашем случае — честных игроков).
Отличить «аимера» от опытного игрока на самом деле гораздо сложнее, чем кажется — особенно программно на стороне Майнкрафт-сервера. Во время тестов алгоритмов обнаружения Аимбота мы не раз сталкивались с ситуацией, когда наш «подопытный» читер падал от руки стратегически более сильных и ловких завсегдатаев сервера.
RMAC непрерывно улучшался: модули обнаружения читов становились быстрее и точнее, появлялись новые алгоритмы выявления нарушителей. Когда точность системы стала достаточно высокой, и на RustMe появилась система внутриигровых жалоб («репортов»), о которой мы в подробностях поговорим позднее, мы ввели «автобаны» — дали системе свободу самостоятельно блокировать (навсегда!) учётные записи, с которых, как считает система, ведётся нечестная игра.
Для вынесения вердикта новый алгоритм опирается как на результаты проверок античитом (RMAC), так и на мнение игроков (жалобы). Это дуо получило уже более продуманное имя — Осирис (Osiris) (справедливый «судья душ» из древнеегипетской мифилогии).
Репорты в игре + RMAC + мамин секретный ингредиент* = Osiris
(*) О нём мы ещё успеем поговорить отдельно.
Сейчас Осирис стабильно блокирует десятки читеров каждый день, а ложные срабатывания стали единичными случаями. Позднее в деталях мы обсудим и то, что сейчас из себя представляет «суд» над игроками, заявляющими об ошибках программы — процесс гораздо сложнее, чем вы можете подумать.
Важное замечение по поводу работы Осириса: во многих случаях система способна предотвратить акт читерства ещё до нанесения жуликом ущерба. Например, при попытке взломать скорость плавания нарушитель будет временно обездвижен («контужен»), в результате чего его сможет перегнать даже одноногий пловец, волею судьбы попавший в водоём с этим недочитером, выпав из вертолёта.
Что мы имеем сегодня
Были времена, когда Осирис обзывал «контуженными» всех подряд. Например, такое было, когда мы впервые тестировали новый модуль, позволяющий отличить "Timer" (чит для ускорения хода игры) от жителей Дальнего Востока (и прочих узников пинга в 200+ мс). Но мы учимся на своих ошибках, и сейчас эта проблема возникает гораздо реже.
В целом, система хорошо справляется со своей задачей. Число нарушителей колоссально уменьшилось за прошедший год, а жулики, продолжающие игру, уже совсем не такие сильные, какими были их «предки». Игра на RustMe стала гораздо более честной и справедливой для всех.
Но есть некоторые нюансы, о которых мы поговорим чуть позднее. Спойлер: с этими же нюансами связано падение темпов роста числа ежемесячных автобанов в сентябре, которое вы можете наблюдать на приведённом выше графике автобанов.
Внутриигровые жалобы (репорты)
Что это и чем запивать
Для самостоятельного выявления жуликов античиту нужно время, причём иногда довольно много. Кроме того, не для всех читов он может гарантировать факт использования — некоторые из них гораздо проще заметить человеку вручную, а банить всех подряд — такая себе идея (поверьте, уж мы-то знаем, о чём говорим ;)). Для наиболее эффективной борьбы с нарушителями была введена система, позволяющая быстро и легко жаловаться на подозрительных игроков, не отходя от кассы — прямо внутри игры.
Жалуясь на игроков с помощью этой системы (в том числе с помощью внутриигровой команды «/report»), вы вносите весомый вклад в борьбу с читерами. В отличие от криков «AVTOBUS123 читер» в чате и пустого беспокойства персонала сервера в Дискорде, внутриигровые «репорты» действительно работают.
- Если на игрока поступает много жалоб от разных людей, модерация получает особые уведомления, и тот, на кого донесли, стоит первым в очереди на проверку (и, соответственно, на наказание — если, конечно, эти обращения справедливые).
- Частота жалоб на игрока влияет на то, как «пристально» за ним следит Осирис. Чем больше репортов, тем более «агрессивные» и «рискованные» алгоритмы обнаружения используются. Благодаря этому Осирису удаётся самому, не отвлекая модераторов, наказать читера, которого он бы без вашей помощи забанить не рискнул.
- Когда игрок, на которого вы пожаловались, получает своё заслуженное наказание, вы получаете уведомление об этом. Согласитесь: приятно знать, что правосудие свершилось, и гнев от несправедливой смерти несколько угасает. Пример такого уведомления вы можете найти чуть ниже.
- Система внутриигровых жалоб надёжна. Репорты — важный фактор в вынесении Осирисом и модераторами вердикта, но не решающий. Сговориться с сотней незнакомцев о репорте просто неприятного вам человека сложно, но возможно (мастерам ораторского искусства низкий поклон). Однако это не приведёт к его ложной блокировке.
Рейтинг доверия — репутация в системе репортов
Осирис непрерывно адаптируется под всё, что происходит на RustMe. Подобно жителям в басне о мальчике, который кричал «Волк!», система помнит и учитывает всю историю жалоб каждого игрока.
«Это показывает, как награждают лжецов: даже если они говорят правду, никто им не верит».Если стрелять редко, но метко, то есть жаловаться только на жуликов, в факте читерства которых у вас нет ни тени сомнения, то система репортов будет высоко ценить каждое ваше обращение. Если же репортить каждого, кто посмел вас убить, то вскоре система совсем перестанет обращать на вас внимание. Индивидуальный рейтинг постоянно обновляется, учитывая данные о новых жалобах и их исходах.
Как это работает?
На самом деле, идея довольно проста.
- Когда новый игрок регистрируется на RustMe, ему присваивается некоторый рейтинг «по умолчанию», и Осирис при получении от него жалобы размышляет как-то так: «Справедливо ли это обращение, или я могу его проигнорировать? 50/50 — учту, но торопиться с выводами не буду».
- Если игрок, на которого была подана жалоба, в течение некоторого времени оказывается наказан (модератором сервера вручную или Осирисом автоматически), то поданная жалоба помечается как «справедливая».
- Если долгое время цель жалобы остаётся без наказания, обращение считается «ложным».
- Репутация репортящего (игрока, заявляющего об обнаружении нарушителя) зависит от того, как часто он на кого-то жалуется и сколько среди этих жалоб «справедливых» и «ложных». Недавние жалобы влияют на результат сильнее, чем жалобы, поданные когда-то давно, что позволяет системе быстрее адаптироваться к изменениям.
Пропасть между «хорошим» и «плохим» информатором куда шире, чем может показаться на первый взгляд. Жалоба одного справедливо репортящего игрока может оказаться весомее, чем десять жалоб от игроков, репортящих всех без разбору.
Мораль? Жалуйтесь на читеров, чтобы помочь сделать RustMe чище и играть в более комфортных условиях, но не злоупотребляйте системой, чтобы не потерять доверие Осириса и остаться без защиты.
Клиентский античит RustMe (Астрея)
Трудности разработки серверного античита
В разделе о нашем серверном античите (RMAC) мы упомянули о кое-каких «нюансах». Вкратце обрисуем их перед тем, как перейти к тому, что мы заспойлерили заголовком этой части статьи.
Сервер Minecraft обладает ограниченным... нет, крайне скудным объёмом информации о том, чем занимается игрок. Например, он может с уверенностью сказать: «вон тот чувак сейчас находится в точке с координатами (10, 20.5, —30)». Но вот уверенности в том, что «тот чувак» сейчас стоит на земле, уже нет. В таких, казалось бы, мелочах, нельзя доверять игровому клиенту. Читер может взломать его и заставить сервер думать, что ноги игрока касаются земли, даже когда он на самом деле находится в воздухе. Примерно так жулики обходят «наивный» алгоритм предотвращения чита на полёт.
Для защиты от этого серверный античит (RMAC) вынужден запускать целую симуляцию игровых механик на своей стороне, самостоятельно (вместе с игроками, но независимо от них) вычисляя все переменные физики и прорисовки.
То есть античит каждую секунду (игровой такт) пытается предугадать, где в следующий момент времени будет находиться каждый игрок, опираясь на то, какие блоки его окружают, а также на результаты предыдущих вычислений. Если игрок в итоге появляется не там, где должен быть, система считает его последнее перемещение незаконным и принимает соответствующие меры.
Но сервер не может учесть все факторы, так как некоторые вещи целиком обрабатываются на стороне клиента, то есть на компьютере игрока. В итоге некоторые виды читов (например, «Fullbright», позволяющий в ночи видеть всё так же хорошо, как при свете дня) для RMAC обнаружить невозможно. Совсем.
Кроме того, необходимость постоянно следить за разнообразными действиями огромного числа игроков требует значительных вычислительных мощностей. Например, у нас ушли месяцы, чтобы разработать корректно работающий «анти-вх» (скрытие игроков и мебели за стенами), который не убивает сервер лагами. К слову, получившаяся на RustMe система не имеет таких же качественных аналогов (для Minecraft-серверов) в мире.
Различных проверок в античите полно, и поддерживать всё в рабочем состоянии становится сложно. Сейчас на стабилизацию существующих компонентов уходит больше времени, чем на создание новых.
Зарождение Астреи
В большинстве современных сетевых игр защита от читов реализована в значительной степени именно на стороне клиента. Сервер тоже причастен, но не так сильно, как в случае RMAC.
Весной 2022-го мы задумывались над введением «закрытых» серверов, которые отличались бы от «открытых» только уровнем доступа — для входа нужно было бы наиграть на RustMe довольно много часов. Так мы хотели снизить нагрузку на Осирис и персонал и сделать блокировки более ощутимым наказанием — нарушители не могли бы просто переобуться и продолжить свои злодеяния.
Но у такого подхода были недостатки — честным новичкам пришлось бы много времени играть на «обычных» серверах, прежде чем они получали бы доступ к «закрытым». К тому времени интерес к зашторенным серверам бы пропадал, и в итоге они бы пустовали. Кроме того, это не защитило бы от «скрывающихся» читеров — тех, кто старается не палиться и читерить по чуть-чуть и лишь иногда.
Кроме того, у нас продолжает кипеть работа над кое-чем поистине грандиозным — над особыми серверами, на которых разместить текущий серверный античит не получится при всём желании.
Поэтому мы решили начать работу над собственным клиентским античитом, который получил имя древнегреческой богини справедливости Астреи (Astraea).
Особенности Астреи
Значительная часть силы Астреи заключена в модуле, который загружается игроком и устанавливается им на компьютер. Во время игры на RustMe этот модуль следит за тем, что происходит с процессом игры и устройством пользователя, на корню предотвращая любые попытки вмешаться в естественный ход событий. Здесь уже даже обозначенный ранее чит на дополнительное освещение не пройдёт.
Кроме того, Астрея собирает различную вспомогательную информацию о компьютере игрока, например, какой у него процессор и сколько у него оперативной памяти. Владение такой информацией позволило нам ввести новый тип наказаний — аппаратные блокировки. Словив такую, нарушитель больше не сможет зайти на RustMe с компьютера, с которого он играл, когда был пойман — ни новый ник, ни смена IP-адреса не помогут обойти решение античита.
Поскольку на момент создания Астреи у Осириса уже имелась высокоразвитая инфраструктура, о части которой мы ещё успеем немного поговорить далее, она стала частью прежней системы. Так получилось некоторое смешение мифологий и методологий борьбы с читами.
Запуск Астреи и RustMe Launcher
Конечно, было бы странно заставлять игроков скачивать и вручную запускать какой-нибудь условный «Anticheat.exe» перед каждым входом на сервер. Поэтому для удобства использования и тестирования некоторой части упомянутых выше грандиозных планов был выпущен RustMe Launcher — специальная программа для запуска клиента Minecraft, оптимизированного под игру на RustMe. Почему-то не все заметили, так что стоит отдельно упомянуть, что этот клиент поставляется с OptiFine для комфортной игры на слабых компьютерах.


В начале запуска нашей команде разработки, ещё будучи неопытной в разработке клиентских приложений под Windows, пришлось столкнуться с огромным количеством трудностей: постоянно что-то шло не так. То у кого-то крашился клиент, то у кого-то не было звука… К счастью, большая часть проблем уже позади, но стоит признать, работы ещё предстоит много.
Однако плохая доступность лаунчера на начальных этапах привела к тому, что игроки просто не хотели его использовать, даже когда их ошибки исправлялись. Для привлечения внимания к Астрее мы стали постепенно закрывать доступ на наши игровые сервера для игроков без лаунчера, а тех, кто его использует, поощрять небольшими, но приятными, бонусами.
Основное преимущество игры на ныне «закрытых» серверах (с Астреей) — беспрецедентная защита от читов. Можете быть уверены — на этих серверах все игроки находятся в равных условиях: больше вам точно не придётся скорбеть о вещах, потерянных из-за смерти от «аимера».
Многие читеры имеют хотя бы поверхностное представление о том, на что способны клиентские античиты. Поэтому, играя на защищённых Астреей серверах, они даже не пытаются использовать читы. Риск обнаружения и угроза пожизненной аппаратной блокировки в данном случае внушают любителю нечестной игры достаточно страха, чтобы он отбросил своё читерское прошлое и начал играть по правилам.
Именно поэтому на графике автобанов Осириса, приведённом в первом разделе статьи, в сентябре можно наблюдать пониженное число блокировок: как раз в это время и была запущена Астрея. Читеры добровольно складывают оружие, и наказывать некого.
Некоторые жулики сейчас просто «отсиживаются» и ждут, когда создатели используемых ими читерских программ объявят о том, что разработали чит, который Астрея «не палит» — они играют справедливо лишь временно. Но будьте уверены: наш клиентский античит постоянно совершенствуется, так что меч правосудия настигнет всех.
Планы по развитию лаунчера
Первая версия лаунчера RustMe (то, что мы имеем сейчас) была собрана на коленке в сжатые сроки на основе проекта с открытым исходным кодом. Почти все наши силы ушли именно на реализацию Астреи — механизмов обнаружения читов и аппаратных блокировок, которые никак не связаны с самим лаунчером (а лишь запускаются с его помощью).
В результате получился потрясающий с точки зрения защиты, но крайне неудобный с точки зрения пользователя продукт.
Узрев эффективность Астреи своими глазами, мы захотели продолжить развитие нашего лаунчера. Уже сейчас вовсю кипит работа над совершенно новой, созданной с нуля именно для RustMe, программой запуска, и нам не терпится поделиться с вами результатами. Мы обязательно дадим вам знать, когда будем готовы представить RustMe Launcher v2!
Немного о том, что происходит «на кухне»
Команда противодействия ЗПО
Год назад особого внимания античиту на RustMe не уделялось — использовались готовые решения, относительно хорошо зарекомендовавшие себя на классических Minecraft-серверах (но, как упоминалось ранее, плохо подходившие для нас). Сегодня же у сервера есть целая команда, занимающаяся противодействием жульничеству в игре. В неё входят специалисты, имеющие большой опыт разработки античит-систем для игр и даже читов для других Minecraft-проектов (в том числе и для защищённых своими серверными и клиентскими античитами).
Инфраструктура античита
И в нашем серверном античите (RMAC), и в клиентском (Astraea) есть целый вагон и тележка (много тележек) алгоритмов автоматического выявления жульничества. Кроме того, на многие решения влияют ещё и жалобы от игроков. Всё это делает систему очень сложной, и её нужно как-то контролировать.
Пока игрок находится в игре, почти все его действия записываются в память Осириса. Когда он выходит, его кикает или он получает блокировку, все его записанные действия, а также вся история «флагов» (подозрений) обоих античитов, данные о жалобах и прочая информация сохраняется в специальный облачный журнал. По понятным причинам мы не можем раскрыть все детали о том, какая информация собирается и обрабатывается.
Всё это нужно для того, чтобы в любой момент времени иметь детальную статистику по работе систем защиты и иметь возможность исправлять ложные срабатывания, которые хоть и редко, но по-прежнему случаются (и у RMAC, и у Астреи).
Интересный факт: обычно для внесения изменений в плагины (расширения сервера) требуется перезапуск. Но не в случае с Осирисом. Необходимость непрерывной доставки обновлений на игровые сервера довела прогресс до того, что большинство обновлений мы можем выпускать и без перезапусков: одна кнопка — и уже через минуту на всех серверах загружена и функционирует последняя версия защиты.
Обжалование ложных автоблокировок
Увы, до сих пор система иногда совершает ошибки. Мы это признаём и делаем всё возможное, чтобы исправиться. Если вас забанил Осирис (будь то RMAC, Астрея, репорты или комбинация этого всего — вы всё равно не разберёте, что именно это было), но вы не использовали ЗПО (читы, макросы, автоклик, двойной/тройной клик, в том числе встроенные в мышку, и т.п.), вы можете направить аппеляцию в нашем Дискорде в разделе «кик-по-ошибке».
Рассмотрением тикетов в этой категории занимается лично команда противодействия жульничеству RustMe. В простых случаях на рассмотрение уходит несколько часов, но в запутанных может уйти до нескольких недель.
В чём причина такой медлительности? Поверьте, не в ленивой натуре наших программистов.
При рассмотрении обжалований автобанов, выданных античитом, мы подробно изучаем информацию об игроке, которая хранится в описанном ранее специальном облачном журнале, а также сведения, предоставленные игроком в описании тикета. Во многих случаях мы также проводим ручные тесты: заходим на RustMe и проверяем, действительно ли в описанной игроком ситуации возможен ложный бан с такими же (как у этого игрока) логами (данными в журнале).
Если по результатам «вскрытия» действительно оказывается, что блокировка — ложная, мы незамедлительно её снимаем и сообщаем об этом игроку. После чего мы добавляем сведения о найденной ошибке в наш «баг-трекер» (список известных неразрешённых ошибок) и начинаем работу над её исправлением (для того, чтобы подобных ложных срабатываний больше не было).
Но если выяснится, что игрок на самом деле использовал читы и попытался слукавить, тикет закроется без ответа, а Дискорд-аккаунт, с которого он был открыт, станет навечно забанен на нашем Дискорд-сервере без возможности аппеляции.
Убедительно просим вас не тратить попусту своё и наше время. Единственный способ читеру получить разбан — купить его в магазине RustMe. И даже он может прийти на помощь лишь единожды.
Комедия в трёх актах
О «спонсоре», наигравшем на сервере 130+ часов и решившим в какой-то момент попробовать «незаметно почитерить».




К слову, таких любителей попытать удачу много. Сейчас их стали выявлять ещё чаще благодаря улучшенной методике сбора журналов.
Завершающие слова
Мы были рады приоткрыть завесу тайны, всё это время скрывавшую то, что именно мы делаем, чтобы на RustMe все играли на равных. Искренне надеемся, что каждый, кто прочёл хотя бы какую-то часть этой статьи, открыл для себя что-нибудь новое.
Будет здорово, если вы поделитесь прочитанным с друзьями и знакомыми на сервере, чтобы о написанном узнало побольше людей. В особенности это касается системы репортов, которая пока что не пользуется особой популярностью у наших игроков. Надеемся, это временно ;)
А на этом всё. Если статья вызовет интерес, мы будем и дальше периодически выпускать «краткие» отчёты о проделанной работе, об успехах и неудачах. С графиками и картинками :) Желаем вам весёлой игры на RustMe!
