|
|
(24 intermediate revisions by 12 users not shown) |
Line 1: |
Line 1: |
| (Feel free to fix or enhance this page)
| | = Format = |
|
| |
|
| == Format ==
| | A savegame consists of a [[#Header|Header]], followed by a [[#Bk Header|Bk Header]] and a set of files contained in a [[#Files|files]] section. The savgames are signed while being copied to the SD card using the Wii's private NG key. |
|
| |
|
| === Header ===
| | == Header == |
|
| |
|
| The Header is 0xF0C0 bytes long. | | The Header is 0xF0C0 bytes long. It is encrypted (AES128-CBC) using the "sd-key" and the "sd-iv" initialization vector. |
|
| |
|
| {| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em;"
| | The plaintext header contents are described in the following table. |
| |- style="background-color: #ddd;" | | |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #cdc;" | '''Start''' | | It's divided in two parts: The "main header" and the "banner" |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccd;" | '''End'''
| | |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccc;" | '''Length'''
| | === Main header === |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dcc;" | '''Description'''
| | {| class="wikitable" |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x0000
| | ! Start |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x0007
| | ! End |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 8
| | ! Length |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Savegame ID
| | ! Description |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x0008
| | | 0x0000 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x000B
| | | 0x0007 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 8 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | size of header (0x72a0 or 0xf0a0)
| | | Savegame ID |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x000C
| | | 0x0008 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x000C
| | | 0x000B |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | permissions
| | | size of banner (0x72A0 or 0xF0A0, also seen 0xBAA0) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x000D
| | | 0x000C |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x000D
| | | 0x000C |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
| | | 1 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown
| | | permissions |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x000E
| | | 0x000D |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x001D
| | | 0x000D |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 16
| | | 1 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | md5 of plaintext header with md5 blanker applied
| | | ?? unknown |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x001E
| | | 0x000E |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x001F
| | | 0x001D |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
| | | 16 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown
| | | md5 of plaintext header with md5 blanker applied |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x0020 | | | 0x001E |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x003F | | | 0x001F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 16 | | | 2 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown | | | ?? unknown |
| |- style="background-color: #ddd;" | | |} |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x0040 | | |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x00BF | | |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 128 | | === Banner === |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | title (?? in utf16) | | {| class="wikitable" |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x00C0 | | ! Start |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x60BF
| | ! End |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 24576
| | ! Length |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | banner (192x64)
| | ! Description |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x60C0
| | | 0x0020 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x72BF
| | | 0x0023 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon0 (48x48)
| | | magic ('WIBN') (Wii Banner?) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x72C0
| | | 0x0024 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x84BF
| | | 0x0027 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon1 (optional, present if size of header is 0xf0a0)
| | | Flags - (Maskable) if set to 0x000001 the save cannot be copied from NAND via normal means, 0x000010 means to "Bounce" between 0 and the last frame. Setting it to 0x000000 makes the animation loop through all frames resetting to 0 on the final frame. |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x84C0
| | | 0x0028 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x96BF
| | | 0x002A |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 2 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon2 (optional, present if size of header is 0xf0a0)
| | | AnimSpeed - Set per frame frameDelay*((animSpeed >> (2*nFrame))&3); 0 being no animation 1-3 being progressively slower, this is a little strange, but if the first two frames are set to 0, don't animate the icon. |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x96C0
| | | 0x002B |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0xA8BF
| | | 0x003F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 22 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon3 (optional, present if size of header is 0xf0a0)
| | | Reserved |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0xA8C0
| | | 0x0040 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0xBABF
| | | 0x007F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 64 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon4 (optional, present if size of header is 0xf0a0)
| | | Game title (big endian Unicode) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0xBAC0
| | | 0x0080 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0xCCBF
| | | 0x00BF |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 64 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon5 (optional, present if size of header is 0xf0a0)
| | | Game subtitle (big endian Unicode) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0xCCC0
| | | 0x00C0 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0xDEBF
| | | 0x60BF |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 24576 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon6 (optional, present if size of header is 0xf0a0)
| | | banner (192x64) - RGB5A3 GX texture format |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0xDEC0
| | | 0x60C0 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0xF0BF
| | | 0x72BF |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4608
| | | 4608 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | icon7 (optional, present if size of header is 0xf0a0)
| | | 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 ===
| | == Bk ("BacKup") Header == |
|
| |
|
| The Bk Header is 0x80 bytes long. | | The Bk Header is 0x70 bytes long (plus 0x10 bytes of padding/aligning). It is not encrypted. |
|
| |
|
| {| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em;" | | {| class="wikitable" |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #cdc;" | '''Start'''
| | ! Start |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccd;" | '''End'''
| | ! End |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccc;" | '''Length'''
| | ! Length |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dcc;" | '''Description'''
| | ! Description |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x000
| | | 0x000 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x003
| | | 0x003 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | magic1 (0x00000070) | | | Size of the header (0x00000070) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x004
| | | 0x004 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x005
| | | 0x005 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
| | | 2 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | magic2 ('Bk') | | | magic ('Bk') |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x006
| | | 0x006 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x007
| | | 0x007 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 2
| | | 2 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | magic3 (0x0001) | | | magic2 or version (0x0001) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x008
| | | 0x008 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x00B
| | | 0x00B |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | NG id
| | | NG id |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x00C
| | | 0x00C |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x00F
| | | 0x00F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | number of files
| | | number of files |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x010
| | | 0x010 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x013
| | | 0x013 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | size of files
| | | size of files |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x014
| | | 0x014 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x017
| | | 0x017 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown
| | | ?? unknown |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x018
| | | 0x018 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x01B
| | | 0x01B |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown
| | | ?? unknown |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x01C
| | | 0x01C |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x01F
| | | 0x01F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | total size
| | | total size |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x020
| | | 0x020 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x05F
| | | 0x05F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 64
| | | 64 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown
| | | ?? unknown |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x060
| | | 0x060 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x063
| | | 0x063 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown
| | | ?? unknown |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x064
| | | 0x064 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x067
| | | 0x067 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | Game ID (ex. 'RMGP' for Super Mario Galaxy)
| | | Game ID (ex. 'RMGP' for Super Mario Galaxy) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x068
| | | 0x068 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x06B | | | 0x06D |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4 | | | 6 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown | | | Mac address of the wii |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x06C | | | 0x06E |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x06F
| | | 0x06F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4 | | | 2 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ?? unknown
| | | ?? unknown |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x070
| | | 0x070 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x07F
| | | 0x07F |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 16
| | | 16 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | null padded
| | | null padded |
| |} | | |} |
|
| |
|
| |
|
| == Files == | | == Files == |
|
| |
|
| The savegame consists of several files up to the number specified in the Bk Header.
| | A savegame consists of several files up to the number specified in the [[#Bk Header|Bk Header]]. |
| Files are stored immediatelly after the Bk Header using the format described in the next sections. | | Each file is described using a [[#File Header|File Header]] and a [[#File Data|File Data]] section. Files are stored immediately after the [[#Bk Header|Bk Header]] using the format described in the next sections. |
|
| |
|
| === File Header === | | === File Header === |
|
| |
|
| The file header is 0x80 bytes long. | | The file header is 0x80 bytes long. It is not encrypted. |
|
| |
|
| {| style="border-collapse: collapse; padding: 0.2em 0.2em 0.2em 0.2em;" | | {| class="wikitable" |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #cdc;" | '''Start'''
| | ! Start |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccd;" | '''End'''
| | ! End |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ccc;" | '''Length'''
| | ! Length |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dcc;" | '''Description'''
| | ! Description |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x000
| | | 0x000 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x003
| | | 0x003 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | magic1 (0x03adf17e)
| | | magic1 (0x03adf17e) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x004
| | | 0x004 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x007
| | | 0x007 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 4
| | | 4 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | size of file
| | | size of file |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x008
| | | 0x008 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x008
| | | 0x008 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
| | | 1 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | permissions
| | | permissions |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x009
| | | 0x009 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x009
| | | 0x009 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
| | | 1 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | attributes
| | | attributes |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x00A
| | | 0x00A |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x00A
| | | 0x00A |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 1
| | | 1 |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | type (1=file, 2=directory)
| | | type (1=file, 2=directory) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x00B
| | | 0x00B |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | variable
| | | variable |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | variable
| | | variable |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | name (null tereminated)
| | | name (null terminated) |
| |- style="background-color: #ddd;" | | |- |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ded;" | 0x050 | | | ... |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #dde;" | 0x05F | | | ... |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #ddd;" | 16
| | | ... |
| | style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | IV for file data decryption
| | | ... |
| | |- |
| | | 0x050 |
| | | 0x05F |
| | | 16 |
| | | IV for file data decryption |
| | |- |
| | | 0x060 |
| | | 0x07F |
| | | ... |
| | | ?? unknown |
| |} | | |} |
|
| |
|
| === File data === | | === File Data === |
| | |
| | File data comes after the [[#File Header|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 decrypted and unpacked with segher's tachtig and created with his twintig. |
| | |
| | == See Also == |
| | |
| | * [[FE100]] |
| | * [[Wii Savegame Parser]] |
|
| |
|
| 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. File data is encrypted using the "sd-key" and the initialization vector specified in the File Header. | | [[Category:File formats]] |