Difference between revisions of "闪存文件系统"

From 3dbrew
Jump to navigation Jump to search
m (update to follow english one)
(fix translation,up to table NAND structure)
Line 1: Line 1:
N3DS的NAND闪存芯片容量为1GB。
+
3DS使用了容量为1GB的一片NAND闪存芯片。
  
 
=== 格式 ===
 
=== 格式 ===
任天堂3DS的闪存文件格式目前尚未公开,闪存芯片可以通过主板上的输出针脚进行内容提取,这已经成功了。然而提取出来的数据被加密了,不解密无法理解。
+
通过主板上的输出针脚提取闪存芯片内容是可行的,并且已经取得成功。但数据是加密过的,不经解密无法理解。
 
 
===文件系统===
 
 
 
每个NAND分区皆为FAT文件系统。
 
  
 
===加密===
 
===加密===
NAND文件系统使用AES-CTR加密。NAND中TWL区域使用TWL的NAND[[AES|密码键]],而CTR区域使用CTR的NAND密码键。用于CTR-NAND扇区的密码键是由NCSD扇区的文件系统类型决定的。TWL/CTR的NAND区域在NCSD头中指定。NAND的最开始0x0B100000字节使用TWL密码键,在0x00012E00之前则只有MBR分区表使用TWL密码键(那个区域包括如下所示的TWL扇区)。
+
NAND文件系统使用AES-CTR加密。NAND中TWL region使用TWL NAND的[[AES|keyslot]],而CTR region使用CTR NAND的[[AES|keyslots]]。CTR NAND分区的 keyslot 是由NCSD分区的磁盘文件系统类型所决定的。TWL/CTR NAND region在NCSD头部指定。NAND的前 0x0B100000 byte使用TWL  keyslot加密,在0x00012E00之前则只有MBR分区表使用TWL  keyslot(那个region包括下表所示的TWL分区)。
  
===分区===
+
===NAND结构===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
名称
+
分区名
 
!  偏移
 
!  偏移
 
!  长度
 
!  长度
 +
!  NCSD分区文件系统类型
 
!  注释
 
!  注释
 +
|-
 +
 +
|  0x0
 +
|  0x200
 +
 +
|  NCSD头, 包括了后续CTR-NAND的偏移/大小信息. 这个块也包含了 TWL-NAND MBR分区表.
 
|-
 
|-
 
|  twln
 
|  twln
 
|  0x00012E00
 
|  0x00012E00
 
|  0x08FB5200
 
|  0x08FB5200
|  TWL-NAND的FAT16文件系统(DSi)
+
 +
|  TWL-NAND FAT16. (DSi)
 
|-
 
|-
 
|  twlp
 
|  twlp
 
|  0x09011A00
 
|  0x09011A00
 
|  0x020B6600
 
|  0x020B6600
|  TWL-NAND照片的FAT12文件系统(DSi)
+
 +
|  TWL-NAND PHOTO FAT12. (DSi)
 
|-
 
|-
 
|   
 
|   
 
|  0x0B100000
 
|  0x0B100000
 
|  0x00030000
 
|  0x00030000
一般在这段全部是零
+
0x04
 +
|  默认为全零填充此分区. AGB_FIRM was never launched. 包含 AGB_FIRM GBA游戏.
 
|-
 
|-
 
|  firm0
 
|  firm0
 
|  0x0B130000
 
|  0x0B130000
 
|  0x00400000
 
|  0x00400000
|  [[FIRM|固件]]分区
+
|  0x03
 +
|  [[FIRM|Firmware]] 分区.
 
|-
 
|-
 
|  firm1
 
|  firm1
 
|  0x0B530000
 
|  0x0B530000
 
|  0x00400000
 
|  0x00400000
|  [[FIRM|固件]]分区(是备份,和上面一样)
+
|  0x03
 +
|  [[FIRM|Firmware]] 分区.(备份分区, 同上)
 
|-
 
|-
 
|   
 
|   
 
|  0x0B930000
 
|  0x0B930000
 
|  0x2F5D0000
 
|  0x2F5D0000
|  CTR-NAND分区(3DS)
+
|  0x01
 +
|  CTR-NAND partition. (3DS)
 
|-
 
|-
 
|  nand
 
|  nand
 
|  0x0B95CA00
 
|  0x0B95CA00
 
|  0x2F3E3600
 
|  0x2F3E3600
|  CTR-NAND的FAT16文件系统
+
 +
|  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分区。
 
3DS中NAND的TWL的FAT分区FAT卷标名"TWL",而CTR的FAT分区则是"CTR"。TWL分区的偏移和长度存在MBR分区表,而CTR分区表信息存在NAND的NCSD头。CTR-NAND分区的扇面0有一个MBR分区表,而MBR的签名在+0x1fe位置。在这个分区表中只有一个分区就是CTR-NAND的FAT16分区。
  

Revision as of 11:54, 25 June 2013

3DS使用了容量为1GB的一片NAND闪存芯片。

格式

通过主板上的输出针脚提取闪存芯片内容是可行的,并且已经取得成功。但数据是加密过的,不经解密无法理解。

加密

NAND文件系统使用AES-CTR加密。NAND中TWL region使用TWL NAND的keyslot,而CTR region使用CTR NAND的keyslots。CTR NAND分区的 keyslot 是由NCSD分区的磁盘文件系统类型所决定的。TWL/CTR NAND region在NCSD头部指定。NAND的前 0x0B100000 byte使用TWL keyslot加密,在0x00012E00之前则只有MBR分区表使用TWL keyslot(那个region包括下表所示的TWL分区)。

NAND结构

分区名 偏移 长度 NCSD分区文件系统类型 注释
0x0 0x200 NCSD头, 包括了后续CTR-NAND的偏移/大小信息. 这个块也包含了 TWL-NAND MBR分区表.
twln 0x00012E00 0x08FB5200 TWL-NAND FAT16. (DSi)
twlp 0x09011A00 0x020B6600 TWL-NAND PHOTO FAT12. (DSi)
0x0B100000 0x00030000 0x04 默认为全零填充此分区. AGB_FIRM was never launched. 包含 AGB_FIRM GBA游戏.
firm0 0x0B130000 0x00400000 0x03 Firmware 分区.
firm1 0x0B530000 0x00400000 0x03 Firmware 分区.(备份分区, 同上)
0x0B930000 0x2F5D0000 0x01 CTR-NAND partition. (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