This repository contains an experimental Nintendo 3DS game card dumping and header inspection tool.
- CFW
- devkitARM(https://devkitpro.org/wiki/devkitARM)
- python(https://www.python.org/)
- firmtool(https://github.com/TuxSH/firmtool)
- Read a 3DS game card into split
.3dsoutput on SD when required. - Export parsed NCSD, CardInfo, InitialData, NCCH, ExeFS, and RomFS metadata to a text report.
- Decode ExeFS and RomFS metadata needed for inspection reports.
- Keep implementation decisions traceable to public documentation and hardware-observed behavior.
- GBATEK documentation(https://problemkaputt.de/gbatek-3ds-reference.htm) for 3DS cartridge protocol and file formats.
- 3dbrew documentation(https://www.3dbrew.org/wiki/Main_Page) for NCSD, NCCH, ExeFS, RomFS, and NCCH encryption layout.
- Behavior observed on retail hardware during this project.
- FatFs, included under its own permissive license in
fatfs/LICENSE.txt.
source/dump3ds_formats.c/include/dump3ds_formats.h- NCSD/NCCH/ExeFS/RomFS structure helpers and little-endian accessors.source/dump3ds_aes_ctr.c/include/dump3ds_aes_ctr.h- AES-CTR helper routines for the hardware AES block.source/dump3ds_secure_init.c/include/dump3ds_secure_init.h- card secure-session seed preparation and secure seed loading helpers.source/dump3ds_header_report.c/include/dump3ds_header_report.h- header/report text output, ExeFS/RomFS inspection, and RomFS listing helpers.include/dump3ds_cardio.h- small interface used by the report code to call the card read/recovery functions implemented insource/main.c.include/dump3ds_config.h- shared compile-time constants used across the split files.
The existing recursive Makefile style that builds all source/*.c files should pick these files up automatically.
Source comments use the following categories:
- Public file-format descriptions: NCSD, NCCH, ExeFS, RomFS and IVFC layouts from 3dbrew and GBATEK.
- Public hardware descriptions: 3DS gamecard, CTRCARD and AES register notes from 3dbrew and GBATEK.
- Hardware-observed behavior: register write ordering, polling margins and retry thresholds that are not fully specified by public pages, validated on retail hardware by observing expected NCSD/NCCH headers, ExeFS entries and RomFS IVFC data.