|
|
| Line 1: |
Line 1: |
| − | This page describes the format of savegames contained in NAND. NAND savegames do not use an container with the entire file encrypted, however most of the file is encrypted(?). This might mean the file-data(not filesystem) is encrypted?(However some cases there's plaintext game related strings etc) | + | This page describes the format of savegames contained in NAND. NAND savegames do not use an container with the entire file encrypted. A lot of the saveimage appears to have uninitialized data, resulting in a lot of encrypted data in the saveimage. |
| | | | |
| | === AES CMAC header === | | === AES CMAC header === |
Revision as of 16:02, 4 July 2017
This page describes the format of savegames contained in NAND. NAND savegames do not use an container with the entire file encrypted. A lot of the saveimage appears to have uninitialized data, resulting in a lot of encrypted data in the saveimage.
| Image offset
|
Length
|
Description
|
| 0x00
|
0x10
|
AES-CMAC
|
| 0x10
|
0xF0
|
Zero padding
|
DISF
- This is located @ 0x100 in the image, following the CMAC header.
| Start
|
Length
|
Description
|
| 0x000
|
4
|
Magic ("DISF")
|
| 0x004
|
4
|
Magic Number (0x40000)
|
| 0x008
|
32
|
Hash
|
| 0x028
|
8
|
Primary Partition Table Offset
|
| 0x030
|
8
|
Primary Partition Table Size
|
| 0x038
|
8
|
Secondary Partition Table Offset
|
| 0x040
|
8
|
Secondary Partition Table Size
|
| 0x048
|
8
|
Save Partition Offset
|
| 0x050
|
8
|
Save Partition Size
|
| 0x258
|
|
End
|
DPFS
- This is located @ 0x200 in the image, following DISF.
- Block sizes are log2
| Start
|
Length
|
Description
|
| 0x00
|
4
|
Magic ("DPFS")
|
| 0x04
|
4
|
Magic Number (0x10000)
|
| 0x08
|
8
|
Offset 0
|
| 0x10
|
8
|
Size 0
|
| 0x18
|
8
|
Block Size 0
|
| 0x20
|
8
|
Offset 1
|
| 0x28
|
8
|
Size 1
|
| 0x30
|
8
|
Block Size 1
|
| 0x38
|
8
|
Offset 2
|
| 0x40
|
8
|
Size 2
|
| 0x48
|
8
|
Block Size 2
|
IVFC
- Generally follows DPFS, similar to 3DS.
| Start
|
Length
|
Description
|
| 0x00
|
4
|
Magic ("IVFC")
|
| 0x04
|
4
|
Magic Number (0x20000)
|
| 0x08
|
8
|
Master hash size?
|
| 0x10
|
8
|
Level 1 offset
|
| 0x18
|
8
|
Level 1 size
|
| 0x20
|
4
|
Level 1 block size, in log2
|
| 0x24
|
4
|
Reserved
|
| 0x28
|
8
|
Level 2 offset
|
| 0x30
|
8
|
Level 2 size
|
| 0x38
|
4
|
Level 2 block size, in log2.
|
| 0x3C
|
4
|
Reserved
|
| 0x40
|
8
|
Level 3 offset
|
| 0x48
|
8
|
Level 3 size
|
| 0x50
|
4
|
Level 3 block size, in log2.
|
| 0x54
|
4
|
Reserved
|
| 0x58
|
8
|
Level 4 offset
|
| 0x60
|
8
|
Level 4 size
|
| 0x68
|
4
|
Level 4 block size, in log2.
|
| 0x6C
|
4
|
Reserved
|
| 0x70
|
48
|
Unknown, reserved?
|
| 0xA0
|
32
|
Hash
|
JNGL
| Start
|
Length
|
Description
|
| 0x00
|
4
|
Magic ("JNGL")
|
| 0x04
|
4
|
Magic Number (0x10000)
|
| 0x08
|
8
|
Savedata Size
|
| 0x10
|
8
|
Unknown, Size
|
| 0x18
|
8
|
Savedata Blocksize?
|
| 0x20
|
4
|
Unknown
|
| 0x24
|
4
|
Unknown
|
| 0x28
|
8
|
Unknown
|
| 0x30
|
464
|
Padding?
|
SAVE
- Generally follows JNGL, structure is different from 3DS.
| Start
|
Length
|
Description
|
| 0x00
|
4
|
Magic ("SAVE")
|
| 0x04
|
4
|
Magic Number (0x60000)
|
| 0x08
|
8
|
Unknown, number
|
| 0x10
|
8
|
Unknown, block size
|
| 0x18
|
8
|
Unknown, block size
|
| 0x20
|
8
|
Unknown
|
RMAP
- There are generally two RMAP blocks in sequence.
| Start
|
Length
|
Description
|
| 0x00
|
4
|
Magic ("RMAP")
|
| 0x04
|
4
|
Magic Number (0x10000)
|