Большинство крупных многопользовательских игр рано или поздно сталкиваются с тем, что не все пользователи играют честно. В нашем шутере Warface в какой-то момент это стало ощущаться особенно сильно. Для борьбы с читерами мы используем целый комплекс решений. Одним из компонентов этого комплекса является наша внутренняя разработка под названием MRAC (Mail.Ru AntiCheat). После ее внедрения мы добились хороших результатов: среднее количество ежедневно улетающих в бан читерских аккаунтов упало с 17000 в начале года до 1500 сейчас, при том, что количество жалоб от пользователей на читеров существенно уменьшилось. На выявление подозрительной активности и блокировку аккаунта сейчас уходит примерно 5 минут, вместо прежних 20. Сейчас система распознает и реагирует на более чем 200 сигнатур читерского ПО и постоянно совершенствуется.
У каждой игры своя специфика, и для эффективной борьбы с читерами необходимо разбираться во внутренних особенностях конкретной игры и приемах, используемых в читах. Мы могли бы подробно рассказать обо всех решениях, которые мы используем в Warface, однако, выдав такую информацию в свободный доступ, мы пригласили бы авторов вредоносного ПО к активным действиям. Пока конкретика остается в секрете читерам сложнее скрываться от системы. Тем не менее, сама по себе тема очень интересная, поэтому хочется раскрыть ее подробнее.
Краткая предыстория
Думаю, многие знают, что такое «IDDQD». На протяжении всей истории компьютерных игр разработчики встраивают в свои детища подобные коды, именуемые читами. Читы позволяют становиться бессмертным, получать бесконечные патроны, ресурсы и прочее. Первичное назначение таких кодов – тестирование игры. Помимо встроенных в игру читов всегда были любители самостоятельно подправить что-нибудь в игре с той же целью – стать «бессмертным». Все это хорошо в однопользовательских играх, когда человек играет со своим компьютером и никому не мешает. В многопользовательских онлайн-играх читерство уже является проблемой, способной загубить всю игру. Если один играет не по правилам, то его соперникам играть становится просто неинтересно. Причем, если в шутере это просто испорченный матч, то в RPG нарушение игровой механики или ботоводство способно перекосить всю внутриигровую экономику.
Конечно, никаких встроенных разработчиками читов в онлайн-играх нет. Но практически для любой онлайн-игры существуют читы в виде отдельных приложений. Как правило, читы при запуске вносят изменения в работающий клиент игры. Иногда изменения вносятся прямо в файлы клиента на диске.
Одной из разновидностей читов являются боты, которые сами управляют персонажем, автоматизируя рутинные действия. Казалось бы, в таких ботах нет ничего страшного. Но на самом деле есть. Если человек спит, а его персонаж сам убивает овечек на поле в автоматическом режиме, получая за это игровой опыт, то другие игроки будут расстроены таким положением вещей. Некоторые из таких ботов позволяют писать целые скрипты для управления персонажем. Тут уже возможности ограничиваются только фантазией ботовода.
Мотивы читеров/ботоводов:
- «Надрать всем зад» для самоутверждения. Пусть и нечестно.
- Заработать денег. Для этого нужно быстрее прокачаться, собрать ресурсы, шмотки и т.п., чтобы потом продать это за реальные деньги.
Основной мотив авторов читов/ботов — заработать денег. Наиболее качественные читы/боты продаются по подписке за реальные деньги. Есть и бесплатные читы, но они обычно начинены adware и всякими полу-вирусами, что опять же, призвано принести деньги.
Давайте рассмотрим более подробно, что и как делают читы на примере многопользовательского онлайн-шутера Warface.
Разновидности читов
Любой чит так или иначе взаимодействует с клиентом игры. Для этого автору чита нужно иметь представление о внутреннем устройстве клиента. Наиболее профессиональные читоделы получают такое представление, в том числе, путем реверс-инжиниринга — находят нужные переменные и восстанавливают интерфейсы классов. После чего методы классов можно вызывать в своих интересах. Внутренняя структура классов в клиенте изменяется крайне медленно на протяжении жизни игры. Через какое-то время эта информация попадает уже в гораздо больший круг менее квалифицированных читоделов и тогда разнообразие идентичных по функциональности читов увеличивается на порядок.
ESP (Extrasensory perception) – разновидность читов, способных показывать дополнительную информацию о противниках в игре. К сожалению, клиент игры знает о расположении всех противников в определенном радиусе от вас, даже если они за стеной и их не видно. В шутере действия развиваются довольно быстро и если клиент будет получать от сервера информацию о противнике только когда он попал в поле видимости, то это заведомо приведет к лагам из-за сетевых задержек. Чит получает информацию о противниках через внутренние интерфейсы классов клиента и выводит ее прямо поверх игрового изображения. Это, как минимум, расположение противника в пространстве и расстояние до него. Для отрисовки поверх игрового изображения чит перехватывает один из методов Direct3D, вызывающихся каждый кадр. Например, EndScene. Все это подразумевает, что в память клиента был внедрен код чита, необходимый для отрисовки.
Aimbot – разновидность читов для автоматического прицеливания. Вам остается только бегать и спускать курок, а прицел сам по себе попадает на ближайшего противника. Можно даже выбрать часть тела, в которую нужно целиться. Расположение противника в пространстве чит получает также через внутренние классы клиента. Далее для выполнения автоматической наводки возможны варианты. Либо чит напрямую вызывает нужные методы в клиенте для поворота вашего персонажа (прицел всегда в центре вашего взгляда). Либо посылает клиенту сообщения от имени мыши для этой же цели.
Autoshot – автоматический выстрел в тот момент, когда противник оказывается в прицеле. Такой чит работает аналогично aimbot’у — информацию о расположении противника получает через внутренние классы клиента и посылает сообщение от мыши для выстрела. Часто autoshot и aimbot совмещают вместе. Тогда вам остается просто бегать, а прицеливание и стрельба выполняются читом автоматически.
Recoil – отключает отдачу при выстреле. Такие читы, как правило, просто патчат код клиента игры в памяти, отвечающий за отдачу. В результате, стрелять становится сильно проще. Кроме отключения отдачи существует еще масса читов, отключающих различные элементы и упрощающие игру. Например, отключение разброса при выстреле или отключение эффекта работы светошумовой гранаты. Некоторые из таких читов для достижения своей цели модифицируют не код, а переменные в памяти клиента.
Безусловно, это не полный список существующих читов, но уже можно составить перечень механизмов их работы:
- Модификация кода клиента игры в памяти.
- Модификация переменных клиента игры в памяти.
- Вызов методов внутренних классов клиента напрямую.
- Отправка сообщений от имени мыши.
Методы борьбы
Как же бороться с этим? Конечно, наличие грамотной клиент-серверной архитектуры у игры — это очень важно. Но, к сожалению, это решает не все проблемы. Некоторые элементы геймплея выполняются только на стороне клиента, и сервер никак не может обнаружить факт их отключения. А сообщать клиенту о всех противниках в определенном радиусе от вас сервер вынужден для приемлемой производительности игры.
Первым наиболее действенным способом представляется валидация на сервере действий игрока. Например, если игрок каким-то образом за единицу времени переместился в пространстве дальше, чем позволяет игровая механика, то наверняка это читер (speedhack), и его нужно немедленно кикнуть. Такая валидация перемещений игрока возможна, так как в конечном счете сервер контролирует расположение игроков на карте.
Вторым способом представляется статистический анализ на сервере. Например, если все пули игрока постоянно попадают в голову врагов, то это очень подозрительно. Или не в голову, а просто без промахов. Или, скажем, результаты игрока по итогам матча сильно выбиваются из среднестатистических. Конечно, все это еще не повод для блокировки аккаунта данного игрока. Может быть он действительно очень крут. Однако это может использоваться как триггер для пристальной проверки действий игрока группой техподдержки игры. При этом надо понимать, что умный читер, скорее всего, не будет «палиться» и под проверку не попадет.
Еще один способ борьбы – встроенная в игру возможность пожаловаться на читера. Разумеется, по жалобам нужно сначала провести проверку и потом уже решать, блокировать аккаунт или нет. Но как показывает практика, этот способ имеет довольно ограниченное применение. Жалоба на читерство сразу становится элементом манипулирования в игре – люди жалуются на всех подряд, кто играет лучше них. В результате получается огромный поток жалоб, особенно на опытных игроков.
На этом, «красивые» способы защититься от читов заканчиваются, но проблему полностью не решают. Приходится обращаться к навесной защите клиента игры.
Навесная защита
Очень болезненным для игры является модификация кода клиента. Например, для отключения некоторых элементов геймплея, воспроизводимых только на стороне клиента. С этим можно бороться путем периодического подсчета и сверки контрольной суммы всего своего кода в памяти. Но эту проверку отключат точно также: изменив код, отвечающий за нее. Тут уже нужна защита кода от анализа (обфускация) и от отладки. Самостоятельная разработка более-менее сильной защиты кода является отдельной сложной задачей, но на рынке есть готовые решения.
Защитить весь код никак нельзя. Обфусцированный код работает в разы медленнее, так как его становится в разы больше. Защищать получается только небольшие участки кода, не критичные к производительности. Например, можно как раз защитить проверку контрольной суммы всего кода. Разумеется, никакая защита кода не является панацеей. Она может лишь усложнить задачу для злоумышленника. Цель в данном случае – сделать так, чтобы стоимость взлома была выше, чем ожидаемая выгода.
Если у кода можно подсчитать его контрольную сумму, то с переменными уже сложнее. Нужно придумывать способы хранить важные с этой точки зрения переменные в зашифрованном или избыточном виде. Причем так, чтобы это не сказалось на производительности. Опять же, это не решит проблему, а лишь затруднит задачу для злоумышленника.
Допустим, от модификации кода и важных переменных клиента мы худо-бедно защитились. Но остаются читы, которым для работы не нужно модифицировать ни код, ни переменные. Например, ESP. По сути, чит берет информацию из памяти клиента и отображает ее. Но для такой функциональности в памяти клиента должен присутствовать код чита. За это уже можно зацепиться и пойти следующими путями:
- Не дать читу попасть в память клиента.
- Попытаться найти чит в памяти клиента.
Первый путь подразумевает запрет на запись в память процесса (WriteProcessMemory) и запрет на создание удаленных потоков (CreateRemoteThread). Обычный способ инжекта своего модуля в процесс как раз требует записать в память и создать свой поток в этом процессе. Учитывая, что чит имеет возможность работать с привилегиями администратора (читер всегда даст их), то в Windows никак нельзя запретить писать в память и создавать потоки в чужих процессах. Можно подумать в сторону создания своего драйвера, который будет блокировать доступ к процессу клиента игры. Но в ядре Windows нет документированных способов фильтровать запись в память чужих процессов (NtWriteVirtualMemory), а использование недокументированных способов сильно усложняется наличием Kernel Patch Protection. Даже если удастся заблокировать запись в свою память, то всегда будут другие дырки: можно внедрить свой код в системные библиотеки на диске.
Предполагается, что модули игры при этом защищены и запакованы защитой кода, и изменить их на диске довольно проблематично.
Второй путь подразумевает нечто похожее на антивирус: искать в памяти клиента заранее известные фрагменты читов. Тут технических препятствий не видно. Однако придется решить задачу оперативного обновления базы читов. Можно пойти дальше и искать фрагменты читов не только в памяти клиента, а во всей системе. Это на случай таких читов, которые работают в собственном процессе, а клиенту патчат код и переменные или шлют сообщения от мышки.
Есть еще третий путь: попробовать найти следы перехвата читом функций Direct3D и считать это угрозой. Чит перехватывает функции D3D для получения управления и отрисовки нужной информации каждый кадр. Но у такого варианта есть существенные проблемы. Есть немало «хорошего» софта, который делает то же самое: перехватывает те же функции D3D для отрисовки своей информации поверх игрового изображения. Например, RaidCall. А задача «отличить хороший софт от плохого» является в общем случае нерешаемой.
Разумеется, весь этот поиск читов и блокировку их внедрения можно отключить путем модификации кода, который за это отвечает. Тут единственный выход — использовать защиту кода. Но как код ни защищай, рано или поздно все-равно сломают. Понятно, что пока приложение работает на компьютере пользователя, ничто не может помешать пользователю изменить данное приложение. Это вопрос лишь времени и оправданности затрат.
Заключение
Проблему читерства в онлайн-играх не решить только лишь улучшением клиент-серверного взаимодействия. Она комплексная, и бороться с ней тоже нужно комплексными мерами. Как следствие, большинство игр имеют дополнительные специализированные программные средства для защиты от читов (античиты), и от них есть ощутимый толк. Благодаря таким системам читеры портят игровой опыт других игроков в куда меньших масштабах, чем могли бы.
Комментарии (96)
noonesshadow
05.10.2015 17:43+4Просто признать, что «читы» — часть правил игры, и учитывать их при ГД.
У кого-то есть время на фарм, у кого-то есть ресурс для автофарма, почему одно хорошо а другое плохо?
Если игра радует каждую минуту, никакого автофарма в ней не будет.jrip
06.10.2015 12:55+1Фиг с ним с фармом. Но не у всех есть ненужные N лет жизни, чтобы прокачать руку до состояния Aimbot+Autoshot+Recoil :)
SexTools
06.10.2015 14:48-1Корейцы могут с этим поспорить. Да и профессиональные пользователи огнестрельного оружия думаю тоже.
alterpub
07.10.2015 16:53+1Ок, ты играешь в шутер, в нем весь кайф быть быстрее и точнее другого игрока за счет собственных скиллов, если ты играешь с aimbot, то какой смысл тебе в этом участвовать? Я вот искренне не понимаю читеров, в подобных играх, я не вижу тут ничего кроме как самоутверждения, но блин самоутверждаться в шутере… ради чего, если тебе не 13 лет?
jrip
07.10.2015 17:47Хз в чем кайф, я такое ни разу не ставил. Человек выше просто предложил сделать читы частью игры.
galk_in
05.10.2015 17:47+5ботоводство способно перекосить всю внутриигровую экономику
Значит экономика сделана не правильно.SexTools
05.10.2015 17:54+1Экономика может быть плановой, а может быть рыночной. Вот последняя была в другой игре Mail.RU на старте и там целый год 80% игрового населения составляли боты. Зато цены на расходники выросли на полтора порядка.
MrGobus
05.10.2015 19:20+4Не дай бог вам поиграть в игру с «правильной» экономикой =) И таки да, сегодня есть методы борьбы с ботами и т.п. за счет игровой механики. К сожалению подобные методы сводят геймплей к донатному рабству. Первый способ борьбы с ботами это очки работы, благодаря их затратам бот не сможет постоянно собирать ресурсы, добавляем затрату очков работы на определение лута и фарм предметов сводим на нет, и все было бы хорошо, если бы не возможность донатом получить ОР, так как получается, что игрок платит за право использовать выбитый лут (вы готовы биться с боссом чтобы заплатить реал за выбитые рары???). Подобная механика используется в игру Archeage. Кстати это еще не предел, в ближайшее время выходит BlackDesert, закрытое ОБТ для донатеров кстати уже стартовало. В БД для борьбы с нарушениями в экономике сделали фиксированный аукцион, то есть, вы можете продавать что-то только в определенном ценовом диапазоне. Предполагается, что это защитит рынок от торговли золотом не позволяя продать банку зелья здоровья за 1000000000000 денег, но спросите себя, экономика ли это ??? Признаться честно я жду недождусь поглядеть на коммунизм в действии, так как играть ради чего то иного в БД видимо не получится (ставлю на то, что единственное что будет доступно в игре — это возможность донатить).
P.S. С трепетом в сердце вспоминаю рынки в Lineage и Ragnarok Online, споры, разговоры, беготню и торговлю, вот это блин экономика, вот это блин геймплей =)ruikarikun
05.10.2015 19:27>>> закрытое открытое бета тестирование для донатеров
Это как?Alexey2005
05.10.2015 22:57+2Обыкновенно — путём распродажи наборов раннего доступа, владельцы которых могут войти на сервера раньше прочих. В современном мире MMO это весьма распространённая практика.
Считается, что такой подход позволяет избежать многочасовых очередей в момент запуска, т.к. по количеству купленных наборов можно оценить ожидаемую нагрузку на сервера и, если желающих набирается слишком много, продажу наборов приостанавливают.
Хотя в случае с ArcheAge это не помогло — наборов продали столько, что очередь на 8 часов ожидания ещё считалась вполне приемлемой, а игроки учились пользоваться удалённым доступом к компьютеру, чтоб контролировать процесс стояния в очередях со смартфонов.
П.С.: Тут гораздо интереснее другое — в Black Desert игрокам обещают ещё и p2p-сервер, но при этом сразу оговариваются, что он хоть и p2p, но тоже с донатом. Чем же тогда их p2p отличается от f2p, игроки гадают до сих пор.
Wedmer
05.10.2015 22:23+1Во второй линейке еще был когда то в древние хроники один классный способ заработать: Завести мобов на рынок.
henryjamesmoodyjunior
06.10.2015 12:04-1И трава была
забористеезеленее
Как игрок, скажу, раньше я бесился по поводу ботов, мне нужно спать, а им нет, я трачу нервы когда персонаж умирает, когда мне мешают фармить и т.д. бот же просто делает свое дело и не парится. А человек за ним стоящий, просто смотрит как на одном компе работают целые фермы его ботов и тоже не парится.
Но для меня это в прошлом, я вырос. Жена, работа, заботы, теперь я бешусь на школьников/студентов :)
По делу:
Согласен с noonesshadow
Читы были есть и будут. Хоть в виртуальной машине запускай игру. Все, что сделано человеком, может быть взломано другим человеком.Nidere
06.10.2015 17:32Читы были есть и будут.
Облачный гейминг всех спасёт.Wedmer
06.10.2015 17:35+1Считать все действия персонажа на сервере — непременимо для 3д шутеров. Нужен будет суперпупер канал. Хотя через Onlive хрен почитеришь) Но он все равно подох.
Nidere
06.10.2015 17:46Считать действия персонажа не стоит ровным счётом ничего по сравнению с обсчётом графики, которую игроку нужно будет потоковым видео транслировать.
Тем не менее, onLive работал вполне себе удобоваримо, а лет через 10-20 это будет уже нормой.Wedmer
06.10.2015 18:01+2Я имел в виду также и рендер. Уже писалось, что клиент вынужден знать о местоположении игроков. Иначе лаги будут более серьёзными. Вся фишка была в том, что сервер много не кушает, и их на одной машине можно много держать, а задержка для игроков будет минимальна. Если клиент не будет знать о местоположении всех игроков, то весь рендер надо уводить на сервер и отдавать потоком.
А теперь представьте, какая ферма нужна, чтобы рендерить картинку для 30 игроков. А еще подумайте, на счет людей с разным расстоянием до сервера. Можно конечно придумать крутую систему скипа фреймов, фиксированных задержек, но все равно у имеющих меньшее время отклика до сервера будет больше преимуществ в игре.michael_vostrikov
06.10.2015 19:03Не специалист в 3D графике, но мне кажется, можно сделать так. На сервере делать не весь рендер, а только базовый просчет — чтобы z-буфер заполнить. То есть по сути одноцветные стены без текстур и прочего. Игрок — контур из нескольких точек. Если хотя бы одна точка проецируется на камеру другого игрока, значит первого игрока видно из-за стены. Только после этого на клиент второго отправляются координаты первого. Нормальный рендер производится на клиенте, как обычно.
Wedmer
06.10.2015 19:10+1Есть подозрение, что все равно будут недопустимые задержки. Короче, надо прототип накалякать.
MrGobus
10.10.2015 11:57Для борьбы с ботами (использующими баг положения) прощитывать графику на сервере не обязательно вообще, достаточно хранить геометрию пространства и вести несложные матиматические расчеты. Кстати даже не пространства а так называемых коллизий, обычно это упращенная по полигонам модель или чаще куб, шар или цилиндр (иногда совмещенный с шаром, закругленный по краям).
Хардварная оптимизация тут может быть реализована через SSE, OpenCL, CUDA.
rPman
07.10.2015 22:33Идею не патентовать!
Рендер можно отдать на аутсорс, конечно это будет иметь смысл только для его хорошего развития. Грубо говоря региональные сервера, являясь обычным клиентом к обычному серверу, но сертифицированные (опломбированные и защищенные от взлома владельцем), работают терминальным сервером для клиентов, находящихся в достаточной близости с хорошей сетевой инфраструктурой. При этом эти сервера не обязательно фиксированы для одной игры — они универсальны! клиенты (или север, как продумает разработчик) оплачивают ресурсы этих терминальных серверов а игроки могут играть в свои любимые игры, не боясь совсем уж наглых читеров.
Единственный способ считерить останется — распознавание объектов на экране и управление персонажем… дает ограниченный список читов, и в конечном счете их можно обломить самой игровой механикой, сводя к не выгодной цене либо разработку бота либо его эксплуатацию.Wedmer
08.10.2015 02:00Можно то все, но, в основном, только в теории. На практике слишком много камней на поле.
wint64
07.10.2015 01:02+1Даже если через 20 лет будет нормально работать шутер по стримингу, то никто не отменит аимбот и автошот с распознаванием образов на экране клиента.
SexTools
07.10.2015 09:53Через 20 лет можно уже будет отвязать управление положением оружия от направления взгляда, вплоть до выравнивания прицела по мушке или стволу. Так что это будет уже совсем другая математика.
Lerk
05.10.2015 18:21+7Говорить про читы в онлайн играх и забыть про пакетный уровень?) Ребята, вам слова Lineage 2, L2Walker, WPF о чем-нибудь говорят?))
hMartin
06.10.2015 14:00+1Да, славные были времена. Застал разработку WPF by Sauron под ла2 и RFO. И было же у создателей подобного софта столько времени на дебаг, чтобы разобрать назначение каждого пакета и какие байты за что отвечают :)
Кстати, в наше время все гораздо лучше, каждая вторая разработка имеет механизмы шифрации трафика.
SystemXFiles
05.10.2015 19:42+9Есть такие читы, которым абсолютно не нужна запись в память игры, даже внедрение не нужно. Их называю External читы, им достаточно только читать.
У меня был опыт (прошу сильно не бить, это именно хобби было, сам играю очень редко, интересен именно процесс взлома) в разработке TriggerBot, AimBot, радара (видно кто где как на обычном радаре. но всегда) внешних.
Для посыла действий использовалось обычное внешнее winapi с командами для клавиатуры и мыши. Так же может работать ESP и WH, который просто рендерит прям поверх окна игры, не внедряясь в процесс. Такие читы сложнее всего ловить.
Лично у меня были попытки в ring0 шаманскими способами залезть, дабы получать доступ к процессу непосредственно, а еще к командам клавиатуры и мыши. Жаль не вышло тогда, сейчас с большим опытом может и выйдет, но интереса как такового нет.
Самая большая проблема такого подхода была в том, что информация была не актуальна, ибо пока полученные данные проходили путь из одного процесс в другой, уже менялось многое в самой игре (потому и хотелось мне залезть в ядро, дабы читать актуальную информацию как можно быстрее). Решалось это дело очень суровыми оптимизациями самого кода чита и использование сразу всех ядер компа (процесс сам множился и после централизованно мучал игру, распределяя вычисления).
Как правило на слабых компах это приводило к заметным тормозам во всей системе, а порой к почти полному зависанию. Зато на мощных отрабатывал отлично.
Вот интересно ваше мнение, какая защита тут поможет?pwl
05.10.2015 21:42Ну, например, клиент может заметить, что мышка постоянно двигается по абсолютно прямым линиям. Или событие о клике приходит все время в несколько фиксированных точек. Или клик по точке происходит без предварительного перемещения курсора туда.
SystemXFiles
06.10.2015 07:14+2Думаю это слишком косвенно и грозит баном хороших игроков. Так или иначе в шутерах курсор всегда по центру окна и скрыт, для измерения поворота используется дельта между положением центра и смещением курсора сейчас (потом вернется обратно в центр).
Потому все клики будут приходить в любом случае в центр окна или в область рядом.
А прямые линии. Ну да, мои как правило наводились по прямой, но и человек в основном так же делает. Лично сколько раз видел, наводится более менее хороший игрок прямо на врага. Плюс наводка у меня была плавная. Хотя вообще все делалось так, чтобы система не помогала во всем, а лишь в момент к примеру выстрела из AWP наводилась на тело. Причем только при определенной близости прицела к врагу. В общем в таком режиме вообще было невозможно понять, играет ли читер или профессионал.
monah_tuk
06.10.2015 08:04+1Так всегда можно примешать шум. Плюс есть всякие геймпады в которых, в силу особенностей, может быть произведено прямое движение. Недавно про такой олдовый был обзор на гиктаймс.
xSomeonEx
06.10.2015 12:12У 4game вроде как стоят собственные хуки на всякие GetPixelColor, ReadProcessMemory и тд, и они решают, что выдавать выдавать в результате. Хотя может быть я ошибаюсь.
SystemXFiles
06.10.2015 14:39Все возможно, но их я не ломал =)) Ломал Source движки с VAC (без обходов, ибо в сам процесс не лез) и CrossFire от Mail с X-Trap (обход анти-чита реверснул с канадских готовых читов). В CF уже внедрялся в сам процесс.
wint64
07.10.2015 01:21Да в общем случае, никакая защита не поможет от этого. В конце концов можно и свою умную железку повесить в USB, которая ботит и говорит, что она мышь. Но важен фактор доступности. Если скачал бесплатно, то их тыщщи. Если нужна железка или другие сложности, то их десятки. Искоренить читеров нельзя, но можно уменьшить их количество.
dtestyk
05.10.2015 20:45отключение эффекта работы светошумовой гранаты
а разве нельзя брать какой-то хеш от сгенерированного и показанного на экране изображения и отправлять на серверwint64
06.10.2015 11:50Даже если придумать, что сервер будет делать с этим хешом, то читеры изменят клиент так, чтобы он всегда отправлял «правильный» хеш. Или будут заменять хеш на «правильный» в сетевом стеке, без модификации клиента.
SystemXFiles
06.10.2015 14:41Особенно просто это делается, когда в момент вычисления хэша (или просто отправки скрина экрана для проверки админами), чит отключал себя на один кадр. Много так анти-читов обходилось, просто и со вкусом.
Rel1cto
05.10.2015 20:47Подскажите, пожалуйста, как опытные борцы с читами.
Есть один онлайн-шутер (не имеющий к вам отношения), администрацию которого игроки уже давненько подозревают в сотрудничестве с читоделами (поскольку онлайн не ахти и в таких условиях каждая копеечка поможет). Уж слишком упорно не банят ни единого игрока из двух топ-кланов, показывающих сверхъестественные результаты.
Мне попалось на глаза весьма интересное видео работы чита. Он (помимо всего прочего) рисует из глаз противника лучи, то есть показывает, куда в данный момент направлен взгляд врага.
Так вот эти лучи рисуются не совсем «поверх» экрана (как в скриншоте в статье), а учитывают геометрию уровня. То есть соответствующие их куски закрывают деревья, стены, и прочие непрозрачные объекты. Если враг, скажем, стоит за стеной и ждёт, когда вы на него выйдете, то луч отрисовывается от начала стены — точки, где вы его бы увидели, будь он материальным игровым объектом.
Насколько, на ваш взгляд, реально читоделу «со стороны» так разобраться в рендере игры, чтобы учитывать геометрию уровня и рисовать с её учётом, без помощи со стороны разработчиков?Sap_ru
05.10.2015 21:50Если игра построена на готов модульном движке и/или внтури заскриптована на какой-либо модульном динамическом языке, и/или утекли исходники, то такое делается относительно не сложно. Некоторые современные wall-hack сложнее этого эффекта.
aml
06.10.2015 00:47+3Это элементарная задача. Если это Open GL, то перехватывается вызов функций glDraw* (или ещё каких-нибудь, которые вызываются в главном цикле рендера), и подсовывается ещё один вызов «нарисовать линию». Закрывание объектов друг другом делается на уровне буфера глубины (обычно это работа 3D-ускорителя), и просто отдать команду на рисование линии достаточно, чтобы получить эффект, который вы описываете. Если это DirectX, то тоже что-то аналогичное должно быть (я с ним никогда не работал).
wint64
06.10.2015 11:55+1Такое делается через API движка игры. При наличии доступа к SDK движка, это не сложно.
Rel1cto
06.10.2015 13:35Движок у них самописный.
Krypt
06.10.2015 22:36Если вы тонко намекаете на WoT (и луч из дула) — это модифицированная модель танка. Изменены только ресурсы игры и не более.
Rel1cto
07.10.2015 00:43Нет, я про вот это: rutube.ru/video/1d65a9e0e51a3e316363eff8a3500a75
Начиная с 00:51 как раз начинаются лучи.
wint64
07.10.2015 00:45Ну тут я могу только гадать — у движка были внешние скрипты или движок разреверсили или утекло или теория заговора с читоделами.
zencd
05.10.2015 21:06+6Идея введения «оплаты» для free2play-игр, где страха лишиться аккаунта меньше… Сперва ты играешь на сервере-отстойнике с другими такими же «непроверенными» типами; т.е. это нормальные сервера, за единственным исключением — доля читеров там заведомо больше. Присмотревшись, кладешь/ложишь на счет рублей 500 и становишься уже полноценным участником — играешь с такими же, с теми кто вложил деньги. Средства можно тратить на шмотки, а то что не истратил — можешь в любой момент вернуть (вернувшись, конечно, на сервера начального уровня).
Вроде бы щадяще. Да и уже заведенные в систему деньги легче истратить (:
За статью спасибо, интересная тема, хотя можно и полнее осветить. Может в будущем.
Kop3t3
05.10.2015 21:08ботоводство способно перекосить всю внутриигровую экономику
А как Вы объясните введение официального бота в одну из своих игр? (хотя в ней и до этого присутствовали элементы а-ля сверни и занимайся своими делами)AlmazDelDiablo
05.10.2015 23:19+1По-моему, это нередкая практика. В той же Lineage 2 на корейском оффе был разрешён бот и поставлялся вместе с клиентом игры. ИМХО, если игра работает по подписочной модели, то это крайне правильное решение: человек платит тебе и имеет право получать удовольствие от самого сока игры, а не бесконечного фарма мобов.
Да и важно понимать, что в ММО, где имеется свободное ПВП, качаться на боте всегда не получится, это лишь сгладит скуку на начальных уровнях, если тебе нужно прокачать себе доп. персонажа (новички в любом случае вынуждены качаться вручную, просто чтобы влиться в игру). Скажем так, баланс между какой-то сюжетной и познавательной частью игры для новичков, и местом баталий, драм, самоутверждения и/или заработка денег для опытных.
PS: про игры от Мейла ничего не знаю, и о какой именно мы сейчас упоминали — я не в курсе.Wedmer
06.10.2015 00:07Сливать ботов в ПК всегда слишком дорого.
KamiSempai
06.10.2015 00:43В линейке можно хоровод мобов вокруг бота устроить, он их сам на себя с агрит. А они то уж его сольют.
henryjamesmoodyjunior
06.10.2015 12:19+1Вижу, профессиональные ботоборцы, не видавшие нормальных ботов. Проблема в том, что сколько ботов не убивай, они всегда возвращаются. Вы тратите свое время, они тратят ваше время.
AlmazDelDiablo
06.10.2015 13:38В ранней Линейке, при смерти от мобов из тебя выпадала рандомная шмотка. Так что фарм ботов — тоже фарм, и тоже выгодный :) Потом, правда, эту лавочку прикрыли.
Rel1cto
06.10.2015 19:56+1Ещё раньше ботоводы научились пользоваться багом на форс-дисконнект. Теперь при угрозе жизни бот просто выкидывал себя из игры, персонаж при этом исчезал. В нормальных условиях персонаж не исчезал до окончания боя, но баг позволял это обойти.
KamiSempai
06.10.2015 15:15Линейка, достаточно хардкорная игра. При умирании теряется значительное количество опыта, и как уже заметил AlmazDelDiablo есть шанс выпадения шмотки. Плюс, в зоне «кача» на одного соперника меньше.
Wedmer
06.10.2015 16:25Не всегда помогало. Разве что только мобов уровнем сильно выше, но это уже могло представлять проблему для других игроков. Кстати видел ботов которые через определенное время сливались, чтобы не снижать дроп.
KamiSempai
06.10.2015 17:37Ни что не мешает этим мобам немного помочь. Пара хороших ударов за ПК не считается.
Wedmer
06.10.2015 17:45+1Бегать одному и флагнутым — то ещё веселье. Если нормальной пачкой, то норм. Но как узнать без читов, сколько HP + CP у товарища, чтобы нормально мобам помочь? А то так и ник в красный цвет покрасить можно.
nikitasius
05.10.2015 23:53+6чтобы потом продать это за реальные деньги
В контексте ваших игр: чтобы потом не тратить на это реальные деньги, 3-им пунктом.
ingumsky
06.10.2015 01:01-4Я бы предложил вам, отправляя читеров в бан, посылать им сообщение: «Адиос, амиго». Самоирония ещё никому не вредила.
SexTools
06.10.2015 11:04+4В Warface банят на десяток лет. Ещё 7 лет и один мой знакомый, которого забанили просто так снова сможет играть в эту игру.
infrapro
06.10.2015 11:42+4а я бы предложил не банить читеров, а делать так, чтоб читера всегда кидало в матч с такими же читерами. Желание читерить после такого пропадет
henryjamesmoodyjunior
06.10.2015 12:21+1Точно знаю о ММОРПГ (забыл название) в которой существует целый сервер для читеров. Игроков туда перемещают вместо бана.
shifttstas
06.10.2015 12:46Ну у Valve c их VAC так же сделано для своих FPS же
rokorok
07.10.2015 23:14Это в каких играх от Valve с VACом читера отправляют в резервацию к таким же? В CS:GO после получения бана нельзя искать сервера, в TF2 аналогично.
TheNightFury
08.10.2015 16:56Существуют серверы без VAC, вот на них и могут играть. Но их мало, да и владельцы часто ставят пользовательские античиты.
В CS:GO после получения бана нельзя искать сервера, в TF2 аналогично.
VAC3 не блокирует поиск, но блокирует подключение к серверу. Может, CS:GO и блокирует, но не шапки — уж точно.
realimba
06.10.2015 13:50«Проблема» читов в онлайн играх напоминает аналогичную с ворованными телефонами, достаточно навсегда заблокировать серийный номер после обнаружения стороннего ПО и вопрос решен. Товарищу снова нужно будет покупать копию игры или прокачанный аккаунт.
Но видимо не судьба… Намного эффективнее делать активную защиту клиента с миллионом проверок сигнатур которую умельцы с IDA обойдут через 30 мин после релиза новой версии.
Что интересно, большинство читов это поделки скрипт кидди из серии перехват D3D вызовов и чтение структур движка с позициями персонажей, собираются за пару часов на коленке и отлично работают во многих «защищенных» играх, например BF 3-4.Vindicar
06.10.2015 18:55Такое могут себе позволить только настоящие тяжеловесы, да и то большинство не решится. Ложно-положительные срабатывания обязательно будут, а кто станет покупать игру, которая может превратиться в тыкву «просто потому что»?
wint64
07.10.2015 01:45+1В наших играх нет серийных номеров. Они бесплатны для доступа. Нужен только e-mail для входа. Когда мы баним аккаунт, то пользователю ничто не мешает зарегистрировать новый e-mail и вернуться к нам обратно со всеми своими читами, что печально.
Diaver
06.10.2015 14:54+1Реальная история самописной античит-системы, (привет Dead-Master):
Дело было в начале 2000-ых, когда господствовала CS 1.6.
Античит-система была крайне простая и от того крайне эффективная.
Для начала была запущена программа, которая должна была быть запущена у игроков, но она ничего не делала, только собирала статистику загруженных в память библиотек и исполняемых файлов с их параметрами.
Потом, весь этот список файлов проверялся в ручную и добавлялся в доверенные.
Получился довольно большой белый список.
Соответственно, если у игрока контрольная сумма той или иной dll отличалась он банился, если был запущен не разрешенный процесс он банился и так далее.
В целом вся система работала довольно успешно, за исключением одного забавного случая: в один прекрасный момент система начала банить игроков. Расследование выявило причину, вышла Windows Vista, в которой изменилась контрольная сумма OpengGL библиотеки.
wint64
07.10.2015 01:49+1Если это реальная история, то непонятно о чем думали ее разработчики, расчитывая на абсолютную неизменность системных библиотек. Странно даже.
aalebedev
06.10.2015 15:03Помню свой первый самодельный «чит» на CS. Скины террористов я сделал красными; а контров — синими.
После этого на сервере запретили использовать неоригинальные модели.
А по теме меня интересует борьба с ботами в браузерках.
veam
06.10.2015 15:51Autohotkey считается читом?
Постоянно использую и в ds2, и в вов, и в д3. Очень удобная вещь.
Nadoedalo
06.10.2015 18:24+4Читерство это плохо. А вот ботоводство — очень, очень и очень хорошо. Если боты используются и успешны то в итоге выигрывает экономика игры, завязанная на рутинные действия(ресурсы _сильно_ дешевеют). Ну и процесс написания и отладки ботов прекрасен сам по себе.
Помнится в Ultima Online на пиратском серваке у меня было 14 окон открыто, каждое из которых что-то делало:
— 3-е копали руду в полностью-автоматическом режиме, в том числе звали стражу если их атаковали(было несколько забавных случаев когда они успешно отбивались от убийц) и ходили воскрешаться в случае смерти. К этому скрипту я даже несколько патчей выпустил
— 2-е ловили рыбу и убивали выловленных монстров, собирая с них лут и кожу — успешный бизнес хочу я вам сказать, но рискованный — если не повезёт то могут монстры бота убить, тогда приходилось целую спасательную операцию производить
— 2 дровосека в заброшенной местности
— несколько человек тренировали необходимые навыки, в том числе и спарринг друг с другом для прокачки боевых навыков
— несколько(~50) аккаунтов(в каждом по 5 персонажей) которые имели достаточный навык и собирали заказы, что бы мастера могли их выполнить(большие плюшки давали если супер-большие заказы), все из них были созданы в полу-автоматическом режиме(нужно было их создать, дать немного денег и после этого они сами всё необходимое качали)
— несколько мастеров(~3), которые собирали труды рудокопов, рыболовов и дровосеков и производили товары по заказу NPC
— Скриптик который донатил вещи что бы потом купить ещё лучше вещи. Он брал золото, покупал самые выгодные товары и перемещался в библиотеку, где это всё отдавал. Золото — от мастеров
Ну а ты иногда вмешивался, выполнял и сдавал самые вкусные заказы, иногда занимался штучным крафтом(всякие мега-эпические вещи типа серьги в ухо, браслета или колечка с мега-статами. Ну брони и оружия само-собой). Иногда ходил за местными «кабриолетами» в джунгли, у меня даже свой остров со своим зоопарком был(и тюрьмой для особо-опасных зверюг).
Иногда по фану сам ходил и вызывал чемпиона, хотя завалить его в одного — практически нереально. Иногда устраивал акции с призывом неведомых ранее боссов(помню вызванный мной кракен гонял 10 человек по суше. Причём он вообщем-то только плавать умеет, но оказывается что он может и на сушу телепортироваться). Ах, да, а ещё я получил доступ в свой собственный пласт реальности, в котором ни ГМов, ни людей(правда и полезных NPC нет). Сделал себе там дом и жил себе отдельно. Даже просил выделить мне нескольких NPC что бы не так скучно со всеми этими ресурсами было. Эхх, весь мир и весь — для меня одного. Круто ведь! Я даже туда людей на экскурсии водил за небольшую плату(и без возможности получить туда доступ самим).
Вообщем круто, сидишь себе, пьёшь пиво и смотришь как эти людишки пытаются нарушить работу твоих скриптов, местами вмешиваясь.
SoLRoN
07.10.2015 09:11+1А сообщать клиенту о всех противниках в определенном радиусе от вас сервер вынужден для приемлемой производительности игры.
Да вы что, прикалываетесь то ли? Статья сарказма или что? Она затерялась в 2000-х годах и теперь вы ее нашли и опубликовали? Как насчет «big world»? Вообще конкурентов Armored Warfare изучали и как у них построен «античит»? У них вообще есть хоть какой то из описанных «методов борьбы». «Валидация на сервере» скажете вы, а я отвечу: «Нет, сервер просто говорит клиенту что произошло, а не проверяет что произошло на клиенте». О производительности чего идет речь, если одна из массовых массовых игр УЖЕ РАБОТАЕТ по такой технологии?Ohar
07.10.2015 16:38Вы, кажется, название блога не посмотрелиwint64
14.10.2015 21:41Ну в Armored Warfare у нас с этим как раз все нормально. В танках все происходит достаточно медленно относительно шутера и можно себе позволить сообщать о противнике на клиент только когда он попал в поле видимости клиента. Пост же в основном о шутерах, где такое решение заведомо приведет к лагам из-за сетевых задержек. Это проблема всех шутеров, не только Warface.
SoLRoN
15.10.2015 06:22Скажите это пилотам AMX 1390, они тоже любят смех и шутки. Кроме того, не понятно что именно в AW в порядке. Давайте уже тогда статью о методах защиты от читов таких «медленных» игр, как танки, раз это отдельная тема. Хотя заголовок статьи не говорит об шуттерах, он говорит об онлайн играх. Именно поэтому считаю статью не только не полной но и устаревшей.
SexTools
07.10.2015 10:03Ребят, ботоводство, то есть автоматизация рутинных операций как-то сильно отличается по реализации от проникновения в механизм функционирования игрового приложения. И поэтому, наверное, не стоит его валить в один котёл с читерством.
ice2heart
07.10.2015 10:18Хм. А есть игры(серверы), где боты официально разрешены? Хочется пописать поведенческий код. (для RO писал в своё время пачку, было прикольно)
TheNightFury
07.10.2015 20:46Из последнего (подразумевая именно ИИ):
- Подразумевая нечестное управление — Payday 2 (lua).
- А вообще говоря, Source имеет ботов. Для mp-ветки предусмотрена возможность создания плагинов (С++), имеются специально заточенные под написание кода изменения механики игры фреймворки (Sourucemod, Eventscripts). Но это долго, зачастую и неясно.
- Есть ещё Garry's mod. Меньше геморроя, встроена возможность создания плагинов/модулей (пишется всё на lua).
Если же иметь ввиду то, что MR называет «ботами», то такое запрещено везде.
vikarti
13.10.2015 12:39зависит от того что мы называем игрой и ботом.
есть например D&C с http://the-game.ru/about/scripting/
есть например SecondLife где и свои клиенты написаные на чем угодно официально можно использовать и скрипты для работающих «внутри мира» объектов можно писать
dtestyk
07.10.2015 23:57Возникла интересная мысль: если разработчик стремится сделать игру похожей на реальный мир, а в реальности автоматизация рутинных действий приветствуется, то такая возможность должна быть и в самой игре, иначе она превращается в насос времени. Также можно рассматривать борьбу ботов и средств противодействия им как попытки ИИ пройти тест тьюринга.
В подтверждение этой мысли: попробуйте написать бота для coding games.
З.Ы. Понимаю, что нарушается игровой баланс, но и в реальности есть проблема «Нас 99 %», также как и проблема безработицы обусловленная автоматизацией.
Invision70
Как избавиться от разновидностей чита «Амиго»?
TIgorA
Внести издателя в AppLocker
6a6ypek
Расстрелять читеров со «Спутника».