Package: ninfs
ninfsninfs (formerly fuse-3ds) is a FUSE program to extract data from Nintendo game consoles. It works by presenting a virtual filesystem with the contents of your games, NAND, or SD card contents, and you can browse and copy out just the files that you need.Windows, macOS, and Linux are supported.Supported typesNintendo 3DSCTR Cart Image (".3ds", ".cci")CDN contents ("cetk", "tmd", and contents)CTR Importable Archive (".cia")Executable Filesystem (".exefs", "exefs.bin")Nintendo 3DS NAND backup ("nand.bin")NCCH (".cxi", ".cfa", ".ncch", ".app")Read-only Filesystem (".romfs", "romfs.bin")SD Card Contents ("Nintendo 3DS" from SD)Installed SD Title Contents ("*.tmd" and "*.app" files)3DSX Homebrew (".3dsx")Nintendo DS / DSiNintendo DSi NAND backup ("nand_dsi.bin")Nintendo DS ROM image (".nds", ".srl")iQue PlayeriQue Player NAND backup (read-only) ("nand.bin")Nintendo SwitchNintendo Switch NAND backup ("rawnand.bin")Example usesMount a NAND backup and browse CTRNAND, TWLNAND, and others, and write back to them without having to extract and decrypt them first.Browse decrypted SD card contents. Dump installed games and saves, or copy contents between two system's SD contents.Extract a game's files out of a CIA, CCI (".3ds"), NCCH, RomFS, raw CDN contents, just by mounting them and browsing its files. Or use the virtual decrypted file and start playing the game inCitraright away.SetupFor 3DS types, The ARM9 BootROM is required. You can dump it using boot9strap, which can be set up by3DS Hacks Guide. To dump Boot9, follow the steps onwiki.hacks.guide.Boot9 is checked in order of:--boot9argument (if set)BOOT9_PATHenvironment variable (if set)%APPDATA%\3ds\boot9.bin(Windows-specific)~/Library/Application Support/3ds/boot9.bin(macOS-specific)~/.3ds/boot9.bin~/3ds/boot9.binboot9_prot.bincan also be used in all of these locations."~" means the user's home directory. "~/3ds" would mean/Users/username/3dson macOS andC:\Users\username\3dson Windows.CDN, CIA, and NCCH mounting may needSeedDBfor mounting NCCH containers of newer games (2015+) that use seeds.SeedDB is checked in order of:--seeddbargument (if set)SEEDDB_PATHenvironment variable (if set)%APPDATA%\3ds\seeddb.bin(Windows-specific)~/Library/Application Support/3ds/seeddb.bin(macOS-specific)~/.3ds/seeddb.bin~/3ds/seeddb.binPython 3.8.0 or later is required.WindowsWindows 10 or later is recommended. Windows 7 and 8.1 may continue to work until ninfs's dependencies stop working on it.InstallerAn installer is provided inreleases. It includes both ninfs and WinFsp, which is installed if required.Standalone releaseA standalone zip is also provided inreleases.WinFspmust be installed separately.Install with existing PythonInstall a version ofPython 3.8 or later. The x86-64 version is preferred on 64-bit Windows.Python from the Microsoft Store is not recommended due to sandboxing restrictioons.Install the latest version ofWinFsp.Install ninfs withpy -3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zipWindows on ARMOfficial support for Windows on ARM will comeeventually. In the meantime, running the x86 version has been tested and seems to work properly. Make sure to install the latest WinFSP version with ARM64 support.macOSVersions of macOS supported by Apple are highly recommended. macOS Sierra is the oldest version that should work.macFUSEorfuse-tis required.Standalone applicationA standalone build is provided inreleases. macFUSE or fuse-t must still be installed separately. Releases are built for Intel and Apple Silicon, signed and notarized by Apple.Install with existing PythonInstall a version of Python 3.8 or later. Various methods to use Python:Installers from python.org.Xcode or Command Line Tools (note: has a broken GUI)HomebrewMacPortsNixInstall the latest version ofmacFUSEorfuse-t.Install ninfs withpython3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zipLinuxArch Linux(NOTE: git versions out of date while build process stabilizes)ninfs is available in the AUR:normal,with gui,git,git with guiOther distributionsRecent distributions (e.g. Ubuntu 18.04 and later) should have Python 3.8.0 or later pre-installed, or included in its repositories. Refer to your distribution's documentation for details.Most distributions should have libfuse enabled/installed by default. Use your package manager if it isn't.Install ninfs withpython3 -m pip install --upgrade --user https://github.com/ihaveamac/ninfs/archive/2.0.zip--useris not needed if you are using a virtual environment.You can add a desktop entry withpython3 -m ninfs --install-desktop-entry. If you want to install to a location other than the default ($XDG_DATA_HOME), you can add another argument with a path like/usr/local/share.To use the GUI, tkinter needs to be installed. On Debian-/Ubuntu-based systems this ispython3-tk. On Fedora this ispython3-tkinter.UsageGraphical user interfaceA GUI can be used by specifying the type to begui(e.g. Windows:py -3 -mninfs gui, Linux/macOS:python3 -mninfs gui). The GUI controls mounting and unmounting.Command lineRun a mount script by using "mount_<type>" (e.g.mount_cci game.3ds mountpoint). Use-hto view arguments for a script.If it doesn't work, the other way is to use<python-cmd> -mninfs <type>(e.g. Windows:py -3 -mninfs cci game.3ds mountpoint, Linux/macOS:python3 -mninfs cci game.3ds mountpoint).Windows users can use a drive letter likeF:as a mountpoint, or use*and a drive letter will be automatically chosen.Developer-unit contents are encrypted with different keys, which can be used with--devwith CCI, CDN, CIA, NANDCTR, NCCH, and SD. These are less tested and may have bugs due to unknown differences between retail and dev files.UnmountingWindows: PressCtrl+Cin the command prompt/PowerShell window.macOS: Two methods:Right-click on the mount and choose "Eject “drive name”".Run from terminal:diskutil unmount /path/to/mountLinux: Run from terminal:fusermount -u /path/to/mountExamples3DS game card dump:mount_cci game.3ds mountpointContents downloaded from CDN:mount_cdn cdn_directory mountpointCDN contents with a specific decrypted titlekey:mount_cdn --dec-key 3E3E6769742E696F2F76416A65423C3C cdn_directory mountpointCIA:mount_cia game.cia mountpointExeFS:mount_exefs exefs.bin mountpoint3DS NAND backup withessential.exefsembedded:mount_nandctr nand.bin mountpoint3DS NAND backup with an OTP file (Counter is automatically generated):mount_nandctr --otp otp.bin nand.bin mountpoint3DS NAND backup with OTP and CID files:mount_nandctr --otp otp.bin --cid nand_cid.bin nand.bin mountpoint3DS NAND backup with OTP file and a CID hexstring:mount_nandctr --otp otp.bin --cid 7468616E6B7334636865636B696E6721 nand.bin mountpointDSi NAND backup (Counter is automatically generated):mount_nandtwl --console-id 5345445543454D45 nand_dsi.bin mountpointDSi NAND backup with a Console ID hexstring and specified CID hexstring:mount_nandtwl --console-id 5345445543454D45 --cid 576879446F657344536945786973743F nand_dsi.bin mountpointDSi NAND backup with a Console ID file and specified CID file:mount_nandtwl --console-id ConsoleID.bin --cid CID.bin nand_dsi.bin mountpointiQue Player NAND backup:mount_nandbb nand.bin mountpointSwitch NAND backup:mount_nandhac --keys prod.keys rawnand.bin mountpointSwitch NAND backup in multiple parts:mount_nandhac --keys prod.keys -S rawnand.bin.00 mountpointSwitch NAND encrypted partition dump:mount_nandhac --keys prod.keys --partition SYSTEM SYSTEM.bin mountpointNCCH container (.app, .cxi, .cfa, .ncch):mount_ncch content.cxi mountpointRomFS:mount_romfs romfs.bin mountpointNintendo 3DSdirectory from an SD card:mount_sd --movable movable.sed "/path/to/Nintendo 3DS" mountpointNintendo 3DSdirectory from an SD card with an SD key hexstring:mount_sd --sd-key 504C415900000000504F4B454D4F4E21 "/path/to/Nintendo 3DS" mountpointNintendo DS ROM image (NDS/SRL,mount_ndsalso works):mount_srl game.nds mountpoint3DSX homebrew application:mount_threedsx boot.3dsx mountpointUseful toolswwylele's3ds-save-toolcan be used to extract game saves and extra data (DISA and DIFF, respectively).wwylele'ssave3dsis a tool to interact with 3DS save files and extdata. Extracting and importing works on all platforms. The FUSE part only works on macOS and Linux.OSFMountfor Windows can mount FAT12/FAT16/FAT32 partitions in NAND backups.Related toolsroothorick'sBUSEHACis a Linux driver for encrypted Nintendo Switch NANDs.Maschell'sfuse-wiiucan be used to mount Wii U contents.koolkdev'swfslibhas wfs-fuse to mount the Wii U mlc dumps and usb devices.License/Creditsninfsis under the MIT license.fuse.pyis under the ISC license (taken fromsetup.py).Special thanks to @Jhynjhiruu for adding support for iQue Player NAND backups.Special thanks to @Stary2001 for help with NAND crypto (especially TWL), and @d0k3 for SD crypto.OTP code is fromStary2001/3ds_tools, and is under the MIT license.