Line 1: |
Line 1: |
− | N3DS的NAND闪存芯片容量为1GB。
| + | 3DS使用了容量为1GB的一片NAND闪存芯片。 |
| + | 从NCSD的头部来看,NAND实际使用的大小为0x3AF00000. |
| | | |
| === 格式 === | | === 格式 === |
− | 任天堂3DS的闪存文件格式目前尚未公开,闪存芯片可以通过主板上的输出针脚进行内容提取,这已经成功了。然而提取出来的数据被加密了,不解密无法理解。
| + | 通过主板上的输出针脚提取闪存芯片内容是可行的,并且已经取得成功。但由于数据是加密过的,不经解密无法理解。 |
| | | |
− | ===文件系统=== | + | ===加密=== |
− | | + | NAND文件系统使用[[AES|AES-CTR]]加密。NAND中TWL region使用TWL NAND的[[AES|keyslot]],而CTR region使用CTR NAND的[[AES|keyslots]]。CTR NAND分区的 keyslot 是由NCSD分区的磁盘文件系统类型所决定的。每个分区表的NCSD分区加密标志位(TWL keyslot 或 CTR keyslots)这样表示: 0x01=TWL, 0x02=CTR。TWL/CTR NAND region在NCSD头部指定。NAND的前 0x0B100000 byte使用TWL keyslot加密,在0x00012E00之前则只有MBR分区表使用TWL keyslot(那个region包括下表所示的TWL分区)。 |
− | 每个NAND分区皆为FAT文件系统。
| |
| | | |
− | ===加密===
| + | 切记,一台3DS重加密的NAND镜像,不能直接给另一台3DS使用,“NAND”分区的某些文件也需要修改/更换。 |
− | 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结构=== |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! 名称 | + | ! 分区名 |
| ! 偏移 | | ! 偏移 |
| ! 长度 | | ! 长度 |
| + | ! NCSD分区文件系统类型 |
| + | ! NCSD分区索引(index) |
| ! 注释 | | ! 注释 |
| + | |- |
| + | | |
| + | | 0x0 |
| + | | 0x200 |
| + | | |
| + | | |
| + | | NCSD头, 包括了后续CTR-NAND的偏移/大小信息. 这个块也包含了 TWL-NAND MBR分区表. |
| + | |- |
| + | | |
| + | | 0x00000000 |
| + | | 0x0B100000 |
| + | | 0x1 |
| + | | 0x00 |
| + | | TWL NAND region |
| |- | | |- |
| | 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 |
| + | | 0x01 |
| + | | 默认为全空填充此分区(只有 0x00/0xFF byte,并且从不写入). AGB_FIRM was never launched. 包含 AGB_FIRM GBA游戏. |
| |- | | |- |
| | firm0 | | | firm0 |
| | 0x0B130000 | | | 0x0B130000 |
| | 0x00400000 | | | 0x00400000 |
− | | [[FIRM|固件]]分区 | + | | 0x03 |
| + | | 0x02 |
| + | | [[FIRM|Firmware]] 分区. |
| |- | | |- |
| | firm1 | | | firm1 |
| | 0x0B530000 | | | 0x0B530000 |
| | 0x00400000 | | | 0x00400000 |
− | | [[FIRM|固件]]分区(是备份,和上面一样) | + | | 0x03 |
| + | | 0x03 |
| + | | [[FIRM|Firmware]] 分区.(备份分区, 同上) |
| |- | | |- |
| | | | | |
| | 0x0B930000 | | | 0x0B930000 |
| | 0x2F5D0000 | | | 0x2F5D0000 |
− | | CTR-NAND分区(3DS) | + | | 0x01 |
| + | | 0x04 |
| + | | 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分区。
| |
| | | |
− | 以上除过TWLP,没有一个NAND物理分区可以使用ARM11直接读取。CTR/TWL的NAND文件系统只能当exheader访问控制描述符启用时候访问。对于零售版机器中的[[NCCH#CXI|CXI]]进程,CTR/TWL的NAND描述符一般都是未启用的状态。ARM11只能将"nand:/rw/"挂载为"nandrw"的[[FS:OpenArchive|归档]],而"nand:/ro/"则挂载为如下的nandro归档。
| + | 3DS中NAND TWL FAT分区的卷标为"TWL",CTR FAT分区为"CTR"。TWL分区的偏移和大小存储在MBR分区表中,而CTR分区表信息存在NAND NCSD头部。CTR-NAND分区的0扇面包含一个TWL-NAND分区的MBR分区表,而MBR的签名在+0x1fe位置。 |
| + | |
| + | NAND扇面未被写入前,只包含明文的0x00或0xFF byte. |
| + | |
| + | 除TWLP,以上NAND物理分区均不能使用ARM11直接读取。CTR/TWL NAND文件系统只能当exheader访问控制描述符启用时候访问。对于零售版机器中的[[NCCH#CXI|CXI]]进程,CTR/TWL的NAND描述符一般都是未启用的状态。ARM11只能将"nand:/rw/"挂载为"nandrw"的[[FS:OpenArchive|档案]],而"nand:/ro/"则挂载为如下的nandro档案。 |
| + | |
| + | ==== 0x4000 ==== |
| + | 某些3DS系统(比如3DS XL),有一个明文的FAT16引导记录在NAND偏移的0x4000位置。这个块在launch-day 3DS的系统里是不存在的。在这个“分区”内只有明文的块。 |
| | | |
| =CTR分区= | | =CTR分区= |
Line 75: |
Line 110: |
| ├── [[nandrw/shared|shared]] | | ├── [[nandrw/shared|shared]] |
| └── [[nandrw/sys|sys]] | | └── [[nandrw/sys|sys]] |
| + | ├── [[nandrw/sys/lgy.log|lgy.log]] (发生错误时由[[FIRM|TWL_FIRM]]记录,是与native.log等效的) |
| ├── [[nandrw/sys/LocalFriendCodeSeed_B|LocalFriendCodeSeed_B]] | | ├── [[nandrw/sys/LocalFriendCodeSeed_B|LocalFriendCodeSeed_B]] |
− | ├── [[nandrw/sys/native.log|native.log]] | + | ├── [[nandrw/sys/native.log|native.log]] (This is written to by [[ErrDisp]]) |
| ├── [[nandrw/sys/rand_seed|rand_seed]] | | ├── [[nandrw/sys/rand_seed|rand_seed]] |
| ├── [[nandrw/sys/SecureInfo_A|SecureInfo_A]] | | ├── [[nandrw/sys/SecureInfo_A|SecureInfo_A]] |
| └── [[nandrw/sys/updater.log|updater.log]] | | └── [[nandrw/sys/updater.log|updater.log]] |
| + | |
| | | |
| nand | | nand |
Line 86: |
Line 123: |
| │ └── <ID0> | | │ └── <ID0> |
| │ ├── [[Extdata|extdata]] | | │ ├── [[Extdata|extdata]] |
− | │ └── [[System SaveData|sysdata]] (NAND存档存在本目录下的"<SaveID-Low>/<SaveID-High>",<SaveID-High>的"High"是文件名) | + | │ └── [[System SaveData|sysdata]] |
| ├── [[Title Database|dbs]] | | ├── [[Title Database|dbs]] |
| + | ├── [[nand/fixdata|fixdata]] |
| + | │ └── [[nand/fixdata/sysdata|sysdata]] |
| ├── private | | ├── private |
| │ └── [[nand/private/movable.sed|movable.sed]] | | │ └── [[nand/private/movable.sed|movable.sed]] |
| ├── [[nand/ro|ro]] | | ├── [[nand/ro|ro]] |
| ├── [[nand/rw|rw]] | | ├── [[nand/rw|rw]] |
− | ├── [[nand/ticket|ticket]] | + | ├── [[nand/ticket|ticket]] (自ticket存放到[[Title Database|ticket.db]]后,这个目录就是空的了) |
| ├── [[Title Data Structure|title]] | | ├── [[Title Data Structure|title]] |
− | └── [[nand/tmp|tmp]] | + | └── [[nand/tmp|tmp]] (这个通常是空的, even when installation for a system update still needs [[AMNet:FinishInstallToMedia|finalized]]) |
| + | |
| | | |
| =TWL分区= | | =TWL分区= |
Line 105: |
Line 145: |
| twln | | twln |
| ├── [[twln/import/|import]] | | ├── [[twln/import/|import]] |
− | ├── [[twln/log/|log]]
| |
− | │ ├── [[twln/log/inspect.log|inspect.log]]
| |
− | │ └── [[twln/log/product.log|product.log]]
| |
| ├── [[twln/shared1/|shared1]] | | ├── [[twln/shared1/|shared1]] |
| ├── [[twln/shared2/|shared2]] | | ├── [[twln/shared2/|shared2]] |
| │ └── [[twln/shared2/0000|0000]] | | │ └── [[twln/shared2/0000|0000]] |
| ├── [[twln/sys|sys]] | | ├── [[twln/sys|sys]] |
− | │ └── [[twln/sys/TWLFontTable.dat|TWLFontTable.dat]] | + | │ ├── [[twln/sys/TWLFontTable.dat|TWLFontTable.dat]] |
| + | │ └── [[twln/sys/log/|log]] |
| + | │ ├── [[twln/sys/log/inspect.log|inspect.log]] |
| + | │ └── [[twln/sys/log/product.log|product.log]] |
| ├── [[twln/ticket/|ticket]] | | ├── [[twln/ticket/|ticket]] |
| ├── [[twln/title/|title]] | | ├── [[twln/title/|title]] |