Evernews 56968

Декомпилируй это: как делают читы для Among Us

7
Поделиться
Поделиться

Разработчики явно не ожидали свалившейся на них популярности и не подумали о защите.

Декомпилируй это: как делают читы для Among Us

Через два года после релиза кооперативно-детективная адвенчура Among Us неожиданно стала невероятно популярной. Вместе с игроками в Among Us появились читеры, способные менять ники, писать в чат от имени игроков и проворачивать другие трюки.

Исследователь безопасности Джеймс Себри решил выяснить, как работают читы для Among Us и насколько вообще сложно взломать игру. Свои эксперименты Джеймс проводил на PC-версии игры — просто потому, что так проще.

Себри не стал покупать читы и исследовать принципы их работы. Вместо этого Джеймс попытался написать для Among Us набор собственных читов. Ему это удалось.

Что можно делать с помощью читов
  • Выдавать себя за других игроков.
  • Определять самозванцев.
  • Писать в чат от имени других игроков.
  • Менять цвет своего героя или героев других игроков.
  • Ходить через стены.
  • Снимать ограничение на дальность обзора.
  • Убивать самозванцев и любых других игроков.
  • Управлять персонажами других игроков.
  • Телепортировать своего героя и других игроков.
  • Проникать в приватные лобби.
  • Снимать кулдауны.
  • Ускорять персонажа.
  • ...и массу других вещей.

Хотя Among Us невероятно популярна, Джеймс обнаружил, что с точки зрения защиты в игре отсутствуют базовые вещи. Например, сервер почти стопроцентно доверяет клиентской части, практически никак не валидируя действия игроков.

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

Джеймс Себри

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

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

Результат работы встроенного античита

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

Сделать это достаточно просто. Among Us создана на движке Unity, игровой код написан на языке C#. Прогнав библиотеку игры через декомпилятор — можно воспользоваться dotPeek или dnSpy, — Себри получил восстановленный игровой код, который можно было менять по своему усмотрению.

Декомпилированный геймплейный код выглядит так

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

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

Джеймс Себри

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

Код можно поменять практически на лету

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

Основная проблема заключается в том, что код игровой логики во многом неполон. Значит, придется прибегнуть к боле традиционным методам обратной разработки — например, с помощью Ghidra или другого похожего приложения.

Джеймс Себри

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

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

В качестве простого примера Джеймс решил создать чит, меняющий скорость игрока. Сперва он изучил игровую логику Among Us и выяснил, как можно добраться до параметра скорости.

Оставалось взять смещение, выданное декомпилятором, вставить его в собственную библиотеку — ее код можно посмотреть здесь — и запустить игру.

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

Следующий эксперимент — смена цвета персонажа. Для этого Серби понадобилось отыскать в игровой логике два фрагмента кода: поиск персонажа и функцию, собственно задающую его цвет.

Теперь он мог менять цвет не только своего героя, но и любого другого участника сессии — нужно было лишь вбить в код его идентификатор.

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

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

В целом, считает исследователь, на момент изучения — это был октябрь — Among Us практически беззащитна перед хакерами. Разработчиков можно понять: они явно не ожидали, что их проект станет таким популярным, и не планировали вкладываться в защиту.

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

Джеймс Себри

Серби несколько раз пытался выйти на связь с разработчиками. Те не ответили, но в студии Innersloth, уверен Джеймс, отлично знают о проблемах Among Us и наверняка занимаются устранением основных дыр в системе безопасности.

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

Теги: Among Us, Технологии, Игры, История
Evernews
7895 подписчиков
Слух: новое поколение Radeon построят на базе чиплетов с улучшенной трассировкой лучей