Savegame Files

From WiiBrew
Jump to: navigation, search

(Feel free to fix or enhance this page)

Format

A savegame consists of a Header, followed by a Bk Header and a set of files contained in a files section.

Header

The Header is 0xF0C0 bytes long. It is encrypted (AES128-CBC) using the "sd-key" and the "sd-iv" initialization vector.

The plaintext header contents are described in the following table.


Start End Length Description
0x0000 0x0007 8 Savegame ID
0x0008 0x000B 4 size of header (0x72C0 or 0xF0C0)
0x000C 0x000C 1 permissions
0x000D 0x000D 1 ?? unknown
0x000E 0x001D 16 md5 of plaintext header with md5 blanker applied
0x001E 0x001F 2 ?? unknown
0x0020 0x003F 16 ?? unknown
0x0040 0x00BF 128 title (?? in utf16)
0x00C0 0x60BF 24576 banner (192x64) - RGB5A3 GX texture format
0x60C0 0x72BF 4608 icon0 (48x48) - RGB5A3 GX texture format
0x72C0 0x84BF 4608 icon1 (optional, present if size of header is 0xF0C0)
0x84C0 0x96BF 4608 icon2 (optional, present if size of header is 0xF0C0)
0x96C0 0xA8BF 4608 icon3 (optional, present if size of header is 0xF0C0)
0xA8C0 0xBABF 4608 icon4 (optional, present if size of header is 0xF0C0)
0xBAC0 0xCCBF 4608 icon5 (optional, present if size of header is 0xF0C0)
0xCCC0 0xDEBF 4608 icon6 (optional, present if size of header is 0xF0C0)
0xDEC0 0xF0BF 4608 icon7 (optional, present if size of header is 0xF0C0)

Bk Header

The Bk Header is 0x80 bytes long. It is not encrypted.

Start End Length Description
0x000 0x003 4 magic1 (0x00000070)
0x004 0x005 2 magic2 ('Bk')
0x006 0x007 2 magic3 (0x0001)
0x008 0x00B 4 NG id
0x00C 0x00F 4 number of files
0x010 0x013 4 size of files
0x014 0x017 4 ?? unknown
0x018 0x01B 4 ?? unknown
0x01C 0x01F 4 total size
0x020 0x05F 64 ?? unknown
0x060 0x063 4 ?? unknown
0x064 0x067 4 Game ID (ex. 'RMGP' for Super Mario Galaxy)
0x068 0x06B 4 ?? unknown
0x06C 0x06F 4 ?? unknown
0x070 0x07F 16 null padded


Files

A savegame consists of several files up to the number specified in the Bk Header. Each file is described using a File Header and a File Data section. Files are stored immediately after the Bk Header using the format described in the next sections.

File Header

The file header is 0x80 bytes long. It is not encrypted.

Start End Length Description
0x000 0x003 4 magic1 (0x03adf17e)
0x004 0x007 4 size of file
0x008 0x008 1 permissions
0x009 0x009 1 attributes
0x00A 0x00A 1 type (1=file, 2=directory)
0x00B variable variable name (null terminated)
... ... ... ...
0x050 0x05F 16 IV for file data decryption
0x060 0x07F ... ?? unknown

File Data

File data comes after the File Header. Each file actually occupies the length specified in the file header rounded up to the next 64 byte boundary. Data is encrypted (AES128-CBC) using the "sd-key" and the initialization vector specified in the File Header.


Parsing savegames

Savegames can be parsed with the savegame parser