/dev: Vanguard x LoL – промежуточные итоги

Справляется ли система противодействия жуликам со своей задачей?

Приветствую вас, путники! 

С тех пор, как в League of Legends появился новый античит, прошло почти восемь мегасекунд, и за этот непостижимый уму отрезок времени мы отпраздновали множество побед, потерпели пару неудач и узнали о существовании косплея на Vanguard (вот она, настоящая высокая мода). Сегодня мы обсудим первые два пункта в этом списке в рамках нашего плана стать самой честной и разговорчивой командой по борьбе с жульничеством среди всех игр для ПК, но перед этим в качестве легкой закуски из 14 блюд советуем прочитать статью, предшествовавшую выходу Vanguard.

Теперь философский амюз-буш: мы продолжим улучшать работу Vanguard в LoL (пока читеры улучшают читы), но не станем еще раз объяснять и обосновывать необходимость использования этой программы. Чем эффективнее метод борьбы с жульничеством, тем больше у него потенциальных недостатков, и мы в Riot готовы пойти на определенные жертвы, чтобы обеспечить соревновательную целостность матчей. Когда блокировки (в том числе за умышленное раскармливание, токсичность и бустинг) слишком легко обходить, бесплатные игры обрастают неразрешимыми проблемами. Если вы не хотите устанавливать античит с доступом к ядру, мы уважаем ваше решение, но не собираемся ждать, пока платформы, на которых работают наши игры, сами обзаведутся необходимыми средствами безопасности. Возможно, когда-нибудь этот прекрасный день наступит, но сейчас обеспечить Лиге светлое будущее может лишь эффективная программа для борьбы с жульничеством.

Ну вот, теперь наконец можно приступить к основной трапезе. Еще раз здравствуйте, меня зовут mirageofpenguins, и сегодня я буду вашим официантом, менеджером и шеф-поваром в одном лице. Формально моя кулинарная карьера завершилась, когда меня уволили из Subway после девяти месяцев работы, но с тех пор я устроился на кухню в Riot и вот уже больше десяти лет готовлю там вкуснейшие античиты.

Как обстоят дела

Чтобы приготовить сносный сэндвич, в первую очередь нужен хороший хлеб, и Vanguard – не исключение. Обновив систему противодействия жульничеству в LoL, мы достигли большинства поставленных целей, причем успех был таким очевидным, что некоторые даже выступили за создание Vanguard 2. Ладно, здесь я приврал (обновлять античиты примерно так же весело, как натягивать носки на кота), но мы действительно добились очень многого, подтянув античит Лиги до стандартов двадцать первого века, и победы эти были ожидаемыми, но оттого не менее приятными.

Меньше скриптеров

Процент ранговых игр, в которых присутствует хотя бы один скриптер, и количество учетных записей, заблокированных конкретно за скриптинг. Моя любовь к этому графику так сильна, что я вытатуировал его на обеих руках и теперь хожу в салон каждые три недели, чтобы обновить рисунок в соответствии со свежими данными. Надеюсь, скриптеры закончатся быстрее, чем место у меня на коже.


Первая и самая очевидная победа заключается в том, что в целом в игре стало гораздо меньше жуликов. Выше представлена частота использования скриптов в ранговой очереди LoL и количество ежедневных блокировок, выполненных при помощи старого и нового античита (Packman и Vanguard соответственно). В основном за немедленное сокращение количества скриптеров следует благодарить превентивные меры Vanguard, но категория блокировок по "железу" показывает, что некоторые особенно самоотверженные читеры пытались жульничать и после выхода Vanguard, принося в жертву одну учетную запись за другой, чтобы выяснить, есть ли у программы ограничение по количеству заблокированных игроков (спойлер: нет).

С момента запуска Vanguard мы заблокировали более 175 000 жуликов, но что еще важнее, частота использования скриптов в ранговых играх впервые за четыре года упала ниже 1%. На момент написания статьи вероятность встретить скриптера в ранговом матче составляет 1 к 200, так что я наконец могу со спокойной душой пройти квалификацию. Конечно, я все равно проиграю все матчи, и система отправит меня в Железо II, но, по крайней мере, винить в том можно будет только сам факт существования в игре такого чемпиона как Зед.

Недавний всплеск активности на графике (от 8-го июля) напрямую связан с явлением, которое в Riot называется "летний отпуск": когда мы вернулись на работу, то обрушились на скриптеров с яростью разгневанных богов, заблокировав 35 000 учетных записей менее чем за 48 часов. Хотя многие были поражены, узнав, что специалисты по борьбе с жульничеством – не роботы, могу заверить, что большинство из нас проходят тест Тьюринга почти в 100% случаев. Мы тоже ценим простые радости жизни, такие как прогулки на природе и поглощение пищи, и после недели отдыха наш боевой дух запылал с новой силой.

Меньше ботов

Количество часов, которые ежедневно наигрывают боты, в каждом из режимов. Вы будете правы, если предположите, что я использовал в качестве показателя часы, чтобы топ-менеджеры сразу почувствовали в кошельке приятную тяжесть (ибо вместе с количеством ботов сокращаются и расходы на серверы).

На втором графике можно увидеть, сколько часов наиграли боты в этом году. Программы для ботоводства и скриптинга похожи, поэтому мы различаем эти типы нарушений в основном по результатам игроков и производительности клиента. Например, боты часто умирают под башнями и наслаждаются частотой кадров в целых 9 FPS. На языке собственных данных это выглядело бы примерно так:

select date, game_mode, sum(minutes_in_game) * 60
from anticheat.detections 
where client.resolution_x + client.resolution_y < 1000
   and client.avg_fps < 15 fps
group by 1, 2

Vanguard препятствует запуску виртуальных машин, и это ощутимо ударило по способности программируемых чайников заваривать игровые сессии в League of Legends: количество часов, которые ежедневно наигрывают боты, упало с 1 миллиона до менее 5 тысяч. В результате многие боты впали в затяжную депрессию – возможно, играя против ИИ, вы замечали, как они стоят у вашего фонтана и тихо предаются размышлениям о себе и жизни. Этот внезапно охвативший ботов паралич был вызван тем, что они не могли запустить Vanguard – а значит, и подключиться к серверу. Некоторые из них до сих пор пытаются использовать для обхода устаревшие виртуальные машины на OSX, но это я оставлю на десерт (читайте дальше).  

Вскоре после внедрения Vanguard мы также удалили 3,5 миллиона ботоводческих учетных записей, которые жулики еще не успели продать, чтобы лишить этот подпольный рынок главного ресурса. От ботов зависят как бустеры, которым требуются новые учетные записи для игры в паре с клиентом, так и скриптеры, которые меняют "учетки" как перчатки. Именно фермы ботов лежат в основе всей этой злодейской схемы, так что мы остаемся максимально бдительными и постоянно стремимся повышать показатель боли в секунду для незадачливых жуликов.  

Оперативные блокировки

Возможно, вы уже успели обрадоваться, что я перестал сравнивать Vanguard с сэндвичем, но как любой начинающий писатель, я так легко не отказываюсь от дурацких метафор и быстрых перекусов. Так что следующие графики можно сравнить с майонезом, поскольку именно майонез придает сэндвичу вкус, что бы там ни говорили сторонники здорового питания.

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

Слева вверху представлен ключевой показатель эффективности античитов – время реагирования. По сути, это количество матчей, которое успевает сыграть жулик, прежде чем его учетную запись принудительно отправляют в реальность, где она никогда не существовала. Большинство существ, обитающих в трех измерениях, называют этот алгоритм пространственно-временного сжатия просто "блокировкой". Поскольку мы можем вносить изменения в Vanguard независимо от самой Лиги, процесс блокировки скриптеров значительно ускорился. Время реагирования сократилось с 45+ матчей до менее чем 10, и даже эта небольшая задержка по большей части создается искусственно, чтобы создатели читов не сразу осознавали, что мы взяли их на прицел.

График слева демонстрирует обратную сторону медали. Время обнаружения говорит о том, как долго чит (или обновление для чита) способен прятаться в экосистеме Лиги, прежде чем свиток с его названием будет ритуально сожжен – именно так он попадает в библиотеку Vanguard. Когда мы обнаруживаем чит, то изучаем все новые комбинации учетных записей и оборудования, выявленные за последнее время, и самая давняя из них становится начальной точкой для отсчета (в днях). Сейчас мы действуем очень быстро, но читы становятся все изощреннее, и обнаруживать их все сложнее. В этом и заключается хрупкий баланс: если мы будем реагировать слишком быстро, жулики станут оперативнее выпускать обновления для читов, и время их обнаружения увеличится.  

Нарушители, которые продолжают жульничать и после появления Vanguard, не испытывают привязанности к своим учетным записям и не уважают честную игру. Они вращаются в кругу других таких же жуликов, смотрят на Лигу исключительно сквозь призму жульничества, и исправить их может лишь время или строгий выговор от мамы. До тех пор мы будем соревноваться с ними в бесконечной гонке вооружений, и чем быстрее мы их обнаруживаем, тем чаще им приходится начинать все сначала.

Другие любопытные изменения

Если вам вдруг захочется, чтобы ваша разность частоты побед за Зери выглядела так же, напоминаю, что мы высылаем всех жуликов в Блокировск, где налоговая ставка составляет 100% от годовых учетных записей.

На графике выше приведена частота побед 9 наиболее популярных чемпионов среди скриптеров и изменения после появления в игре Vanguard. Поскольку скрипты явно уделывают людей в конкурсе "кто быстрее щелкает мышкой", большинство из этих чемпионов – стрелки. Слева показана разница в частоте побед в ранговых играх между скриптерами и обычными игроками, а справа вы можете наблюдать общую частоту побед тех же чемпионов за 60 дней до появления Vanguard в Лиге и спустя 60 дней после его появления. Нам особенно важно оценить влияние на соревновательность, поэтому учитывались только игры в Платине и выше.

Если у вас нет аллергии на синее излучение экрана, графики откроют вам один очень приятный факт: жулики стали играть немного хуже. Причин этому несколько, но главная заключается в том, что из-за Vanguard использовать внутренние читы и избегать обнаружения стало гораздо сложнее, поэтому многие нарушители были вынуждены либо начать играть самостоятельно, либо прибегать ко внешним читам. Эти программы не могут считывать память игры напрямую, поэтому они получают данные, анализируя происходящее на экране, и пытаются на их основе эмулировать нажатия кнопок. Получается у них это, мягко говоря, не очень.

Кроме того, уменьшение количества скриптеров (и снижение эффективности скриптинга) влияет даже на общую частоту побед чемпионов, за которых жулики играют чаще всего. Конечно, здесь нужно учитывать правки баланса, сезонные сбросы и особенности меты, но некоторый процент действительно приходится на скриптеров, которые больше не могут удержаться в Алмазе. А я не могу сдержать улыбку, когда это пишу.

Минимум ложноположительных срабатываний

При использовании любой современной антимошеннической программы существует риск, что она ошибочно примет за чит программу, которая на самом деле им не является (как правило, это вредоносное ПО или читы для других игр). Но, к счастью, Vanguard не такой уж и современный: в этом году ему исполнилось четыре. Рассмотрим последний ингредиент в этом сэндвиче (который, очевидно, состоит из двух кусков хлеба, щедро смазанных майонезом) – частоту ложноположительных срабатываний Vanguard в Лиге.

Отметим, что утверждение "ручная игуана моего брата установила скрипты на мой компьютер" не считается уважительной причиной для жульничества, но учитывая то, как часто нам пишут именно это, мы начинаем подозревать, что создатели фильмов про Годзиллу что-то знали.

Столбцы отражают процент отмененных блокировок Vanguard, сгруппированных по причине отмены, а линии показывают, сколько времени в среднем длилась блокировка в каждом случае. Всего причин для снятия блокировки три (в том же порядке, в котором они идут на графике):

  1. Учетная запись была украдена (не отдана добровольно), после чего за ней было замечено использование читов.

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

  3. Учетная запись была заблокирована по причине, не связанной с жульничеством в League of Legends.

Блокировки Vanguard считаются ложноположительными лишь в последнем случае, и сейчас их доля составляет менее 0,01%. Другими словами, только 1 из 10 000 блокировок является ошибочной. К тому же, блокировка этих ложно обвиненных игроков в среднем длится не более 72 часов. Вскоре после запуска Vanguard нам пришлось внести некоторые корректировки с учетом того, что у игроков Лиги часто на фоне работают другие игры, и это помогло решить большинство проблем. Наказанию должны подвергаться только те, кто этого заслуживает, поэтому мы продолжим совершенствовать Vanguard, чтобы свести сопутствующий ущерб к минимуму.   

Тем не менее, потребность жуликов в новых учетных записях никогда не исчезнет, так что самой частой проблемой по-прежнему остается кража. В порядке исключения служба поддержки может вернуть игроку учетную запись, если очевидно, что ее взломали, но порой установить истинного владельца очень сложно, особенно если "учетка" несколько раз переходила из рук в руки с разрешения хозяина в течение длительного периода времени. Благодаря Vanguard многие совладельцы учетных записей вдруг узнали о жульнических наклонностях своих друзей, но помочь им, к сожалению, не в наших силах. 

Не давайте доступ к своей учетной записи другим игрокам, используйте уникальные пароли и, пожалуйста, включите двухэтапную аутентификацию.

Более сложные вопросы

Перспектива обязательной установки античита радует примерно никого, поэтому вы вряд ли удивитесь, узнав, что команда Vanguard и не рассчитывала на теплый прием в Лиге. Это комплексный продукт, работа над которым почти полностью скрыта от внешнего наблюдателя. Во многом это необходимо для эффективного противодействия читерам, которых хлебом не корми – дай куда-нибудь залезть. Но из-за своей закрытости система становится легкой мишенью для критики. Следующие разделы насыщены техническими деталями, но пусть вас это не пугает – вместе прорвемся.

Блокировка уязвимых драйверов

Задача Vanguard – не устраивать тотальную слежку за пользователем, а убеждаться в том, что существующие системы безопасности ОС работают штатно. Благодаря огораживанию ядра Windows мы можем требовать меньше информации от ОС, поскольку знаем, что ее "родные" механизмы защиты не скомпрометированы. 

Это огораживание не требует подключения к сети; драйверный компонент античита запускается одновременно с операционной системой, блокируя для остальных драйверов доступ к ядру. Если бы они загружались раньше, то могли бы скрыть свое присутствие. Vanguard не участвует в этой гонке, а выполняет роль судьи, следя за тем, чтобы до запуска игры не случилось ничего подозрительного. 

Вот что блокирует Vanguard:

  1. Уязвимые драйверы, которые можно использовать для повышения привилегий и выполнения своего кода на уровне ядра. 

  2. Относительно старые драйверы с сертификатами, подписи которых не имеют временных меток.

  3. Драйверы, созданные специально для жульничества. Они подписываются разработчиками читов, которые маскируются под добросовестных производителей ПО.

Самый распространенный – второй случай. Многие из старых сертификатов украдены читерами, поэтому за ними нужно следить особенно пристально. Чаще всего проблема решается загрузкой новой версии затронутого драйвера, но порой ее просто не существует, так как разработчики давно прекратили поддержку. И даже если бы поддержка возобновилась, просто так отозвать подпись нельзя: обычные пользователи не смогут запускать это ПО. Поэтому Vanguard блокирует драйверы с просроченными сертификатами. Если вы хотите этому помешать, то можете удалить Vanguard, но тогда вы не сможете зайти в игру.

Проблемы с загрузкой ОС

После недавнего глобального сбоя, вызывавшего циклическую перезагрузку Windows, недоверие к драйверам ядра только усилилось. К счастью, из-за других принципов работы и дополнительных мер предосторожности такой сценарий с Vanguard практически исключен.

Другой принцип загрузки

Компоненты защиты от вредоносных программ, сертифицированные Microsoft, могут загружать свои драйверы на начальном этапе загрузки ОС (это называется ELAM), а не на системном, как Vanguard (да, это еще один уровень загрузочной гонки, о которой мы упоминали выше). Более того, после запуска многие из них динамически подгружают конфигурационные данные с удаленных серверов – без необходимости заново собирать и сертифицировать драйвер. Такой подход значительно ускоряет реагирование на угрозы, но поскольку во время инициализации доступа к сети нет, в случае установки несовместимого обновления откатить изменения не получится – ошибка в ОС возникает до того, как появляется возможность загрузить исправленные файлы конфигурации. Мы решили не идти на такой риск, поэтому Vanguard работает по-другому.

Статический код

Драйвер Vanguard (VGK.sys) не выполняет никаких динамических операций во время запуска – его код полностью статичен. Клиентский компонент (VGC.exe) удаленно вызывает функции драйвера, только когда вы активно играете в игру. Мы не храним конфигурационные данные локально – при каждом запуске драйвера они загружаются заново. В случае обнаружения критической ошибки мы просто перестанем рассылать проблемную конфигурацию, и после перезагрузки компьютера драйвер вернется в пассивное состояние. Сам драйверный компонент Vanguard не подключается к сети, но клиент должен соединиться с платформой, прежде чем начнет делать что-либо, помимо блокировки уязвимых драйверов.

Простые предохранители

Некоторые предприимчивые юные инженеры уже разбирали эту систему, но повторимся: у драйвера Vanguard есть своего рода стоп-кран в виде файла vgkbootstatus.dat. В момент своего запуска античит проверяет статус этого файла, и если там написано "запущен", драйвер безопасно завершает работу. В противном случае он устанавливает статус "запускается", а после успешного выполнения подготовительных процедур меняет его на "запущен". Если во время выполнения VGK.sys возникнет ошибка, статус так и останется "запускается", а драйвер не запустится снова до обновления (с помощью открытия игры Riot или ручной переустановки Vanguard).

Особенности Vanguard для Лиги

Vanguard в Лиге работает не так, как в VALORANT. Главное отличие заключается в том, что сессия античита создается во время запуска клиента, а не матча. Это довольно нестандартный подход, и он сопряжен с проблемой, которая на первый взгляд может показаться незначительной: игроки зачастую оставляют клиент работать на фоне. Это значит, что 1) компьютер может уйти в сон, когда сессия активна; 2) создание новой сессии обычно приводит к закрытию текущей (например, когда у вас уже открыт клиент дома, а вы запускаете Лигу на работе).

К сожалению, Vanguard для Лиги не умел разрешать подобные конфликты. Поскольку у каждой учетной записи должно быть не более одной активной сессии Vanguard, античит мог перестать работать прямо во время игры – например, если вы заходили в клиент с другого компьютера. В таком случае вас выкидывало с сервера. Сессия могла закрыться и во время поиска матча – и вы не узнавали об этом до самого начала игры. Поскольку играть без античита нельзя, все заканчивалось печально: пересозданием и потерей LP.

Признаем, что тут мы облажались. Впрочем, мы оперативно скорректировали логику повторной аутентификации, а для пущей надежности добавили в систему подбора игроков проверку на наличие сессии. Если снова прибегать к кулинарным метафорам, можно сравнить эту ситуацию со спагетти. И хотя для Riot это блюдо фирменное, мы вовсе не хотим заставлять вас им давиться.

И еще кое-что...

Напоследок я хочу рассказать еще о трех проблемах, с которыми сталкиваются игроки. Надеюсь, гугл хорошо проиндексирует эту статью, и она не затеряется в результатах поиска. На всякий случай напомню: если вам нужна помощь, лучше сразу пишите в службу поддержки.

Задержка ввода и падение частоты кадров

Некоторые сторонние приложения (моды, оверлеи и инструменты для мониторинга, работающие на фоне) пытаются беспардонно вклиниваться в работу клиента и перехватывать уведомления об определенных событиях. Поскольку Лига теперь защищена системой Vanguard, у них ничего не получается. Так и должно быть – внешние вмешательства нам не нужны. Тем не менее разные приложения обрабатывают такие ошибки по-разному: одни их просто игнорируют, а другие начинают раз за разом пробовать снова без какой-либо задержки – и мы практически не можем им помешать. Если вы знаете приложение, которое так действует, и у него нет встроенного механизма исключений, можете самостоятельно запретить ему взаимодействовать с процессом LoL.exe, воспользовавшись этим чит-кодом.

Включение TPM 2.0

Для работы Vanguard на Windows 11 требуется TPM 2.0, но из-за того, что у разных производителей соответствующий параметр в BIOS может называться по-разному, у некоторых игроков возникают проблемы с его включением. Более того, нам известно два случая, когда во время активации TPM игрокам предлагалось переключиться в режим UEFI – несмотря на то, что Windows установлена на диск со структурой разделов MBR. К сожалению, UEFI работает только со структурой GPT – с MBR система просто не загрузится. Эта проблема должна решаться еще на этапе установки Windows 11 (TPM 2.0 – обязательное требование), но Vanguard проводит дополнительную проверку, так как некоторые пользователи обходят оригинальные ограничения операционной системы.


Если вам нужно включить TPM 2.0 для какого-либо античита, но вы используете структуру разделов MBR и не хотите терять данные, попробуйте эту утилиту от Microsoft. Она может конвертировать ваш диск в GPT без необходимости форматирования.

Проблемы с "железом"

Разработка драйверов усложняется тем, что иногда OEM-производители или поставщики случайно выпускают проблемные прошивки, которые затрагивают определенный процент устройств. Мы стараемся быть на шаг впереди, проверяя все в лаборатории совместимости, но в некоторых ситуациях мы просто бессильны. Если вы используете процессор от Intel 13-го или 14-го поколения и периодически сталкиваетесь с "синим экраном", возможно, на вашем устройстве установлена устаревшая прошивка. Проблемы такого рода находятся в компетенции Intel.

Будущее античита для Лиги

Работа над античитами не прекращается никогда. Vanguard закрыл бреши в защите и повысил порог вхождения, но читеры постоянно ищут новые способы получить несправедливое преимущество. Далее я расскажу о наших планах на будущее.

Наращиваем мощь

Многие создатели читов уже сдались, но есть и те, кто не понимает намеков, – и мы с нетерпением ждем момента, когда сможем обрушить на них мощь более продвинутой системы Vanguard. Блокировки до этого были лишь аперитивом; на нашей кухне готовятся новые блюда, которые наверняка будут оценены по достоинству. Иногда читеры застревают на стадии отрицания, и каждая блокировка тушит очередную свечу на их канделябре надежды. Мы постепенно погружаем их во тьму, ибо только так они смогут достичь истинного просветления.

Vanguard "по запросу"

Рано или поздно наступит момент, когда мы сможем доверять защиту ядра Windows механизмам самой ОС, и необходимость в драйвере исчезнет. Это даст нам возможность запускать службы античита в момент открытия игрового клиента – если, конечно, пользователь включит соответствующие функции. Подробнее мы расскажем об этом в начале следующего года, а пока сформулируем так: если у вас Windows 11 и относительно свежее оборудование, вам больше не нужно будет терпеть значок Vanguard на панели задач (хотя мы и потратили немало сил на создание его логотипа).

Обнаружение бустинга

Под бустингом мы подразумеваем целенаправленную игру на учетных записях с низким рангом (или вместе с обладателями таких учетных записей) для повышения рейтинга. Наша команда не занималась этой проблемой с 2018 года, но теперь у нас есть технологии, которые позволят к ней вернуться. Большая часть усилий будет сосредоточена на обнаружении бустеров, играющих с клиентами на учетных записях со "слитым" MMR, – их будет ждать блокировка до конца сезона (слой 1). Игроки, которые часто встают в очередь вместе с такими бустерами, будут отправляться отдыхать на схожих условиях (слой 2). Если же игроку хватит глупости полностью передать учетную запись в руки бустера, он будет помечен как смурф с соответствующими последствиями (это тоже слой 1).

Работа над этой системой еще далека от завершения – мы планируем полноценно запустить ее следующим летом.

Mac x Vanguard (он же Vanguard 2)

Как я уже говорил в разделе про ботоводство, некоторые читеры для обхода Vanguard начали использовать виртуальные машины macOS. Разумеется, это не стало для нас неожиданностью. Мы рады объявить, что скоро на Mac появится смежный продукт – Embedded Vanguard (mVG). Благодаря уникальной среде macOS нам не нужно столь пристально следить за ядром ОС, поэтому вам не придется устанавливать ничего лишнего – система защиты будет встроена прямо в игровой клиент. Более того, мы уже используем mVG в консольной версии VALORANT и в Wild Rift.

Embedded Vanguard появится на macOS в конце года. Мы надеемся, что это станет последним гвоздем в крышку гроба ботоводов и тех двух разработчиков скриптов, которые сейчас кусают локти, осознавая, что впустую потратили три месяца, портируя читы на OSX. Но не стоит отчаиваться – разработчики на Swift сейчас весьма востребованы.

Заключение

Что ж, пора возвращаться на темную кухню и продолжать готовить античит-блюда. Не думайте, что мы вас бросаем: борьба с читерами, которые отказываются играть по правилам, не прекращается ни на секунду. Не каждое десятилетие выпадает шанс поработать сразу над четырьмя поколениями систем противодействия жульничеству, но я безмерно рад, что в этом отношении Лига теперь в числе лучших из лучших. Мне было очень приятно играть с вами, писать для вас и банить жуликов из ваших матчей.

P. S. Перечитал статью... Кажется, не стоило писать ее на голодный желудок.