Difference between revisions of "CECD Savegame"
Meleemeister (talk | contribs) (Credit goes to User:Wwylele. https://gist.github.com/wwylele/29a8caa6f5e5a7d88a00bedae90472ed) |
(No difference)
|
Revision as of 19:47, 30 May 2024
CEC System Save (00010026) Format
Folder and files `CecDataPathType` [Root] ├── eventlog.dat └── CEC 10 ├── MacFilter___ ├── MBoxList____ 1 ├── <8-digit ID> 11 │ ├── MBoxInfo____ 2 │ ├── MBoxData.001 101 │ ├── MBoxData.010 110 │ ├── MBoxData.050 150 │ ├── MBoxData.<3-digit number> 100 + <number> │ ├── ... │ ├── InBox___ 12 │ │ ├── BoxInfo_____ 3 │ │ ├── _<12-char ID> 6 │ │ └── ... │ └── OutBox__ 13 │ ├── BoxInfo_____ 4 │ ├── OBIndex_____ 5 │ ├── _<12-char ID> 7 │ └── ... ├── <8-digit ID> ...
File MBoxList____
Offset | Length | Description |
---|---|---|
0x00 | 2 | Magic 0x6868 |
0x02 | 2 | Padding |
0x04 | 4 | Version? always 1 |
0x08 | 4 | Number of boxes |
0x0C | 16 * 24 | List of box name |
Each box name is 16-char long. However, due to the fact that box name is usually a 8-digit ID, the rest of 8 chars are always null characters. Unused box names are filled with null characters.
File MBoxInfo____
Offset | Length | Description |
---|---|---|
0x00 | 2 | Magic 0x6363 |
0x02 | 2 | Padding |
0x04 | 4 | Title ID (matches the box directory name) |
0x08 | 4 | Private ID? |
0x0C | 1 | Flags? |
0x0D | 1 | Flags? |
0x0E | 2 | Padding |
0x10 | 32 | HMAC Key |
0x30 | 4 | Zero? |
0x34 | 12 | Timestamp when last accessed |
0x40 | 1 | Flag? |
0x41 | 1 | Flag? |
0x42 | 1 | Flag? |
0x43 | 1 | Flag? |
0x44 | 12 | Timestamp when last received |
0x50 | 16 | Zero? |
Note: - Private ID
seems to be a number chosen by application arbitrarily, possibly for verification. Magic numbers such as 0x00000000, 0x00000001, 0xFFFFFFFF, 0xAABBCCDD and other random numbers have been observed here.
File MBoxData.<3-digit number>
File MBoxData.001
Icon
File MBoxData.010
This is the game title in null-terminated UTF-16 string.
File MBoxData.050
This is 8-byte file containing the title ID.
File BoxInfo_____
This file consists of a 0x20-byte header, and an array of 0x70-byte entry. Each entry is a copy of the message header. See the next section for the message header format. The box info header format is
Offset | Length | Description |
---|---|---|
0x00 | 2 | Magic 0x6262 |
0x02 | 2 | Padding |
0x04 | 4 | Size of this file |
0x08 | 4 | Maximum box size |
0x0C | 4 | Current box size |
0x10 | 4 | Maximum message count |
0x14 | 4 | Current message count / the size of the following array |
0x18 | 4 | Maximum batch size |
0x1C | 4 | Maximum message size |
File _<12-char ID>
Each such file is a message. The ID in the file name is the message ID encoded in base-64. A message file consists of a 0x70-byte header, several extra header, a message body, and a 0x20-byte HMAC(?).
The header format is
Offset | Length | Description |
---|---|---|
0x00 | 2 | Magic 0x6060 |
0x02 | 2 | Padding |
0x04 | 4 | Message size |
0x08 | 4 | Header + extra headers size |
0x0C | 4 | Body size |
0x10 | 4 | Title ID |
0x14 | 4 | Title ID 2? |
0x18 | 4 | Batch ID |
0x1C | 4 | ? ID |
0x20 | 8 | Message ID |
0x28 | 4 | Message version? |
0x2C | 8 | Message ID 2? |
0x34 | 1 | Flags |
0x35 | 1 | Send method |
0x36 | 1 | Is unopen |
0x37 | 1 | Is new |
0x38 | 8 | Sender ID |
0x40 | 8 | Sender ID 2? |
0x48 | 12 | Timestamp when sent |
0x54 | 12 | Timestamp when received |
0x60 | 12 | Timestamp when created |
0x6C | 1 | Send count |
0x6D | 1 | Forward count |
0x6E | 2 | User data |
Each extra header has a format of
Offset | Length | Description |
---|---|---|
0x00 | 4 | Header type |
0x04 | 4 | Data size |
0x08 | Data size | Header data |
The header type can be one of the follows:
Value | Description |
---|---|
1 | ? |
2 | Icon |
3 | Game name |
4 | Info text |
5 | Region? |