Authors: metal-crow
For responses to Requests
For Push Requests
This is a good overview Flatbuffers are used for the data storage itself. Examples of this at a byte-level are at this speadsheet.
Of note, the raw flatbuffer itself is not sent to the server. It is wrapped in another struct before being sent. This is of the form:
FlatbufferWrapper {
uint8_t: Packet type.
Sending = 4, 5, 6, 7. Type 4 is normal client packet, type 7 does not have any main data and is used as the client heartbeat. Other 2 are login, logout
Receiving = 5 6 ? ?. Type 5 is normal client packet response. 6 is PushRequest type, and doesn’t have a packet number, and is a uint16_t
uint32_t: packet number. Incremented per packet, response has the matching number.
flatbuffer itself
}
Protobuf Inspector (online as https://protobuf-decoder.netlify.app/) is a good tool to RE the packets.
The first header in the data/flatbuffer always contains a byte representing the message type. A mapping for these to their string names is embedded in the binary.
For Requests (client initiates communication with server), it's FromNet::RequestManager::RequestFunctionNameList at address 141a73420.
For Push Requests (Server initiates communication with client), it's FromNet::RequestManager::PushRequestFunctionNameList at address 141a735a0.
7. RequestCreateBloodMessage
17. RequestGetBreakInTargetList
27. RequestGetSignList
33. RequestUpdatePlayerStatus