Як стріляти в Avenger
Як я здобув перемогу над творцем читання для MMO-ігри
Наприкінці 2000-х я працював у нішевій компанії, яка розробляла MMO-гру. У нас була невелика команда та скромний прибуток, зате вірна аудиторія. Гра спиралася саме на навички, не пропонуючи звичних посилень і гравцям така система подобалася.
Так от одного разу до нас дійшли чутки, що для нашої гри з'явився чит, який почав викликати у гравців обурення. На той момент у нас працювало лише чотири програмісти, а оскільки цей факт комусь потрібно було розслідувати, я виступив добровольцем. Гравці були впевнені, що супротивникам вдавалося вбити їх у грі виключно завдяки читу. Ми намагалися переконати людей, що вивчаємо проблему, але при цьому поняття не мали, наскільки великий її масштаб.
Майте на увазі, що все, про що я тут говоритиму, вже давно неактуально. Наша гра підтримувала як Windows, так і Mac, але очевидною метою були системи Windows. Та й користувачі Mac складали лише 10% нашої аудиторії.
Я з'ясував, що цей чит продає якась китайська компанія, але швидко стало зрозумілим, що розробником була не вона. Ця компанія просто вкрала чит та перепродавала його. Я також дізнався, що вони продають й інші чити для багатьох популярних ігор, але з урахуванням нашої невеликої аудиторії мене дивувало, що ми взагалі виявилися цікавими для них.
У результаті я вирішив придбати копію цього читерського програмного забезпечення для свого домашнього ПК, оскільки мені не хотілося пов'язувати з покупкою наші робочі IP-адреси. У мене був ПК з Windows, тому я зміг без проблем встановити його і оцінити, що саме цей чит пропонує.На той момент я мало працював із кодом гри під Windows, переважно розробляючи версію для Mac та кросплатформове ігрове ядро (це була гра на OpenGL).
Як з'ясувалося, чит давав цілком типові переваги: можливість бачити та стріляти крізь стіни, нескінченні патрони, доповнення карт та автоприцілювання. Ставши клієнтом зломщиків, я також отримав доступ до їхнього форуму, тому міг бачити, що кажуть інші покупці про нашу компанію (тоді нам ще не вистачало інформації, щоб їх упіймати). Не скажу, що учасників обговорення було багато (можливо, з десяток), тож я сподівався, що й чит використовують мало хто. Його автор теж писав на цьому форумі, хоча здебільшого у справі і без зайвих міркувань. Як виявилося, за компанією стоять двоє людей. Один писав усі чити, а інший займався їхньою реалізацією. Вартість читання складала близько $30/місяць, що перевищувало тариф на саму гру.
Я вирішив зосередитись на кількох речах. По-перше, я хотів навчитися зламувати гру в Windows, після чого знайти спосіб ускладнити цей процес або хоча б уповільнити розробника читання, та й у результаті визначити, хто саме його використовує.
Чесно кажучи, це виявився, мабуть, найвеселіший проект за всю мою кар'єру, в процесі якого я два місяці бився з грамотним противником!
Я кілька днів провів за читанням про злом ігор під Windows і вивченням усіляких технік, що використовуються для цього, ігноруючи все, що стосувалося більш складних ігор від великих компаній. З прочитання форуму я зрозумів, що автор читає сам грає в нашу гру, хоча тоді ще було незрозуміло, хто це конкретно. Стало ясно, що сенс у створенні читання полягав не так у заробітку грошей, як у його особистому використанні для переваги.Заробіток тут виступав просто приємним бонусом. Call of Duty або інші великі проекти, які ці хлопці зламали, приносили значно більший дохід.
Після недовгого вивчення читання я почав шукати способи зробити його оновлення у нашій грі більш проблематичним. В основі ігрового циклу лежав масив видимих наразі людей/транспортних засобів (базово до 128 одиниць). Ця фіксована структура містила основну частину динаміки гри, тому ясно, що з написанні чита вона була легкої мішенню. Тим не менш, якщо в процесі вашого знаходження в грі сервер не отримує регулярно heartbeat-пакети, то через короткий проміжок часу вас відключає. Тому займатися налагодженням, перебуваючи онлайн, було неможливо. Ми також пропонували офлайн-режим для відпрацювання навичок (у грі було безліч транспортних засобів та типів піхоти). Це був той самий ігровий цикл в унікальній ігровій «локації», що не потребує підключення до мережі. Виходить, автор розробляв код свого читання офлайн.
Наша гра була написана на суміші C, C++, Lua та JavaScript майже за десять років до того, як я прийшов у компанію. Код був страшний, дратував, і працювати з ним було тяжко. Проте застосування макросів C мало спростити завдання. У результаті спочатку за допомогою макросів і функцій доступу я пропрацював масив піхоти/транспорту, а потім для стандартних типів даних на кшталт локацій створив інші макроси, які по-різному шифрували вміст і зрушували значення. У результаті у кожної збірки виходили свої усунення. Я також створив тіньові значення, які дублювали (з різними зрушеннями) важливі дані, оскільки найчастіше чити створюються шляхом відстеження змін пам'яті у процесі гри.
Ці заходи не виключали чит повністю, але необхідний час його оновлення після кожного релізу стало значно збільшуватися, плюс поточний чит ставав менш ефективним досі виправлення. До того ж, за зломом стояла лише одна людина, і витрачання зайвого часу на оновлення чогось, що приносить мало прибутку, явно його не тішило. Я також змінив пайплайн OpenGL достатньо, щоб сильно утруднити оновлення читання, що дозволяло бачити і стріляти крізь стіни.
У нас у грі був спеціальний вид "транспорту", який ігрові менеджери та співробітники компанії використовували для спостереження за грою користувачів. За умовчанням цей транспорт був невидимий, але маскування можна було знімати, щоб лякати своєю появою тих, хто порушував правила. На форумі я прочитав, що читачі бачили наш транспорт завжди, тому в його присутності намагалися поводитися нормально. У результаті ми з програмістом сервера змінили код так, щоб цей транспорт був відсутній у загальному списку транспортних засобів, поки його не зроблять очевидним. Після цього люди на форумі почали скаржитися, що перестали розуміти, чи за ними спостерігають. Чомусь вони думали, що ми (в даному випадку я) дурні. Ха!
Тепер, вже зачепивши свого суперника, я вирішив з'ясувати, хто ж конкретно використовує його чит. Я знав, що зломщиків розлютила крадіжка їхнього бінарника, тому вони змінили його на завантаження читання під час запуску. У нашому додатку був лаунчер з різними ігровими налаштуваннями, тому чит повинен був бути активний в момент завантаження гри.
Тоді я вирішив, що для завантаження читання потрібен відкритий порт. У Windows є API, що дозволяє бачити, які на машині відкриті порти.З його допомогою виявилося неважко з'ясувати, які IP-адреси використовували хакери. У результаті всі, у кого були відкриті порти для цих IP-адрес, напевно, використовували чит. Коли я це виявляв, то відправляв серед наших даних запуску нешкідливий біт (у кількох місцях), який гра прочитувала. Потім бінарник гри встановлював інший нешкідливий біт у кількох пакетах, що відправляються на сервер у процесі виконання гри, щоб код сервера бачив і помічав цього користувача як читера.
Після випуску релізу з оновленим кодом ми змогли бачити, хто з наших клієнтів використовував чит, включаючи його творця (який, напевно, був першим, оскільки йому потрібно було протестувати нову версію). На щастя, всього таких користувачів виявилося кілька десятків. Після цього ми з командою весело порадилися, вирішуючи, як вчинити з отриманою інформацією. Серед ідей звучало повільне зниження точності будь-якої зброї в ході ігрового сеансу, зміна образу персонажа на клоуна Бозо або просто додавання в небі величезної стрілки, яка вказувала б на читера, але йому самому була не видно. Зрештою, ми вирішили, що найкращим рішенням буде пару тижнів нічого не робити, а потім просто забанити чітерів за загальне порушення умов надання послуг.
Після цього компанія зломщиків здалася і видалила свій чит. Зрештою, він реально цього не коштував.
Сьогодні вже ця історія не є актуальною. Але кілька місяців вона нас розважила, і я був задоволений тим, що «переміг» у цій невеликій сутичці. Не розумію, звідки у деяких людей береться потяг шахраювати в іграх. Мені здається, що використання читів швидко робить гру нудною, і багато хто після цього просто перемикається на щось інше.Весь зміст ігор, особливо тих, що ґрунтуються на розвитку навичок, а не вдачі — це протистояння. Якщо цей аспект прибрати, то інтерес до гри швидко зникає. Крім того, подібні чити псують ігровий досвід для тих, хто отримує задоволення від чесної гри, оскільки їх навичок стає недостатньо.
Ігри на кшталт World of Tanks (у яку я граю сьогодні) регулюються сервером, тому всі рішення, засновані на вступі, що надходить від користувача, є безпечними. Таке рішення робить зламування гри для отримання переваги вкрай складним або навіть неможливим. Але шляхи для читерства залишаються. Наприклад, у WoT популярна схема, коли люди платять компаніям за вхід у гру в періоди низької активності, завбачливо створюючи безліч «пасивних» танків, які згодом знищують, отримуючи величезну кількість досвіду та, власне, привід для вихваляння.
Особисто мені це здається дурістю, і адміністратори WoT повинні мати можливість виявляти таких гравців та акаунти, які вони використовують для створення «пасивних» танків. Але насправді це не відбувається. Хоча з урахуванням того, що сервери збирають аналітику по кожному гравцю, кожному танку та кожній карті, це не повинно складати труднощів. Як і у випадку більшості розрахованих на багато користувачів ігор, тут все впирається в бажання зробити якісний продукт і готовність виділяти на це свій час і кошти.
Сьогодні технології протидії читам представляють серйозний бізнес. Так, часом вони можуть псувати ігровий досвід для чесних гравців, але без них нікуди, бо інакше розробники читів здобудуть перемогу і грати стане зовсім нецікаво. Тут як у війні — нападник і оборонець безперервно розробляють нові бойові засоби для отримання переваги.
У моєму випадку битва хоча б вийшла веселою! Незабаром після цього я пішов з тієї компанії і частину кар'єри, що залишилася, створював програми для iOS, поки не вирушив на пенсію.