Недавно в комментариях к моей статье про первые читы в Bless обсуждался вопрос борьбы с читерами.
Я бы хотел отдельной статьей развить эту тему.
Когда-то давно читы типа iddqd и iseedeadpeople придумывали сами разрабочтики, мы в ввиду отсутствия интернетов узнавали их из различных игровых журналов или от друзей.
Для одиночных игр читы это своего рода easy (а зачастую и god) mode. Когда ты играешь в HoMM3 1 против 7 компов на самом сильном уровне и увел героя на пару ходов от замка и на него напал внезапно комьютер, а ты лезешь в artmoney и вместо 10 скелетов делаешь 10 000 — это ерунда.
Проблемы начинаются в сетевых играх. Я бы классифицировал следующие читы:
- speedhack
- wallhack
- auto-aim
- zoomhack
- flymode
- dupe
- invisible/geo-hack
Ну и что-то экзотическое типа DoS-атаки (не путать с DDoS), купола как в АА и тд. А макросы это не читы, а унылость геймплея, которую проще заменить кликером.
Современная онлайн игра имеет клиент-серверную технологию взаимодействия. На стороне клиента рассчитывается часть данных, а на сервере — взаимодействие между игроками и проверка полученных данных от игрока.
Почему нельзя сделать такую игру, где на стороне сервера будут просчитываться все действия всех игроков, а на стороне клиента будет лишь «отрисовка» кадра?
Онлайн играм десятки лет, но как были читы в том же CS, так и продолжают быть. Пробовали бороться всякими программными клиентами на стороне игроков, блокировкой по Steam, анализом на стороне серверной части — как были читеры в контре, так они и продолжают там быть.
Если мы доживем до стриминг-игр, когда игроку просто передается видео-кадр игры, а от игрока на сервер передается нажатие клавиш, тогда читерство почти умрет, вернее перейдет в сторону поиска багов сервера, а не только клиента.
Почему появляются читы и как их находят?
Любая игра это набор ресурсов и исполняемый код. Чтобы любой дурак не мог распаковать игру и собрать «улучшенную версию», в последние годы игровые ресурсы и исполняемый файл пакуют с обфускацией (запутыванием) кода. Грубо говоря, не имея нужного ключа — распаковать такие файлы нельзя. Но это только в теории.
Чтобы двигаться дальше, нужно эту теорию немного подтянуть. Я буду объяснять на пальцах, так что к терминологии гуру ИБ могут не приставать=). В криптографии (это не то же самое что обфускация кода, но суть не в этом) используют 2 вида шифрования: симметричное и несимметричное.
Симметричное шифрование — это когда шифруется и расшифровывается информация с помощью одного ключа.
Ассиметричное/несимметричное шифрование — когда для зашифрования сообщения/файла/трафика/etc используется один ключ (открытый ключ), а для расшифрования — другой (закрытый).
Открытый ключ так называется не просто так. Это публичная информация, которая, например, есть у сайта https://mmozg.net в SSL сертификате, который вы можете посмотреть нажав «замочек» в адресной строке браузера.
Закрытый ключ хранится только у владельца ключа.
Идеально бы было, чтобы все ресурсы и исполняемые файлы были запакованы или зашифрованы так, чтобы злоумышленник не мог к ним добраться. Но возникает проблема с хранением ключа. Если вы работаете в своем браузере и зашли по HTTPS на сайт/подключились к серверу, то трафик между вами никто не прочитает. Но обе стороны будут знать содержимое этого трафика, ведь у вас и у сервера есть ключи для расшифрования информации, иначе зачем вам заходить и читать сайт, который выдает в ответ абракадабру?
То же самое и с пакетированием (упаковкой). Чтобы вы могли запустить игру — где-то на вашем компьютере должен быть ключ (или несколько ключей) для чтения ресурсных файлов. Это симметричный ключ, причем достаточно простой. Иначе бы процедура расшифровки файлов (хоть она и быстрее шифрования этих же файлов) налету для игр в 10-50Гб размером длилась бы слишком долго.
Он лежит в исполняемом файле. Казалось бы любой злоумышленник может залезть и прочитать содержимое файла простым дизассемблированием. Именно тут встречается пакетирование исполняемых файлов. Грубо говоря файл максимально запутывают, чтобы дизассемблирование было очень сложным, ставят ловушки на определение дизассемблера и тд.
Есть успешные упаковщики, но они стоят много денег, тратят много ресурсов и все-равно их можно взломать, начиная с умного дизассемблирования, заканчивая снятием дампа памяти.
Это значит, что выдавая потенциальному злоумышленнику файл, пусть даже упакованный и зашифрованный, вы не имеете гарантий от взлома и замены файла нужным злоумышленнику файлами.
Что мы можем сделать, чтобы защитить игру от читов?
Мы можем повесить условный гейм-гвард, отдельный процесс, который будет контролировать работу вашей игры. Для этого данный процесс так же нужно будет защитить, а значит так же можно и взломать. При этом данный файл по сути руткит, а значит потенциально опасен, если сторонний злоумышленник научится удаленно управлять им без вашего ведома. Это может привести к взлому вашего компьютера, запуска крипто-локера с просьбой перечислить на биткойн-счет много-много денег.
Мы можем зашифровать канал обмена информацией, увеличив размер передаваемых пакетов (трафика) и снизив скорость работы. Но так как все нужные ключи шифрования лежат в самом клиенте — подменить их не составит труда, было бы желание.
Мы можем контролировать корректность файлов путем отправки периодической каких-то проверочных значений. Например, хэша исполняемого файла игры и сравнивать его с «оригиналом» на стороне сервера. Но никто не мешает читеру всегда выдавать хэш, посчитанный для правильного файла.
Хэширование — преобразование данных любой длины в строку определенной длины. Хеширование необратимо и должно исключать коллизии (когда 2 разных файла выдадут одинаковый хэш).
Чтобы вышеперечисленное работало эффективно, нужно постоянно обновлять файлы геймгварда и исполняемого файла игры. Тогда скачавший/купивший чит игрок вынужден будет ждать очередного «релиза» чита. Это, имхо, самый эффективный способ борьбы с читами, но его редко юзают.
Причина простая — читерский софт может работать не с исполняемым файлом, а с данными, что загружены в память и менять их там на ходу. Чтобы этого не было и нужен геймгвард, но читерский софт может работать так же по принципу руткита и прятаться от геймгварда, зная логику его работы.
Поэтому геймгвард нужно обновлять даже чаще, чем саму игру. А это ведет к тому, что очень сложная программа на вашем компьютере будет менять логику своей работы с каждым патчем и у кучи людей такой фокус не пройдет из-за кривой системы или кривых рук разработчиков геймгварда. Это повлечет риски остаться без легитных игроков, вайна на форуме и тд. Сколько в жизни вы видели постов на форуме про «ваш античит зависает, НИПАИГРАТЬ»?
Можно на сторону клиента оставить вообще минимальные расчеты, это при прямых руках разрабов избавит игру от дюпа (он делается подменой пакетов обычно), но спидхак, воллхак, зумхак, флаймод и тд будут работать.
Сделать расчет движения игрока постоянным на стороне сервера не выйдет, так как для этого нужны очень-очень большие каналы и очень-очень мощные серваки (вообще-то кластер серверов) у издателя.
Даже если какая-то проверка и существует (на самом деле нет), то сервер проверит обращения по переносу предметов в рюкзаке, взаимодействие с вендорами-НПЦ и другими игроками посредством трейда/аукциона и тд. Проверит ли он вашу скорость передвижения или Z-координату? Думаю что нет. Всем наплевать.
Но ведь кроме технических мер можно использовать и организационные?
Из обращений в саппорт Инновы:
— добрый день, после обновления вашего Фроста у меня перестала работать данная программа: скриншот_la2walker.jpg. Что мне нужно сделать, чтобы она заработала!!!
Во-первых, это адекватное количество адекватных ГМов с нормальной компетенцией в своей работе. А если они еще при этом не будут рисовать шмотки за реал мимо кассы — так вообще на них молиться можно. Но как факт — все ГМы продажные (в РФ точно), может не конкретные люди, но во всех компаниях можно легко найти нужного «специалиста». Плюс платят за такую работу мало и там сидят весьма некомпетентные товарищи.
Во-вторых, нужно мониторить сайты читеров (а они известны всем), особенно на предмет так называемых «паблик-читов» (тех, что доступны любому и не «лочатся» под конкретного покупателя). Нужно иметь ряд специалистов, которые будут читать такие сайты, качать/покупать свежие читы и бороться с ними. Практика показывает, что проактивной работой никто не занимается. Убейте интерес к игре «куполами» — возможно будет реакция.
В-третьих, бан по hardware id/steam-аккаунту и тд. Представьте что вы Valve и продаете контру, плюс миллионы других игр через Steam. Если вы заблочите Steam-аккаунт читеру в контре и он потеряет доступ ко всем купленным играм — это остановит многих, но не тех, кто под читерство будет использовать свежий акк стима. Плюс этот игрок пойдет и засудит вас за то, что он читерил в контре, а вы заблочили ему доступ к купленной игре про май литл пони. Поэтому этот способ просто лишит вас доступа к контре по вашему купленному ключу, но для условно-бесплатных игр финансово наказать читера не выйдет.
Вместо стима можно использовать тот же 4Гейм Инновы. Написать в пользовательском соглашении, что чит в любой из игр Инновы приводит к блокировке аккаунта со всеми играми. Это юридически проще, особенно если игры условно-бесплатные, но не защищает от свежезареганного аккаунта.
В-четвертых, можно законодательно запретить читерить как в Южной Корее. Я что-то не слышал про судебную практику данного закона. Как увижу наказание настоящего корейца — буду рад. Но что делать с русским, сгенерировавшим KSSN или купивший его у левого крестьянина из Кореи за условные 10 баксов? Ничего, а доказать, что читерил крестьянин и наказать его — это уже сюрреализм.
В-пятых, можно проводить «контрольные закупки», то бишь внезапные волны банов, с выдачей предупредительных блокировок. Это требует меньше времени, чем постоянно держать ингейм-ГМов, но такое используют обычно по факту засилия читеров, когда в паблике лежат уже месяц-другой читы и куча народу их юзает. Это плохая мина при плохой игре, а не борьба с читерами.
В-шестых, просто иметь нормальный саппорт и ингейм-ГМов, чтобы игроки могли жаловаться на читеров оперативно. Но тут мы возвращаемся к первому пункту, а так же к фарму данжей на флайхаке до последнего босса патей читеров, где никто товарища не сдаст. В Pefect World так фармили данжи многие.
Вместо итого:
В любом случае бороться с читерами можно ТОЛЬКО комбинированием практически всех этих методик, имея хороший штат специалистов. Но кому кроме игроков это нужно?
В России около 500-600 банков, многие из них работают с живыми клиентами (а не просто отмывают бабло), крутятся «сотни тысяч миллионов» денег, но я вам зуб даю, что в подавляющем большинстве из них нет достаточного штата специалистов по информационной безопасности, чтобы на 99% защититься от взлома. Все работает до стадии «пока жаренный петух не клюнет». В Бангладеше увели часть бюджета страны (ИЗ ЦБ!!!), воспользовавшись раздолбайством работников и, судя по всему, уязвимостью системы SWIFT. А вы хотите чтобы в вашем условном Bless боролись с читами профессионалы и читов не было бы.
Эта история в любом случае борьба меча и щита. Читеры совершенствуют меч до ядерной боеголовки, а разработчики отбиваются щитом из адамантия. А не ломают только неуловимого Джо. Либо хитрого Джо, который соблюдает гигиену и затраты на взлом которого перекрывают выгоду.
p.s. А еще читы это не только зло само по себе, но и возможность подхватить трояна и в лучшем случае стать частью чьего-то бот-нета и DDoS-ить сайт Пентагона периодически, а в худшем случае потерять бабло. Неужели вы думаете, что бесплатный сыр бывает в мышеловках?
23 комментария
(свежий FPS-Модуль Star Marine / Alpha 2.6)
Задаешься логичным вопросом — ну и какой интерес в таком геймплее? Игра на лидерборд разве что? Отлично помню, как бросил играть в Battlefield 3-4 изза этой лажи, когда меня убивали через полкарты Каспий… ээ… радиомаяком :D как и всю нашу сторону в 32 игрока. Может оно и к лучшему, что на столь раннем этапе такая проблема уже возникла, больше мотивации ставить хорошую защиту уже сейчас, пока модуль еще не стал частью полноценной Вселенной.
Никогда не понимал, в чем интерес играть с читами? Поднять так свое ЧСВ? Или просто мелкое злорадное желание испаскудить игру другим?
Многие игроки не понимают, что читы — это плохо, и это — весьма актуальная проблема. С макросами ещё хуже, в АА почти никто не осуждал ездящих на конях по кругу. Когда я сказал, что это ботоводство, меня поддержал аж один человек. Также, он заявил, что никому не даст свой аккаунт, а все остальные считают аккаунт-шаринг нормальным явлением. Нет же, это явно запрещено правилами и грозит баном! Так что, просветительскую работу тоже нужно проводить.
Или не обидится, а подхватит вирус, который сольёт пароли хакерам, и уже они отдадут всё золото голдселлерам. Если людям я ещё могу доверять, то быть уверенным, что они не наберутся вирусов — точно нет.
Также могут задонатить в игру с привязанной кредитки. Деньги потом никто не вернёт.
А ещё часто люди используют одинаковые пароли для игры, почты, контакта, фейсбука и других сайтов. Не надо быть хакером, чтобы проверить тот же аккаунт на самых популярных сайтах.
И да, я согласен с тем, что я иду на определенный риск доверяя свой аккаунт третьему лицу. Просто я никак не могу понять, почему вы ставите аккшаринк(речь не идет о десятке лиц) и макросы (которые поддерживаются любой игровой клавиатурой и мышкой) в один ряд с ботоводством и читерством