Как стать автором
Обновить

Человек мухлюющий — читы в гейм-индустрии. Часть 1: Ландшафт читерства и методы борьбы с читами

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров4.7K
Всего голосов 13: ↑12 и ↓1+16
Комментарии27

Комментарии 27

Легенда - Наследие драконов. В игре два способа заработать, это сбор ресурсов на продажу и донат. На сбор очень быстро появились боты, которые собирали автоматически заданный ресурс, пока игрок спал. Нападения мобов бота-сборщика не останавливали. Одной из попыток защититься было добавление ресурсов за пределами карты, которые простой игрок в принципе видеть не должен. Кто это соберет, тот 100% бот и подлежит анальной карефеме

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

По поводу капч. В SAMP (San-Andreas Multiplayer) и в GTA V RP на работах со сбором лута тоже стали добавлять капчи, чтобы игроки не ставили ботов.
Также кроме капч используют мини игры - например на ловле рыбы игрок должен курсором следовать в противоположную рыбе сторону, на сборе апельсинов тыкать по апельсинам на кроне дерева

Когда-то давно я пробовал поиграть в GTA V мультиплейер. Целых 20 минут. Потом меня убил какой-то хрен выстрелив из гранатомета боингом. Да-да, здоровенным самолетом :). Тут я понял что GTA V мультиплейер не для меня

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

В GTA5 пользовался приемом (хаком это назвать можно с натяжкой): в диспетчере задач секунд на 5 замораживаешь процесс и все ливают из сессии и можно спокойно выполнять миссии.

Не буду сейчас показывать пальцем в чью-то сторону, но мне понравился подход, который я наблюдал в одной корейской игре. Чем запрещать и отлавливать, зачастую лучше разрешить легально. Боты, которые выполняют сбор/обработку? Пожалуйста, наймите очень занедорого обычных внутриигровых денег. Автоматическое применение зелий? Каждый может получить таким-то образом. Бесконечные зелья здоровья и маны? Изготавливаются терпеливым сбором таких-то составляющих или покупаются у более терпеливых игроков.

Когда вылезают читеры, это повод подумать в двух направлениях. Одно - как их выявлять и пресекать, второе - а нет ли у игроков такой потребности, которую мы могли бы удовлетворить вместо создателей читов?

Данную корейскую игру не пробовал, но на первый взгляд звучит странновато:

Боты, которые выполняют сбор/обработку? Пожалуйста, наймите очень занедорого обычных внутриигровых денег.

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

Автоматическое применение зелий? Каждый может получить таким-то образом.

Представьте стрелялку, где автоприцеливание и автохедшот, доступны всем игрокам. Игра в этом случае резко начинает терять смысл.

Бесконечные зелья здоровья и маны? Изготавливаются терпеливым сбором таких-то составляющих или покупаются у более терпеливых игроков.

Дык +/- это почти везде есть. Читеру-то хочется нахаляву и без скучного сбора составляющих.

например, чит может позволить нанять в параллель тысячу ботов, что наверняка по умолчанию запрещено. Или нанять тысячу по цене одного и т.д.

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

Представьте стрелялку, где автоприцеливание и автохедшот, доступны всем игрокам

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

+/- это почти везде есть.

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

Читеру-то хочется нахаляву и без скучного сбора составляющих.

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

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

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

Представьте стрелялку, где автоприцеливание и автохедшот, доступны всем игрокам. Игра в этом случае резко начинает терять смысл

Вы только что очень хорошо описали аимассист во многих популярных кроссплатформенных проектах. Особенно когда используется сторонние программы/оборудование для эмуляции геймпада на клавомыши

Спасибо, что на минутку вернули меня в мои 1980-е!

Я тогда работал в глуши на научной станции, и однажды иностранный коллега привез и подарил нам одну из самых первых персоналок - Compaq Portable.

До этого момента

мы обрабатывали данные на СМ-4, поэтому на станции было несколько программистов, а также "девушек" разного возраста, которые вручную вводили продиктованные по рации данные "в ЭВМ". Была даже отдельная должность начальника ВЦ, которую занимал Илья Т. - молодой, бородатый, веселый и немного пузатый заводила всяких экспериментов с компьютерами и не только. В частности, он успешно списывал в избытке поступавший к нам спирт на "промывку рабочих поверхностей диалогового устройства оператора ЭВМ". А чуть позже описываемых событий Илья очень серьезно поругался с замначальника экспедиции Борисом Георгиевичем Р., который был искренне возмущен и даже шокирован тем, что по ночам научные сотрудники тайно используют персоналки для работы с текстом своих статей вместо "серьезных расчетов", а Илья Т. это непотребное безобразие покрывает! Впрочем, это уже совсем другая история...

Так вот, зимой на станции скучно, и мы (программисты и "операторы" ЭВМ) сразу начали соревноваться - кто больше наберет очков в тетрис. Я тогда написал свою первую программу на MASM, причем сразу же резидентную. Она вставляла пустые циклы, тормозя и упрощая игру, что сразу же сделало меня первым тетрисологом на деревне. Правда, ненадолго (мне не хватило совести хранить свою программу в секрете дольше нескольких дней)...

А спустя почти сорок лет из Вашей статьи я, наконец, узнал, что это, оказывается, называлось Lag Switches 

;-)))

Lag Switches — это устройства или программные методы, используемые для создания искусственной задержки в игре. Основная идея заключается в том, чтобы временно прервать соединение с сервером, что приводит к "лагу" у всех остальных игроков, в то время как действия игрока с Lag Switch продолжают выполняться без задержки.

Не понял, как это? Соединение с сервером прерываю я, но "лаг" происходит у всех остальных игроков, кроме меня?

Scripting (Скрипты) — предполагает использование скриптов или автоматизированного кода для выполнения игровых действий с нечестным преимуществом. Примером такого читерства является AHK (Auto Hot Key) - Программа для создания макросов и скриптов, используемая в различных играх для автоматизации задач.

Если весь игровой челлендж состоит в том, что трудно раз за разом прокликивать одни и те же хитровыдуманные комбинации многочисленных кнопок, то чо бы и нет, и где тут читерство? Пару раз натыкался на видео про "скриптеров" в League of Legends, что ли - мне показалось, там под этим подразумевается нечто другое, типа мгновенной автоматической реакцией на определённое внутриигровое событие - да, реакция происходит путём нажатия кнопок, но это же не заскриптуешь на AHK.

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

Когда игрок активирует Lag Switch, его соединение с сервером временно прерывается. Пакеты данных от этого игрока перестают поступать на сервер.

Сервер не получает обновления от игрока с Lag Switch и не может синхронизировать его действия с другими игроками.

Для других игроков это выглядит как фриз или лаг, так как сервер ожидает данных от отсутствующего игрока.

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

По поводу AHK: В этом и заключается читерство: использование скриптов автоматизирует и оптимизирует действия, которые обычно требуют значительных навыков и реакции от игрока, что дает пользователю нечестное преимущество над другими игроками. Например, в League of Legends скрипты могут мгновенно реагировать на определенные события, автоматически уклоняться от атак или использовать способности, что дает игроку преимущество над теми, кто играет вручную. Использование скриптов нарушает правила игры и справедливую конкуренцию.

По поводу AHK: В этом и заключается читерство (...) Например, в League of Legends скрипты могут мгновенно реагировать на определенные события, автоматически уклоняться от атак

Как скрипт на AHK может прореагировать на событие в игре? AHK память других процессов может читать, экран анализировать, или что?

AHK может быть реализован разными способами:
1) Считывание экрана (Pixel Detection) - может отслеживать определенные цвета пикселей на экране, что позволяет определить, когда происходят те или иные события в игре.
2) Считывание информации из окна игры - в некоторых играх можно получить доступ к элементам управления окна и их атрибутам.
3) Эмуляция клавиш и мыши - AHK может эмулировать нажатия клавиш и движения мыши, что может быть использовано для выполнения действий в игре, таких как использование способностей или перемещение.

По поводу памяти других процессов:

AHK не предназначен для чтения памяти других процессов. Для чтения памяти используются специализированные программы и методы (например, через WinAPI)

Скажите честно: вы - ChatGPT? Это, если что, не упрёк. Слава роботам!

Пожалуйста не пытайтесь объяснять вещи, в которых не разбираетесь )
В традиционной модели клиент-сервер с выделенным сервером, тот никогда не ждёт ответов от игрока, на нём всё продолжает идти как было и другие игроки ничего не заметят. Lag-Switch в первую очередь характерен для игр, где нет выделенного сервера и в его роли выступает один из игроков. Второй вариант - если логика игры по какой-либо причине доверяет выполнение какой-то логики на клиенте, LagSwitch становится одним из методов абьюза и выполнения действий, которые сервер в нормальных условиях бы не позволил.

Не понял, как это? Соединение с сервером прерываю я, но "лаг" происходит у всех остальных игроков, кроме меня?

Да, сервер думает, что вы бежит вперёд. Нажимается лагсвитч, пакеты на сервер перестают идти/идет минимальное количество. Подбирается индивидуально под игру. Так как новых данных о вашем местоположении нет, то для других игроков вы стоите на месте/бежите по прямой. Входящее соединение у вас работает нормально, поэтому у вас все действия игроков отображаются нормально. Также нормально отображаются и ваши действия, так как игра все честно шлёт на сервер и не знает, что ей зажали исходящий канал. Вы стреляете по другому игроку, ваш клиент говорит, что вы попали и убили, лагсвитч отпускает исходящий канал, на сервер уходят все данные. Сервер думает, что просто пролагал коннект, регистрирует ваше новое местоположение и убийство другого игрока. Для него вы появляетесь из воздуха одновременно с его смертью. Это для него выглядит как лаг. А у вас на экране все это время все было хорошо

Типа, я затаился за углом, нажал лагсвитч, и у меня есть пара секунд (или сколько там), чтобы выскочить из-за угла, осмотреться и, может, кого-то пристрелить, как бы оставаясь невидимым и неуязвимым?

Я, наверное, чего-то не понимаю, потому что многопользовательских игр не писал, но выглядит, скорее, не как чит, а как у*бищно реализованная клиент-серверная архитектура. Что мешает реализовать это в стиле "вот где залагало - там и стой, ничего не делая"?

Смотрите, как работает lag switch

  1. Создание задержки:
    Лаг-свитч физически или программно временно прерывает или замедляет интернет-соединение. Это может быть сделано путем разрыва соединения Ethernet-кабеля, использования программного обеспечения для ограничения пропускной способности или создания временного отключения сети.

    Когда соединение восстановится, все действия, выполненные игроком во время "лаг-фазы", отправляются на сервер одновременно.

  2. Поведение в игре:

    • На стороне клиента: Игрок может двигаться и выполнять действия (например, перемещаться, стрелять), но эти действия не отправляются на сервер до восстановления соединения.

    • На стороне сервера: Игрок остается на месте или выполняет последнее действие до начала лаг-фазы. Другие игроки видят его неподвижным или продолжающим выполнять предыдущую команду.

По поводу плохой клиенто-серверной архитектуры

  1. Архитектура клиент-сервер:

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

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

  2. Управление лагом:

    • Серверы обычно допускают небольшие временные задержки для сглаживания сети (jitter). Это позволяет игрокам с нестабильным соединением продолжать игру без постоянных разрывов.

    • В результате лаг-свитч может эксплуатировать это допущение, чтобы манипулировать игровым процессом.

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

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

Я понимаю необходимость в какой-то минимальной буферизации ввода - в неидеальном мире живём, но вот реально надо растягивать временной отрезок этой буферизации настолько, чтобы успеть за него сделать что-то осмысленное?

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

с учетом достаточно дурного движка - вопли в чате и на форумах стояли достаточно громкие.

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

Я, похоже, таки недопонял ваших объяснений.

Вы стреляете по другому игроку, ваш клиент говорит, что вы попали и убили

Это, в смысле, любую инфу, получаемую с любого клиента, сервер просто берёт и некритически воспринимает, применяя к игровому миру? Но тогда ж без всяких "лагсвитчей" должна получиться читерская помойка, что помешает просто отправить исходящий пакет "убить игрока такого-то", пофиг, что между нами три километра, гора и стена.

Возможно, что-то подобное я наблюдал в игре DayZ, ещё когда она была модом к игре Arma 2. Собственно, в плане мультиплеера по интернету именно читерской помойкой оно и было: заходил читер и, например, валил всех игроков на сервере, пофиг кто где, мог наколдовать себе любое оружие, вызвать ядерный удар, телепортироваться в любую точку карты или телепортировать любого другого игрока в любую точку карты - самый смак, насколько я понял, был в том, чтобы телепортировать кого-то далеко-далеко в океан, где было даже никак не убиться, а только несколько часов реального времени помирать, не помню, то ли от жажды, то ли от переохлаждения.

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

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

Ну и да, как правило, читеров в проектах, страдающих от лагсвитча, тоже много

В Escape from Tarkov проблема с читерами стоит особенно остро, из-за того что геймплей подразумевает потерю всего взятого с собой и найденного в рейде лута.

Из-за читеров невозможно играть на целых локациях (лаборатория), где очень много редкого и ценного лута.

Разработчики пытаются с этим бороться различными способами, и что бы не говорили, это заметно, но полностью победить их не возможно.

И к сожалению иногда кажется что БСГ (разработчик) борется с ними только когда особенно сильно припекает у игроков.

Предполагаю это как-то связано с оплатой тарифа в Battleye.

Очень жаль... читеры раковая опухоль... они убивают игры.

Хотелось бы пояснений про Джона Кармака, статический анализ кода и статистический анализанализ действий игрока.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий