闪存文件系统

From 3dbrew
Revision as of 14:14, 1 April 2013 by Syphurith (talk | contribs) (update to follow english one)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

N3DS的NAND闪存芯片容量为1GB。

格式

任天堂3DS的闪存文件格式目前尚未公开,闪存芯片可以通过主板上的输出针脚进行内容提取,这已经成功了。然而提取出来的数据被加密了,不解密无法理解。

文件系统

每个NAND分区皆为FAT文件系统。

加密

NAND文件系统使用AES-CTR加密。NAND中TWL区域使用TWL的NAND密码键,而CTR区域使用CTR的NAND密码键。用于CTR-NAND扇区的密码键是由NCSD扇区的文件系统类型决定的。TWL/CTR的NAND区域在NCSD头中指定。NAND的最开始0x0B100000字节使用TWL密码键,在0x00012E00之前则只有MBR分区表使用TWL密码键(那个区域包括如下所示的TWL扇区)。

分区

名称 偏移 长度 注释
twln 0x00012E00 0x08FB5200 TWL-NAND的FAT16文件系统(DSi)
twlp 0x09011A00 0x020B6600 TWL-NAND照片的FAT12文件系统(DSi)
0x0B100000 0x00030000 一般在这段全部是零
firm0 0x0B130000 0x00400000 固件分区
firm1 0x0B530000 0x00400000 固件分区(是备份,和上面一样)
0x0B930000 0x2F5D0000 CTR-NAND分区(3DS)
nand 0x0B95CA00 0x2F3E3600 CTR-NAND的FAT16文件系统

3DS中NAND的TWL的FAT分区FAT卷标名"TWL",而CTR的FAT分区则是"CTR"。TWL分区的偏移和长度存在MBR分区表,而CTR分区表信息存在NAND的NCSD头。CTR-NAND分区的扇面0有一个MBR分区表,而MBR的签名在+0x1fe位置。在这个分区表中只有一个分区就是CTR-NAND的FAT16分区。

以上除过TWLP,没有一个NAND物理分区可以使用ARM11直接读取。CTR/TWL的NAND文件系统只能当exheader访问控制描述符启用时候访问。对于零售版机器中的CXI进程,CTR/TWL的NAND描述符一般都是未启用的状态。ARM11只能将"nand:/rw/"挂载为"nandrw"的归档,而"nand:/ro/"则挂载为如下的nandro归档。

CTR分区

nand/title的结构似乎和SD卡系统的完全相似,除了存档保存在nand/data/<ID0>/sysdata目录。

nand/data之下的子目录名是movable.sed的SHA256散列。这个NAND的nand/data/<ID0>目录和"sdmc/Nintendo 3DS/<ID0>/<ID1>",只是里面的数据是明文。movable.sed keyY只用于nand/data/<ID0>的AES MACs(AES加密+MAC绑定?)。nand/data/<ID0>/extdata保存的是公用的extdata,结构和SD卡的extdata完全一致。

"nandrw"归档会挂载到"nand:/rw/",而"nandro"归档会挂载到"nand:/ro/"。


nandro
├── private
├── shared
└── sys
    ├── HWCAL0.dat
    └── HWCAL1.dat
nandrw
├── shared
└── sys
    ├── LocalFriendCodeSeed_B
    ├── native.log
    ├── rand_seed
    ├── SecureInfo_A
    └── updater.log
nand
├── __journal.nn_
├── data
│   └── <ID0>
│       ├── extdata          
│       └── sysdata (NAND存档存在本目录下的"<SaveID-Low>/<SaveID-High>",<SaveID-High>的"High"是文件名)
├── dbs
├── private
│   └── movable.sed
├── ro
├── rw
├── ticket
├── title
└── tmp

TWL分区

TWL分区的结构和DSi的几乎一样,除了Tickets存在CTR的FAT文件系统。TWLP分区则是和DSi完全一致。

twln/title的结构和CTR的NAND/SD一致,除了.cmd是明文(好像是虚假文件)。在系统Title的/title目录下的data目录并不存在,似乎只有DSiWare的才有。

twln/title下名为titleID-High的目录是DSi的。

twln
├── import
├── log
│   ├── inspect.log
│   └── product.log
├── shared1
├── shared2
│   └── 0000
├── sys
│   └── TWLFontTable.dat
├── ticket
├── title
└── tmp
twlp
└── photo