Большинство крупных многопользовательских игр рано или поздно сталкиваются с тем, что не все пользователи играют честно. В нашем шутере Warface в какой-то момент это стало ощущаться особенно сильно. Для борьбы с читерами мы используем целый комплекс решений. Одним из компонентов этого комплекса является наша внутренняя разработка под названием MRAC (Mail.Ru AntiCheat). После ее внедрения мы добились хороших результатов: среднее количество ежедневно улетающих в бан читерских аккаунтов упало с 17000 в начале года до 1500 сейчас, при том, что количество жалоб от пользователей на читеров существенно уменьшилось. На выявление подозрительной активности и блокировку аккаунта сейчас уходит примерно 5 минут, вместо прежних 20. Сейчас система распознает и реагирует на более чем 200 сигнатур читерского ПО и постоянно совершенствуется.

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

Краткая предыстория


Думаю, многие знают, что такое «IDDQD». На протяжении всей истории компьютерных игр разработчики встраивают в свои детища подобные коды, именуемые читами. Читы позволяют становиться бессмертным, получать бесконечные патроны, ресурсы и прочее. Первичное назначение таких кодов – тестирование игры. Помимо встроенных в игру читов всегда были любители самостоятельно подправить что-нибудь в игре с той же целью – стать «бессмертным». Все это хорошо в однопользовательских играх, когда человек играет со своим компьютером и никому не мешает. В многопользовательских онлайн-играх читерство уже является проблемой, способной загубить всю игру. Если один играет не по правилам, то его соперникам играть становится просто неинтересно. Причем, если в шутере это просто испорченный матч, то в RPG нарушение игровой механики или ботоводство способно перекосить всю внутриигровую экономику.

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

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

Мотивы читеров/ботоводов:
  1. «Надрать всем зад» для самоутверждения. Пусть и нечестно.
  2. Заработать денег. Для этого нужно быстрее прокачаться, собрать ресурсы, шмотки и т.п., чтобы потом продать это за реальные деньги.

Основной мотив авторов читов/ботов — заработать денег. Наиболее качественные читы/боты продаются по подписке за реальные деньги. Есть и бесплатные читы, но они обычно начинены adware и всякими полу-вирусами, что опять же, призвано принести деньги.

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

Разновидности читов


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

ESP (Extrasensory perception) – разновидность читов, способных показывать дополнительную информацию о противниках в игре. К сожалению, клиент игры знает о расположении всех противников в определенном радиусе от вас, даже если они за стеной и их не видно. В шутере действия развиваются довольно быстро и если клиент будет получать от сервера информацию о противнике только когда он попал в поле видимости, то это заведомо приведет к лагам из-за сетевых задержек. Чит получает информацию о противниках через внутренние интерфейсы классов клиента и выводит ее прямо поверх игрового изображения. Это, как минимум, расположение противника в пространстве и расстояние до него. Для отрисовки поверх игрового изображения чит перехватывает один из методов Direct3D, вызывающихся каждый кадр. Например, EndScene. Все это подразумевает, что в память клиента был внедрен код чита, необходимый для отрисовки.

Aimbot – разновидность читов для автоматического прицеливания. Вам остается только бегать и спускать курок, а прицел сам по себе попадает на ближайшего противника. Можно даже выбрать часть тела, в которую нужно целиться. Расположение противника в пространстве чит получает также через внутренние классы клиента. Далее для выполнения автоматической наводки возможны варианты. Либо чит напрямую вызывает нужные методы в клиенте для поворота вашего персонажа (прицел всегда в центре вашего взгляда). Либо посылает клиенту сообщения от имени мыши для этой же цели.

Autoshot – автоматический выстрел в тот момент, когда противник оказывается в прицеле. Такой чит работает аналогично aimbot’у — информацию о расположении противника получает через внутренние классы клиента и посылает сообщение от мыши для выстрела. Часто autoshot и aimbot совмещают вместе. Тогда вам остается просто бегать, а прицеливание и стрельба выполняются читом автоматически.

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

Безусловно, это не полный список существующих читов, но уже можно составить перечень механизмов их работы:
  1. Модификация кода клиента игры в памяти.
  2. Модификация переменных клиента игры в памяти.
  3. Вызов методов внутренних классов клиента напрямую.
  4. Отправка сообщений от имени мыши.

Методы борьбы


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

Первым наиболее действенным способом представляется валидация на сервере действий игрока. Например, если игрок каким-то образом за единицу времени переместился в пространстве дальше, чем позволяет игровая механика, то наверняка это читер (speedhack), и его нужно немедленно кикнуть. Такая валидация перемещений игрока возможна, так как в конечном счете сервер контролирует расположение игроков на карте.

Вторым способом представляется статистический анализ на сервере. Например, если все пули игрока постоянно попадают в голову врагов, то это очень подозрительно. Или не в голову, а просто без промахов. Или, скажем, результаты игрока по итогам матча сильно выбиваются из среднестатистических. Конечно, все это еще не повод для блокировки аккаунта данного игрока. Может быть он действительно очень крут. Однако это может использоваться как триггер для пристальной проверки действий игрока группой техподдержки игры. При этом надо понимать, что умный читер, скорее всего, не будет «палиться» и под проверку не попадет.

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

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

Навесная защита


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

Защитить весь код никак нельзя. Обфусцированный код работает в разы медленнее, так как его становится в разы больше. Защищать получается только небольшие участки кода, не критичные к производительности. Например, можно как раз защитить проверку контрольной суммы всего кода. Разумеется, никакая защита кода не является панацеей. Она может лишь усложнить задачу для злоумышленника. Цель в данном случае – сделать так, чтобы стоимость взлома была выше, чем ожидаемая выгода.

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

Допустим, от модификации кода и важных переменных клиента мы худо-бедно защитились. Но остаются читы, которым для работы не нужно модифицировать ни код, ни переменные. Например, ESP. По сути, чит берет информацию из памяти клиента и отображает ее. Но для такой функциональности в памяти клиента должен присутствовать код чита. За это уже можно зацепиться и пойти следующими путями:
  1. Не дать читу попасть в память клиента.
  2. Попытаться найти чит в памяти клиента.

Первый путь подразумевает запрет на запись в память процесса (WriteProcessMemory) и запрет на создание удаленных потоков (CreateRemoteThread). Обычный способ инжекта своего модуля в процесс как раз требует записать в память и создать свой поток в этом процессе. Учитывая, что чит имеет возможность работать с привилегиями администратора (читер всегда даст их), то в Windows никак нельзя запретить писать в память и создавать потоки в чужих процессах. Можно подумать в сторону создания своего драйвера, который будет блокировать доступ к процессу клиента игры. Но в ядре Windows нет документированных способов фильтровать запись в память чужих процессов (NtWriteVirtualMemory), а использование недокументированных способов сильно усложняется наличием Kernel Patch Protection. Даже если удастся заблокировать запись в свою память, то всегда будут другие дырки: можно внедрить свой код в системные библиотеки на диске.

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

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

Есть еще третий путь: попробовать найти следы перехвата читом функций Direct3D и считать это угрозой. Чит перехватывает функции D3D для получения управления и отрисовки нужной информации каждый кадр. Но у такого варианта есть существенные проблемы. Есть немало «хорошего» софта, который делает то же самое: перехватывает те же функции D3D для отрисовки своей информации поверх игрового изображения. Например, RaidCall. А задача «отличить хороший софт от плохого» является в общем случае нерешаемой.

Разумеется, весь этот поиск читов и блокировку их внедрения можно отключить путем модификации кода, который за это отвечает. Тут единственный выход — использовать защиту кода. Но как код ни защищай, рано или поздно все-равно сломают. Понятно, что пока приложение работает на компьютере пользователя, ничто не может помешать пользователю изменить данное приложение. Это вопрос лишь времени и оправданности затрат.

Заключение


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

Комментарии (96)


  1. Invision70
    05.10.2015 17:29
    +43

    Как избавиться от разновидностей чита «Амиго»?


    1. TIgorA
      05.10.2015 18:25
      +3

      Внести издателя в AppLocker


    1. 6a6ypek
      05.10.2015 23:04
      +7

      Расстрелять читеров со «Спутника».


  1. SexTools
    05.10.2015 17:34

    А с макроснёй что делаете?


  1. noonesshadow
    05.10.2015 17:43
    +4

    Просто признать, что «читы» — часть правил игры, и учитывать их при ГД.
    У кого-то есть время на фарм, у кого-то есть ресурс для автофарма, почему одно хорошо а другое плохо?
    Если игра радует каждую минуту, никакого автофарма в ней не будет.


    1. jrip
      06.10.2015 12:55
      +1

      Фиг с ним с фармом. Но не у всех есть ненужные N лет жизни, чтобы прокачать руку до состояния Aimbot+Autoshot+Recoil :)


      1. SexTools
        06.10.2015 14:48
        -1

        Корейцы могут с этим поспорить. Да и профессиональные пользователи огнестрельного оружия думаю тоже.


      1. alterpub
        07.10.2015 16:53
        +1

        Ок, ты играешь в шутер, в нем весь кайф быть быстрее и точнее другого игрока за счет собственных скиллов, если ты играешь с aimbot, то какой смысл тебе в этом участвовать? Я вот искренне не понимаю читеров, в подобных играх, я не вижу тут ничего кроме как самоутверждения, но блин самоутверждаться в шутере… ради чего, если тебе не 13 лет?


        1. Wedmer
          07.10.2015 17:13

          Некоторые вылавливают лулзы с реакции других на читы.


          1. alterpub
            07.10.2015 17:25

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


            1. Wedmer
              07.10.2015 17:34

              На пираточке особо не банят.


            1. SexTools
              07.10.2015 17:55

              Особенно, когда не банят, потому что читов нет.


        1. jrip
          07.10.2015 17:47

          Хз в чем кайф, я такое ни разу не ставил. Человек выше просто предложил сделать читы частью игры.


  1. galk_in
    05.10.2015 17:47
    +5

    ботоводство способно перекосить всю внутриигровую экономику

    Значит экономика сделана не правильно.


    1. SexTools
      05.10.2015 17:54
      +1

      Экономика может быть плановой, а может быть рыночной. Вот последняя была в другой игре Mail.RU на старте и там целый год 80% игрового населения составляли боты. Зато цены на расходники выросли на полтора порядка.


    1. MrGobus
      05.10.2015 19:20
      +4

      Не дай бог вам поиграть в игру с «правильной» экономикой =) И таки да, сегодня есть методы борьбы с ботами и т.п. за счет игровой механики. К сожалению подобные методы сводят геймплей к донатному рабству. Первый способ борьбы с ботами это очки работы, благодаря их затратам бот не сможет постоянно собирать ресурсы, добавляем затрату очков работы на определение лута и фарм предметов сводим на нет, и все было бы хорошо, если бы не возможность донатом получить ОР, так как получается, что игрок платит за право использовать выбитый лут (вы готовы биться с боссом чтобы заплатить реал за выбитые рары???). Подобная механика используется в игру Archeage. Кстати это еще не предел, в ближайшее время выходит BlackDesert, закрытое ОБТ для донатеров кстати уже стартовало. В БД для борьбы с нарушениями в экономике сделали фиксированный аукцион, то есть, вы можете продавать что-то только в определенном ценовом диапазоне. Предполагается, что это защитит рынок от торговли золотом не позволяя продать банку зелья здоровья за 1000000000000 денег, но спросите себя, экономика ли это ??? Признаться честно я жду недождусь поглядеть на коммунизм в действии, так как играть ради чего то иного в БД видимо не получится (ставлю на то, что единственное что будет доступно в игре — это возможность донатить).

      P.S. С трепетом в сердце вспоминаю рынки в Lineage и Ragnarok Online, споры, разговоры, беготню и торговлю, вот это блин экономика, вот это блин геймплей =)


      1. ruikarikun
        05.10.2015 19:27

        >>> закрытое открытое бета тестирование для донатеров
        Это как?


        1. Alexey2005
          05.10.2015 22:57
          +2

          Обыкновенно — путём распродажи наборов раннего доступа, владельцы которых могут войти на сервера раньше прочих. В современном мире MMO это весьма распространённая практика.
          Считается, что такой подход позволяет избежать многочасовых очередей в момент запуска, т.к. по количеству купленных наборов можно оценить ожидаемую нагрузку на сервера и, если желающих набирается слишком много, продажу наборов приостанавливают.
          Хотя в случае с ArcheAge это не помогло — наборов продали столько, что очередь на 8 часов ожидания ещё считалась вполне приемлемой, а игроки учились пользоваться удалённым доступом к компьютеру, чтоб контролировать процесс стояния в очередях со смартфонов.
          П.С.: Тут гораздо интереснее другое — в Black Desert игрокам обещают ещё и p2p-сервер, но при этом сразу оговариваются, что он хоть и p2p, но тоже с донатом. Чем же тогда их p2p отличается от f2p, игроки гадают до сих пор.


      1. Wedmer
        05.10.2015 22:23
        +1

        Во второй линейке еще был когда то в древние хроники один классный способ заработать: Завести мобов на рынок.


      1. henryjamesmoodyjunior
        06.10.2015 12:04
        -1

        И трава была забористее зеленее

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

        По делу:
        Согласен с noonesshadow
        Читы были есть и будут. Хоть в виртуальной машине запускай игру. Все, что сделано человеком, может быть взломано другим человеком.


        1. Nidere
          06.10.2015 17:32

          Читы были есть и будут.

          Облачный гейминг всех спасёт.


          1. Wedmer
            06.10.2015 17:35
            +1

            Считать все действия персонажа на сервере — непременимо для 3д шутеров. Нужен будет суперпупер канал. Хотя через Onlive хрен почитеришь) Но он все равно подох.


            1. Nidere
              06.10.2015 17:46

              Считать действия персонажа не стоит ровным счётом ничего по сравнению с обсчётом графики, которую игроку нужно будет потоковым видео транслировать.
              Тем не менее, onLive работал вполне себе удобоваримо, а лет через 10-20 это будет уже нормой.


              1. Wedmer
                06.10.2015 18:01
                +2

                Я имел в виду также и рендер. Уже писалось, что клиент вынужден знать о местоположении игроков. Иначе лаги будут более серьёзными. Вся фишка была в том, что сервер много не кушает, и их на одной машине можно много держать, а задержка для игроков будет минимальна. Если клиент не будет знать о местоположении всех игроков, то весь рендер надо уводить на сервер и отдавать потоком.
                А теперь представьте, какая ферма нужна, чтобы рендерить картинку для 30 игроков. А еще подумайте, на счет людей с разным расстоянием до сервера. Можно конечно придумать крутую систему скипа фреймов, фиксированных задержек, но все равно у имеющих меньшее время отклика до сервера будет больше преимуществ в игре.


                1. michael_vostrikov
                  06.10.2015 19:03

                  Не специалист в 3D графике, но мне кажется, можно сделать так. На сервере делать не весь рендер, а только базовый просчет — чтобы z-буфер заполнить. То есть по сути одноцветные стены без текстур и прочего. Игрок — контур из нескольких точек. Если хотя бы одна точка проецируется на камеру другого игрока, значит первого игрока видно из-за стены. Только после этого на клиент второго отправляются координаты первого. Нормальный рендер производится на клиенте, как обычно.


                  1. Wedmer
                    06.10.2015 19:10
                    +1

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


                  1. MrGobus
                    10.10.2015 11:57

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


                1. rPman
                  07.10.2015 22:33

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

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


                  1. Wedmer
                    08.10.2015 02:00

                    Можно то все, но, в основном, только в теории. На практике слишком много камней на поле.


              1. wint64
                07.10.2015 01:02
                +1

                Даже если через 20 лет будет нормально работать шутер по стримингу, то никто не отменит аимбот и автошот с распознаванием образов на экране клиента.


                1. SexTools
                  07.10.2015 09:53

                  Через 20 лет можно уже будет отвязать управление положением оружия от направления взгляда, вплоть до выравнивания прицела по мушке или стволу. Так что это будет уже совсем другая математика.


  1. Lerk
    05.10.2015 18:21
    +7

    Говорить про читы в онлайн играх и забыть про пакетный уровень?) Ребята, вам слова Lineage 2, L2Walker, WPF о чем-нибудь говорят?))


    1. ruikarikun
      05.10.2015 19:26
      +4

      Тссссс!


    1. ice2heart
      06.10.2015 08:19
      +1

      openkore ещё вспоминается. Неплохой фарама-бот.


    1. hMartin
      06.10.2015 14:00
      +1

      Да, славные были времена. Застал разработку WPF by Sauron под ла2 и RFO. И было же у создателей подобного софта столько времени на дебаг, чтобы разобрать назначение каждого пакета и какие байты за что отвечают :)
      Кстати, в наше время все гораздо лучше, каждая вторая разработка имеет механизмы шифрации трафика.


  1. SystemXFiles
    05.10.2015 19:42
    +9

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

    У меня был опыт (прошу сильно не бить, это именно хобби было, сам играю очень редко, интересен именно процесс взлома) в разработке TriggerBot, AimBot, радара (видно кто где как на обычном радаре. но всегда) внешних.

    Для посыла действий использовалось обычное внешнее winapi с командами для клавиатуры и мыши. Так же может работать ESP и WH, который просто рендерит прям поверх окна игры, не внедряясь в процесс. Такие читы сложнее всего ловить.

    Лично у меня были попытки в ring0 шаманскими способами залезть, дабы получать доступ к процессу непосредственно, а еще к командам клавиатуры и мыши. Жаль не вышло тогда, сейчас с большим опытом может и выйдет, но интереса как такового нет.

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

    Как правило на слабых компах это приводило к заметным тормозам во всей системе, а порой к почти полному зависанию. Зато на мощных отрабатывал отлично.

    Вот интересно ваше мнение, какая защита тут поможет?


    1. pwl
      05.10.2015 21:42

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


      1. SystemXFiles
        06.10.2015 07:14
        +2

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

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


      1. monah_tuk
        06.10.2015 08:04
        +1

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


    1. xSomeonEx
      06.10.2015 12:12

      У 4game вроде как стоят собственные хуки на всякие GetPixelColor, ReadProcessMemory и тд, и они решают, что выдавать выдавать в результате. Хотя может быть я ошибаюсь.


      1. SystemXFiles
        06.10.2015 14:39

        Все возможно, но их я не ломал =)) Ломал Source движки с VAC (без обходов, ибо в сам процесс не лез) и CrossFire от Mail с X-Trap (обход анти-чита реверснул с канадских готовых читов). В CF уже внедрялся в сам процесс.


    1. wint64
      07.10.2015 01:21

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


  1. dtestyk
    05.10.2015 20:45

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


    1. wint64
      06.10.2015 11:50

      Даже если придумать, что сервер будет делать с этим хешом, то читеры изменят клиент так, чтобы он всегда отправлял «правильный» хеш. Или будут заменять хеш на «правильный» в сетевом стеке, без модификации клиента.


      1. SystemXFiles
        06.10.2015 14:41

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


  1. Rel1cto
    05.10.2015 20:47

    Подскажите, пожалуйста, как опытные борцы с читами.

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

    Мне попалось на глаза весьма интересное видео работы чита. Он (помимо всего прочего) рисует из глаз противника лучи, то есть показывает, куда в данный момент направлен взгляд врага.
    Так вот эти лучи рисуются не совсем «поверх» экрана (как в скриншоте в статье), а учитывают геометрию уровня. То есть соответствующие их куски закрывают деревья, стены, и прочие непрозрачные объекты. Если враг, скажем, стоит за стеной и ждёт, когда вы на него выйдете, то луч отрисовывается от начала стены — точки, где вы его бы увидели, будь он материальным игровым объектом.

    Насколько, на ваш взгляд, реально читоделу «со стороны» так разобраться в рендере игры, чтобы учитывать геометрию уровня и рисовать с её учётом, без помощи со стороны разработчиков?


    1. Sap_ru
      05.10.2015 21:50

      Если игра построена на готов модульном движке и/или внтури заскриптована на какой-либо модульном динамическом языке, и/или утекли исходники, то такое делается относительно не сложно. Некоторые современные wall-hack сложнее этого эффекта.


    1. aml
      06.10.2015 00:47
      +3

      Это элементарная задача. Если это Open GL, то перехватывается вызов функций glDraw* (или ещё каких-нибудь, которые вызываются в главном цикле рендера), и подсовывается ещё один вызов «нарисовать линию». Закрывание объектов друг другом делается на уровне буфера глубины (обычно это работа 3D-ускорителя), и просто отдать команду на рисование линии достаточно, чтобы получить эффект, который вы описываете. Если это DirectX, то тоже что-то аналогичное должно быть (я с ним никогда не работал).


    1. wint64
      06.10.2015 11:55
      +1

      Такое делается через API движка игры. При наличии доступа к SDK движка, это не сложно.


      1. henryjamesmoodyjunior
        06.10.2015 12:12

        Еще как вариант можно изменить модель игрока…


      1. Rel1cto
        06.10.2015 13:35

        Движок у них самописный.


        1. Krypt
          06.10.2015 22:36

          Если вы тонко намекаете на WoT (и луч из дула) — это модифицированная модель танка. Изменены только ресурсы игры и не более.


          1. Rel1cto
            07.10.2015 00:43

            Нет, я про вот это: rutube.ru/video/1d65a9e0e51a3e316363eff8a3500a75
            Начиная с 00:51 как раз начинаются лучи.


        1. wint64
          07.10.2015 00:45

          Ну тут я могу только гадать — у движка были внешние скрипты или движок разреверсили или утекло или теория заговора с читоделами.


  1. zencd
    05.10.2015 21:06
    +6

    Идея введения «оплаты» для free2play-игр, где страха лишиться аккаунта меньше… Сперва ты играешь на сервере-отстойнике с другими такими же «непроверенными» типами; т.е. это нормальные сервера, за единственным исключением — доля читеров там заведомо больше. Присмотревшись, кладешь/ложишь на счет рублей 500 и становишься уже полноценным участником — играешь с такими же, с теми кто вложил деньги. Средства можно тратить на шмотки, а то что не истратил — можешь в любой момент вернуть (вернувшись, конечно, на сервера начального уровня).

    Вроде бы щадяще. Да и уже заведенные в систему деньги легче истратить (:

    За статью спасибо, интересная тема, хотя можно и полнее осветить. Может в будущем.


  1. Kop3t3
    05.10.2015 21:08

    ботоводство способно перекосить всю внутриигровую экономику

    А как Вы объясните введение официального бота в одну из своих игр? (хотя в ней и до этого присутствовали элементы а-ля сверни и занимайся своими делами)


    1. AlmazDelDiablo
      05.10.2015 23:19
      +1

      По-моему, это нередкая практика. В той же Lineage 2 на корейском оффе был разрешён бот и поставлялся вместе с клиентом игры. ИМХО, если игра работает по подписочной модели, то это крайне правильное решение: человек платит тебе и имеет право получать удовольствие от самого сока игры, а не бесконечного фарма мобов.

      Да и важно понимать, что в ММО, где имеется свободное ПВП, качаться на боте всегда не получится, это лишь сгладит скуку на начальных уровнях, если тебе нужно прокачать себе доп. персонажа (новички в любом случае вынуждены качаться вручную, просто чтобы влиться в игру). Скажем так, баланс между какой-то сюжетной и познавательной частью игры для новичков, и местом баталий, драм, самоутверждения и/или заработка денег для опытных.

      PS: про игры от Мейла ничего не знаю, и о какой именно мы сейчас упоминали — я не в курсе.


      1. Wedmer
        06.10.2015 00:07

        Сливать ботов в ПК всегда слишком дорого.


        1. KamiSempai
          06.10.2015 00:43

          В линейке можно хоровод мобов вокруг бота устроить, он их сам на себя с агрит. А они то уж его сольют.


          1. henryjamesmoodyjunior
            06.10.2015 12:19
            +1

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


            1. AlmazDelDiablo
              06.10.2015 13:38

              В ранней Линейке, при смерти от мобов из тебя выпадала рандомная шмотка. Так что фарм ботов — тоже фарм, и тоже выгодный :) Потом, правда, эту лавочку прикрыли.


              1. Rel1cto
                06.10.2015 19:56
                +1

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


            1. KamiSempai
              06.10.2015 15:15

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


          1. Wedmer
            06.10.2015 16:25

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


            1. KamiSempai
              06.10.2015 17:37

              Ни что не мешает этим мобам немного помочь. Пара хороших ударов за ПК не считается.


              1. Wedmer
                06.10.2015 17:45
                +1

                Бегать одному и флагнутым — то ещё веселье. Если нормальной пачкой, то норм. Но как узнать без читов, сколько HP + CP у товарища, чтобы нормально мобам помочь? А то так и ник в красный цвет покрасить можно.


  1. nikitasius
    05.10.2015 23:53
    +6

    чтобы потом продать это за реальные деньги

    В контексте ваших игр: чтобы потом не тратить на это реальные деньги, 3-им пунктом.


  1. ingumsky
    06.10.2015 01:01
    -4

    Я бы предложил вам, отправляя читеров в бан, посылать им сообщение: «Адиос, амиго». Самоирония ещё никому не вредила.


    1. SexTools
      06.10.2015 11:04
      +4

      В Warface банят на десяток лет. Ещё 7 лет и один мой знакомый, которого забанили просто так снова сможет играть в эту игру.


    1. infrapro
      06.10.2015 11:42
      +4

      а я бы предложил не банить читеров, а делать так, чтоб читера всегда кидало в матч с такими же читерами. Желание читерить после такого пропадет


      1. henryjamesmoodyjunior
        06.10.2015 12:21
        +1

        Точно знаю о ММОРПГ (забыл название) в которой существует целый сервер для читеров. Игроков туда перемещают вместо бана.


      1. shifttstas
        06.10.2015 12:46

        Ну у Valve c их VAC так же сделано для своих FPS же


        1. rokorok
          07.10.2015 23:14

          Это в каких играх от Valve с VACом читера отправляют в резервацию к таким же? В CS:GO после получения бана нельзя искать сервера, в TF2 аналогично.


          1. TheNightFury
            08.10.2015 16:56

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

            В CS:GO после получения бана нельзя искать сервера, в TF2 аналогично.

            VAC3 не блокирует поиск, но блокирует подключение к серверу. Может, CS:GO и блокирует, но не шапки — уж точно.


  1. realimba
    06.10.2015 13:50

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

    Но видимо не судьба… Намного эффективнее делать активную защиту клиента с миллионом проверок сигнатур которую умельцы с IDA обойдут через 30 мин после релиза новой версии.

    Что интересно, большинство читов это поделки скрипт кидди из серии перехват D3D вызовов и чтение структур движка с позициями персонажей, собираются за пару часов на коленке и отлично работают во многих «защищенных» играх, например BF 3-4.


    1. Vindicar
      06.10.2015 18:55

      Такое могут себе позволить только настоящие тяжеловесы, да и то большинство не решится. Ложно-положительные срабатывания обязательно будут, а кто станет покупать игру, которая может превратиться в тыкву «просто потому что»?


    1. wint64
      07.10.2015 01:45
      +1

      В наших играх нет серийных номеров. Они бесплатны для доступа. Нужен только e-mail для входа. Когда мы баним аккаунт, то пользователю ничто не мешает зарегистрировать новый e-mail и вернуться к нам обратно со всеми своими читами, что печально.


  1. Diaver
    06.10.2015 14:54
    +1

    Реальная история самописной античит-системы, (привет Dead-Master):
    Дело было в начале 2000-ых, когда господствовала CS 1.6.
    Античит-система была крайне простая и от того крайне эффективная.
    Для начала была запущена программа, которая должна была быть запущена у игроков, но она ничего не делала, только собирала статистику загруженных в память библиотек и исполняемых файлов с их параметрами.
    Потом, весь этот список файлов проверялся в ручную и добавлялся в доверенные.
    Получился довольно большой белый список.
    Соответственно, если у игрока контрольная сумма той или иной dll отличалась он банился, если был запущен не разрешенный процесс он банился и так далее.
    В целом вся система работала довольно успешно, за исключением одного забавного случая: в один прекрасный момент система начала банить игроков. Расследование выявило причину, вышла Windows Vista, в которой изменилась контрольная сумма OpengGL библиотеки.


    1. wint64
      07.10.2015 01:49
      +1

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


  1. aalebedev
    06.10.2015 15:03

    Помню свой первый самодельный «чит» на CS. Скины террористов я сделал красными; а контров — синими.

    После этого на сервере запретили использовать неоригинальные модели.

    А по теме меня интересует борьба с ботами в браузерках.


  1. veam
    06.10.2015 15:51

    Autohotkey считается читом?
    Постоянно использую и в ds2, и в вов, и в д3. Очень удобная вещь.


  1. mickvav
    06.10.2015 17:16
    +1

    А что вы будете делать, когда начнут ставить камеру с OpenCV в соседнем компе + интерфейс через USB?


    1. dtestyk
      06.10.2015 17:57

      может вводить капчу :)


  1. Nadoedalo
    06.10.2015 18:24
    +4

    Читерство это плохо. А вот ботоводство — очень, очень и очень хорошо. Если боты используются и успешны то в итоге выигрывает экономика игры, завязанная на рутинные действия(ресурсы _сильно_ дешевеют). Ну и процесс написания и отладки ботов прекрасен сам по себе.

    Помнится в Ultima Online на пиратском серваке у меня было 14 окон открыто, каждое из которых что-то делало:
    — 3-е копали руду в полностью-автоматическом режиме, в том числе звали стражу если их атаковали(было несколько забавных случаев когда они успешно отбивались от убийц) и ходили воскрешаться в случае смерти. К этому скрипту я даже несколько патчей выпустил
    — 2-е ловили рыбу и убивали выловленных монстров, собирая с них лут и кожу — успешный бизнес хочу я вам сказать, но рискованный — если не повезёт то могут монстры бота убить, тогда приходилось целую спасательную операцию производить
    — 2 дровосека в заброшенной местности
    — несколько человек тренировали необходимые навыки, в том числе и спарринг друг с другом для прокачки боевых навыков
    — несколько(~50) аккаунтов(в каждом по 5 персонажей) которые имели достаточный навык и собирали заказы, что бы мастера могли их выполнить(большие плюшки давали если супер-большие заказы), все из них были созданы в полу-автоматическом режиме(нужно было их создать, дать немного денег и после этого они сами всё необходимое качали)
    — несколько мастеров(~3), которые собирали труды рудокопов, рыболовов и дровосеков и производили товары по заказу NPC
    — Скриптик который донатил вещи что бы потом купить ещё лучше вещи. Он брал золото, покупал самые выгодные товары и перемещался в библиотеку, где это всё отдавал. Золото — от мастеров

    Ну а ты иногда вмешивался, выполнял и сдавал самые вкусные заказы, иногда занимался штучным крафтом(всякие мега-эпические вещи типа серьги в ухо, браслета или колечка с мега-статами. Ну брони и оружия само-собой). Иногда ходил за местными «кабриолетами» в джунгли, у меня даже свой остров со своим зоопарком был(и тюрьмой для особо-опасных зверюг).
    Иногда по фану сам ходил и вызывал чемпиона, хотя завалить его в одного — практически нереально. Иногда устраивал акции с призывом неведомых ранее боссов(помню вызванный мной кракен гонял 10 человек по суше. Причём он вообщем-то только плавать умеет, но оказывается что он может и на сушу телепортироваться). Ах, да, а ещё я получил доступ в свой собственный пласт реальности, в котором ни ГМов, ни людей(правда и полезных NPC нет). Сделал себе там дом и жил себе отдельно. Даже просил выделить мне нескольких NPC что бы не так скучно со всеми этими ресурсами было. Эхх, весь мир и весь — для меня одного. Круто ведь! Я даже туда людей на экскурсии водил за небольшую плату(и без возможности получить туда доступ самим).

    Вообщем круто, сидишь себе, пьёшь пиво и смотришь как эти людишки пытаются нарушить работу твоих скриптов, местами вмешиваясь.


  1. SoLRoN
    07.10.2015 09:11
    +1

    А сообщать клиенту о всех противниках в определенном радиусе от вас сервер вынужден для приемлемой производительности игры.


    Да вы что, прикалываетесь то ли? Статья сарказма или что? Она затерялась в 2000-х годах и теперь вы ее нашли и опубликовали? Как насчет «big world»? Вообще конкурентов Armored Warfare изучали и как у них построен «античит»? У них вообще есть хоть какой то из описанных «методов борьбы». «Валидация на сервере» скажете вы, а я отвечу: «Нет, сервер просто говорит клиенту что произошло, а не проверяет что произошло на клиенте». О производительности чего идет речь, если одна из массовых массовых игр УЖЕ РАБОТАЕТ по такой технологии?


    1. Ohar
      07.10.2015 16:38

      Вы, кажется, название блога не посмотрели


      1. Krypt
        10.10.2015 10:06
        +1

        Обычно у них отличные технические статьи (согласен: с репутацией не вяжется, но факт). Но тут блин… Они превзошли себя. Для Mail.ru это говорит о многом.


        1. SoLRoN
          12.10.2015 06:30

          Именно! Я уже привык читать от mail.ru отличные технические статьи, а тут…


    1. wint64
      14.10.2015 21:41

      Ну в Armored Warfare у нас с этим как раз все нормально. В танках все происходит достаточно медленно относительно шутера и можно себе позволить сообщать о противнике на клиент только когда он попал в поле видимости клиента. Пост же в основном о шутерах, где такое решение заведомо приведет к лагам из-за сетевых задержек. Это проблема всех шутеров, не только Warface.


      1. SoLRoN
        15.10.2015 06:22

        Скажите это пилотам AMX 1390, они тоже любят смех и шутки. Кроме того, не понятно что именно в AW в порядке. Давайте уже тогда статью о методах защиты от читов таких «медленных» игр, как танки, раз это отдельная тема. Хотя заголовок статьи не говорит об шуттерах, он говорит об онлайн играх. Именно поэтому считаю статью не только не полной но и устаревшей.


  1. SexTools
    07.10.2015 10:03

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


  1. ice2heart
    07.10.2015 10:18

    Хм. А есть игры(серверы), где боты официально разрешены? Хочется пописать поведенческий код. (для RO писал в своё время пачку, было прикольно)


    1. TheNightFury
      07.10.2015 20:46

      Из последнего (подразумевая именно ИИ):



      Если же иметь ввиду то, что MR называет «ботами», то такое запрещено везде.


    1. vikarti
      13.10.2015 12:39

      зависит от того что мы называем игрой и ботом.

      есть например D&C с http://the-game.ru/about/scripting/

      есть например SecondLife где и свои клиенты написаные на чем угодно официально можно использовать и скрипты для работающих «внутри мира» объектов можно писать


      1. ice2heart
        13.10.2015 12:58
        +1

        Интересно, про D&C, а есть ещё что то похожее?


  1. dtestyk
    07.10.2015 23:57

    Возникла интересная мысль: если разработчик стремится сделать игру похожей на реальный мир, а в реальности автоматизация рутинных действий приветствуется, то такая возможность должна быть и в самой игре, иначе она превращается в насос времени. Также можно рассматривать борьбу ботов и средств противодействия им как попытки ИИ пройти тест тьюринга.
    В подтверждение этой мысли: попробуйте написать бота для coding games.
    З.Ы. Понимаю, что нарушается игровой баланс, но и в реальности есть проблема «Нас 99 %», также как и проблема безработицы обусловленная автоматизацией.