among-us-protocol
among-us-protocol copied to clipboard
A writeup of the network protocol used in Among Us, a game by Innersloth.
Among Us Protocol Research
Note: This repo is outdated, it is correct up to and partially including the Airship Update. PRs are welcome!
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, however Innersloth has provided support in the construction of this wiki; for the most part 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.
To show all game traffic:
udp.port in { 22023 22123 22223 22323 22423 22523 22623 22723 22823 22923 }
To show only reliable packets (recommended as movement, pings, and acks can add a bunch of noise):
udp.port in { 22023 22123 22223 22323 22423 22523 22623 22723 22823 22923 } and data[0] == 01
If you would like to discuss the Among Us protocol or client modding with me or others interested in such topics, you are welcome to join the NodePolus Discord server, or Reactor
Table of Contents
-
Packet Structure
- Protocol Data Types
- Packed Integers
- The Structure of a Hazel Message
-
The
Vector2
Type -
Packet Types (
SendOption
)-
0x00
Normal -
0x01
Reliable -
0x08
Hello -
0x09
Disconnect -
0x0a
Acknowledgement -
0x0b
Fragment -
0x0c
Ping
-
-
Enums
-
AlterGameTag
-
ChatNoteType
-
Color
-
DisconnectReason
-
GameKeyword
-
GameOverReason
-
GameState
-
Hat
-
KillDistance
-
LimboState
-
Map
-
Pet
-
QuickChatMode
-
ReportOutcome
-
ReportReason
-
Skin
-
SpawnFlag
-
SpawnType
-
SystemType
-
TaskBarMode
-
TaskType
-
- The Different Types of IDs
-
Root Message Types
-
0x00
HostGame -
0x01
JoinGame -
0x02
StartGame -
0x03
RemoveGame -
0x04
RemovePlayer -
0x05
GameData -
0x06
GameDataTo -
0x07
JoinedGame -
0x08
EndGame -
0x09
GetGameList -
0x0a
AlterGame -
0x0b
KickPlayer -
0x0c
WaitForHost -
0x0d
Redirect -
0x0e
ReselectServer -
0x10
GetGameListV2 -
0x11
ReportPlayer
-
-
GameData
andGameDataTo
Message Types-
0x01
Data -
0x02
RPC -
0x04
Spawn -
0x05
Despawn -
0x06
SceneChange -
0x07
Ready -
0x08
ChangeSettings -
0xcd
ClientInfo
-
-
RPC
Message Types-
0x00
PlayAnimation -
0x01
CompleteTask -
0x02
SyncSettings -
0x03
SetInfected -
0x04
Exiled -
0x05
CheckName -
0x06
SetName -
0x07
CheckColor -
0x08
SetColor -
0x09
SetHat -
0x0a
SetSkin -
0x0b
ReportDeadBody -
0x0c
MurderPlayer -
0x0d
SendChat -
0x0e
StartMeeting -
0x0f
SetScanner -
0x10
SendChatNote -
0x11
SetPet -
0x12
SetStartCounter -
0x13
EnterVent -
0x14
ExitVent -
0x15
SnapTo -
0x16
Close -
0x17
VotingComplete -
0x18
CastVote -
0x19
ClearVote -
0x1a
AddVote -
0x1b
CloseDoorsOfType -
0x1c
RepairSystem -
0x1d
SetTasks -
0x1f
ClimbLadder -
0x20
UsePlatform
-
-
InnerNetObject
Types-
SkeldShipStatus
-
MeetingHud
-
LobbyBehaviour
-
GameData
-
PlayerControl
-
MiraShipStatus
-
PolusShipStatus
-
DleksShipStatus
-
VoteBanSystem
-
PlayerPhysics
-
CustomNetworkTransform
-
-
The
SystemType
Implementations-
ReactorSystem
-
SwitchSystem
-
LifeSuppSystem
-
MedScanSystem
-
SecurityCameraSystem
-
HudOverrideSystem
-
AutoDoorsSystem
-
SabotageSystem
-
HqHudSystem
-
DeconSystem
-
DoorsSystem
-
-
Miscellaneous
-
The Structure of the
GameOptionsData
Object - Converting Game IDs to and from Game Codes
- Reading the Client Version
-
Map-Specific IDs for Vents and Tasks
-
The Skeld
- Vents
- Tasks
-
MIRA HQ
- Vents
- Tasks
-
Polus
- Vents
- Tasks
-
The Airship
- Vents
- Tasks
- Ladders
-
The Skeld
-
The Structure of the