Исходный код among us

Обновлено: 05.07.2024

Among Us Protocol Research

Note: An update to this repo regarding the changes in The Airship update (2021.3.31) is currently underway. Most of the information is still correct, and the sections involving ShipStatus and system serialization are the most outdated.

Contained in this repo is my detailed explanation of the netcode behind Among Us, a game by Innersloth. Myself and others have spent countless hours scanning the game's decompiled source code as well as manually dissecting each and every packet sent by the game. Not all of this information will be correct, though it is safe to assume that almost all of it is, and those parts that I am uncertain of will be labeled as such.

I do not work for Innersloth, nor do I have any connection to anyone at Innersloth; this is just the result of an obsession in discovering how the game works.

This repo does not currently contain instructions on how to decompile/deobfuscate the game.

To intercept packets, I recommend using Wireshark with one of the display filters below.

As Among Us is actively updated, you may want to use the latest build from the master branch if you want to play on the latest version of Among Us that supported by Impostor.

If you want to play on an older version of Among Us, you can download old releases from here, however these versions are less supported.

  • All Among Us features are implemented. It is a full replacement for the official server.
  • Plugin support.
  • Server-sided anticheat.

If you just want to play on a server hosted by someone else, you need to configure your client to connect to an Impostor server. Please go to this website to set up your client by following the instructions for your OS there.

See the docs for instructions on how to set it up.

See TROUBLESHOOTING to solve issues with the Impostor client or the server.

This software is distributed under the GNU GPLv3 License.

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

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

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

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

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

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

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

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

Джеймс Себри

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

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


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

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


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

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

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

Джеймс Себри

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


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

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

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

Джеймс Себри

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

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


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

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

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

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

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

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

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

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

Джеймс Себри

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

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

Читайте также: