{"id":2175,"url":"\/distributions\/2175\/click?bit=1&hash=803b6e1bcbd9dfc4ba9456fda887a878c80d24df8d3a575913b14876e18923a5","title":"TJ \u0437\u0430\u043a\u0440\u043e\u0435\u0442\u0441\u044f 10 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f \u2014\u00a0\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0430\u043d\u043e\u043d\u0441 \u0441 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438","buttonText":"\u0427\u0438\u0442\u0430\u0442\u044c","imageUuid":"d1d355d8-93a3-5140-aeae-14b03046b760","isPaidAndBannersEnabled":false}
Офтоп
Oh HiMARS

Как я мог похоронить Call of Duty 4: Modern Warfare, но воздержался. Сага об ошибках разработчиков

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

Кадр из ролика Mazarini and Parad0x: Play with soul

Современная Call of Duty вызывает много вопросов: кто-то обвиняет игру в конвейерности, кто-то — в том, что её движок невероятно устарел. Однако в истории серии были и гораздо более светлые моменты.

Я познакомился с CoD ещё с первой части, во вторую даже пытался играть на соревновательной уровне. К выходу «четвёрки», ставшей в своё время настоящим прорывом для жанра шутер, я уже осваивал азы программирования, активно общался в нескольких сообществах вроде codru, поигрывал в паре любительских команд на непризовых турнирах и катал матчи с рандомными англоязычными игроками из IRC-канала codmix.

На тот момент — начало 2010 года — игра вполне могла занять свою нишу в киберспорте: имелся и хороший любительский мод, убиравший случайности и лишние обвесы и заточенный под соревновательную составляющую. Имелось и большое комьюнити, которое активно поддерживало как разработчиков мода, так и всевозможные оффлайновые активности. Имелись и спонсоры, готовые вкладывать в эти активности средства и проводить киберспортивные турниры. Конечно, об уровне CS мечтать было глупо, однако стать чем-то вроде современного R6: Siege «калда» в своё время вполне могла.

Но издатель так не считал. Activision уже тогда решила поставить разработку на конвейер и отказалась от дальнейшей поддержки продукта спустя семь относительно небольших патчей и один игровой год. С конца 2009 года комьюнити осталось один на один с проблемами, багами и читерами.

Qnatek Summer Battle-2012 в Киберспорт-арене в Киеве

Отчасти спасал Punkbuster, всем известный античит, позволявший делать скриншоты с экрана игрока и проверять пользовательские переменные. Отчасти спасало сообщество разработчиков, написавшее отличный мод Promod (его я упоминал выше). Отчасти от моментального вымирания игру спасла и Infinity Ward, компания-разработчик, буквально в первый год опубликовавшая набор инструментов для мододелов: в нём содержались исходники практических всех скриптов движка IW и утилиты, позволявшие эти скрипты редактировать и компилировать.

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

Прежде чем продолжить историю, я постараюсь кратко пояснить как работала игра: существовали основные скрипты (файлы формата .gsc), где на близком к C языке описывалась игровая логика. Набор этих файлов компилировался в отдельные fast-файлы (.ff), через которые движок непосредственно создавал для игрока игровой мир и все происходящие в нём процессы. Fast-файлы, насколько я помню, были «исполняемыми файлами» для движка, для их выполнения ему уже не требовался интерпретатор. В этих же файлах находились все игровые меню (их написание во многом совпадало с написанием интерфейсов через win32api). Шутка была в том, что большая часть этих скриптов выполнялась на стороне сервера. Клиенту нужны были только файлы с настройками игровых режимов и те самые меню.

Самое популярное видео о CoD4 авторства российско-чешского киберспортсмена Mazarini. 13 минут крутых фрагов и мемов.

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

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

К 2011 году я активно работал вместе с коллегой из РФ над созданием аналога HLTV: плеера, который позволял бы посторонним игрокам подключаться к киберспортивным матчам и наблюдать их от лица любого игрока. Этот плеер мог стать отличной альтернативой стандартным демкам (олды тут?) — неудобно записанному процессу матча от лица одного игрока, который без сторонних утилит невозможно было ни перемотать, ни поставить на паузу.

Скриншот из игры. Credit: IGN

Сразу скажу, что идея наша не выстрелила: во-первых, Activision заявила о запуске собственного CoDTV в Modern Warfare 3, а во-вторых, без интереса спонсоров и оказуаливания серии в целом киберспортивное её комьюнити окончательно начало погибать, хотя на стандартных игровых серверах всё ещё были тысячи игроков.

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

А теперь к самой сути. Так уж сложилось, что, несмотря на хитрую систему Punkbuster и попытки разработчиков банально обезопасить игру от script-kiddies, проверка файловой системы игры выполнялась по принципу "если размер файла совпадает с тем, что получился у нас тут в IW, значит всё окей". В самом Punkbuster была возможность проверки md5-сумм, но эта фича использовалась только для проверки файлов модификаций (это отдельные небольшие mod.ff и mod.iwd) — чтоб игроки себе текстурки соперников не заменяли на яркие и броские. Проверять хэши стандартных фастфайлов никто не собирался, да это и было логично.

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

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

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

Но как же проверка размеров файла, спросите вы? Да никак, отвечу я. Файл считывался движком до первого неизвестного ему символа, поэтому готовый fastfile можно было просто открыть каким-нибудь блокнотом вроде Notepad++ и забить пустыми символами вплоть до необходимого размера в условные 150 миллионов байт.

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

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

Но что это нам даёт? Каким образом можно было похоронить игру? Что за кликбейт в заголовке?

Никакого кликбейта. Просто IW допустили ещё одну глупейшую ошибку. Дело в том, что пользовательские переменные можно было устанавливать командами серверных скриптов (командой setDvar) и... теми самыми menu-файлами, которые мы на этот момент уже могли спокойно редактировать!

Причём все менюшные команды выполнялись только на стороне игрока, сервер не имел к ним никакого отношения! В файлах меню можно было спокойно прописать последовательность действий: "если игрок нажал клавишу K, меняем значение переменной tod_howard с четвёрки на 76".

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

Все игровые переменные можно было найти в исполняемом файле игры iw3mp.exe, открыв его блокнотом. И редактирование одной буквы в названии переменной позволяло обходить её отслеживание PunkBuster'ом.

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

И весь этот бандитский читерский арсенал находился в моих руках: опубликуй я его в свободном доступе, IW вместе с Punkbuster уже ничего бы не могли сделать, потому как против такой особенности движка не попрёшь.

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

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

Сразу скажу, я своим изобретением не пользовался: на стоковых серверах я не играл, а пользоваться таким преимуществом в соревновательных режимах считал бессмысленным (в чём тогда состоит соревнование?)

Но факт остаётся фактом: простая публикация необходимых файлов или хотя бы инструкция по эксплуатации сразу нескольких уязвимостей игры могли разрушить ещё активное тогда сообщество и повредить в том числе Modern Warfare 2, чьи исходники некоторые умельцы тоже научились читать и компилировать. А в дальнейшем — Modern Warfare 3.

Я публикую эту историю сейчас, когда в CoD ниже Black Ops 3 уже никто не играет, а в новых версиях движка часть дыр была прикрыта, пускай и коряво.

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

С полей диванных баталей,
Поцелуев игровой.
Специально для TJournal.

0
20 комментариев
Написать комментарий...
Oh HiMARS
Автор

Ждал редизайна, чтобы не идти с этой телегой на D*F.

Ответить
Развернуть ветку
Ded Pihto

Не хотел чтоб это прочитали больше 500 человек?

Ответить
Развернуть ветку
Педагогический Кирилл

Call of Duty: Kerchensky Warships

Ответить
Развернуть ветку
Ded Pihto

История о том как Поцелуев мог показать всем кузькину мать но пожалел

Ответить
Развернуть ветку
Oh HiMARS
Автор

Тебе не понравилось?(

Ответить
Развернуть ветку
Pavel Averyanov

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

сообщите о ней разработчику

пробовал?

А так, реверс всегда интересен, грасиас

Ответить
Развернуть ветку
Oh HiMARS
Автор

Сообщить пробовал, насколько я помню, ответили, что рассмотрят вопрос и забили.

Алгоритм на самом деле довольно сложен в том плане, что копавшихся в дебрях стандартных файлов моддеров практически не было: исходники и так лежали открыто, никто и не пытался скомпилить копию дефолтного файла:)

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

Ответить
Развернуть ветку
Pavel Averyanov

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

Ответить
Развернуть ветку
Сергей Поляков

стоит эту картинку добавить

Ответить
Развернуть ветку
Сергей Поляков

из мувика Катхи

https://www.youtube.com/watch?v=ueAKU6LrPpo

Ответить
Развернуть ветку
TheVengord

А где исходники для модов то лежали? На гитхабе?

Создал бы коммит.

Ответить
Развернуть ветку
Oh HiMARS
Автор

Исходники модов я не трогал (хотя у меня были исходники promod от его разработчиков).
IW публиковали все файлы просто самораспаковывающимся архивом.

Ответить
Развернуть ветку
Денис Баширов

Хм.. Я думаю ты не один до этого додумался, потому что когда в MW2 стали забивать на поддержку читеры стали творить совершенно дикие непотребства. Помню как при поиске в лобби захожу на сервер, где читер развлекается как хочет, но при нажатие ESC меня встречает ... пустое меню. То есть я не могу выйти в главное меню, Никах пунктов тупо нет, пришлось грохнуть процесс с игрой. Хотя возможно это связано с тем, что в один момент научились создавать кастомные сервера и регистрировать их в официальном IW как настоящий сервер для игроков из лобби.

Ответить
Развернуть ветку
Oh HiMARS
Автор

Да, это был кастомный сервер. В MW2 были другие уязвимости, более простые: что-то вроде remote procedure call, который запускался с локального компа. И никак вызов функций защищён не был.

Там же вообще альтернативный мастер-сервер создавали, alterIWnet.

Ответить
Развернуть ветку
Федеральный шар
совпадало с написанием интерфейсов на Си
Ответить
Развернуть ветку
Oh HiMARS
Автор

Спасибо, поправил формулировку. Подразумевал использование Win32api

Ответить
Развернуть ветку
Водный Даниль
хороший любительский мод, убиравший случайности и лишние обвесы

Ты один из этих особо одаренных, которые кукарекали на тапки или п90?

Ответить
Развернуть ветку
Трудящийся цветок

Код4 настолько конечно революция в шутерах, что как шутер он говно.

Ответить
Развернуть ветку
Столичный микроскоп

Комментарий недоступен

Ответить
Развернуть ветку
Перловка, сэр

Форматируй текст, ради бога! Выдели главное цветом или начертанием

Ответить
Развернуть ветку
Читать все 20 комментариев
null