|
1 week ago | |
---|---|---|
.github | 1 month ago | |
ninfs | 1 week ago | |
scripts | 3 months ago | |
wininstbuild | 3 months ago | |
.gitignore | 1 year ago | |
BUILDING.md | 2 months ago | |
LICENSE.md | 5 months ago | |
README.md | 3 weeks ago | |
requirements.txt | 1 month ago | |
setup-cxfreeze.py | 4 months ago | |
setup.py | 1 month ago |
ninfs (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.
For 3DS types, The ARM9 bootROM is required. You can dump it using boot9strap, which can be set up by 3DS Hacks Guide. To dump the bootROM, hold START+SELECT+X when you boot up your 3DS. It is checked in order of:
--boot9
argument (if set)BOOT9_PATH
environment variable (if set)%APPDATA%\3ds\boot9.bin
(Windows-specific)~/Library/Application Support/3ds/boot9.bin
(macOS-specific)~/.3ds/boot9.bin
~/3ds/boot9.bin
boot9_prot.bin
can also be used in all of these locations.
"~
" means the user's home directory. "~/3ds
" would mean /Users/username/3ds
on macOS and C:\Users\username\3ds
on Windows.
CDN, CIA, and NCCH mounting may need SeedDB for mounting NCCH containers of newer games (2015+) that use seeds.
SeedDB is checked in order of:
--seeddb
argument (if set)SEEDDB_PATH
environment variable (if set)%APPDATA%\3ds\seeddb.bin
(Windows-specific)~/Library/Application Support/3ds/seeddb.bin
(macOS-specific)~/.3ds/seeddb.bin
~/3ds/seeddb.bin
Python 3.6.1 or later is required.
Windows 8.1 or later is required.
An installer is provided in releases. It includes both ninfs and WinFsp, which is installed if required.
A standalone zip is also provided in releases. WinFsp must be installed separately.
python3
must be used instead of py -3
. This version has some limitations however, such as not being able to mount to directories.py -3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zip
Versions of macOS supported by Apple are highly recommended. OS X Mavericks is the oldest version that should work. FUSE for macOS is required.
No standalone build is available at the moment.
python3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zip
(NOTE: git versions out of date while build process stabilizes)
ninfs is available in the AUR: normal, with gui, git, git with gui
python3 -m pip install --upgrade --user https://github.com/ihaveamac/ninfs/archive/2.0.zip
--user
is not needed if you are using a virtual environment.python3 -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
.python3-tk
. On Fedora this is python3-tkinter
.A GUI can be used by specifying the type to be gui
(e.g. Windows: py -3 -mninfs gui
, *nix: python3 -mninfs gui
). The GUI controls mounting and unmounting.
Run a mount script by using "mount_<type>
" (e.g. mount_cci game.3ds mountpoint
). Use -h
to 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
, *nix: python3 -mninfs cci game.3ds mountpoint
).
Windows users can use a drive letter like F:
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 --dev
with CCI, CDN, CIA, NANDCTR, NCCH, and SD.
diskutil unmount /path/to/mount
fusermount -u /path/to/mount
mount_cci game.3ds mountpoint
mount_cdn cdn_directory mountpoint
mount_cdn --dec-key 3E3E6769742E696F2F76416A65423C3C cdn_directory mountpoint
mount_cia game.cia mountpoint
mount_exefs exefs.bin mountpoint
essential.exefs
embedded:mount_nandctr nand.bin mountpoint
mount_nandctr --otp otp.bin nand.bin mountpoint
mount_nandctr --otp otp.bin --cid nand_cid.bin nand.bin mountpoint
mount_nandctr --otp otp.bin --cid 7468616E6B7334636865636B696E6721 nand.bin mountpoint
mount_nandtwl --console-id 4E696E74656E646F nand_dsi.bin mountpoint
mount_nandtwl --console-id 4E696E74656E646F --cid 576879446F657344536945786973743F nand_dsi.bin mountpoint
mount_nandtwl --console-id ConsoleID.bin --cid CID.bin nand_dsi.bin mountpoint
mount_nandhac --keys prod.keys rawnand.bin mountpoint
mount_nandhac --keys prod.keys -S rawnand.bin.00 mountpoint
mount_nandhac --keys prod.keys --partition SYSTEM SYSTEM.bin mountpoint
mount_ncch content.cxi mountpoint
mount_romfs romfs.bin mountpoint
Nintendo 3DS
directory from an SD card:mount_sd --movable movable.sed "/path/to/Nintendo 3DS" mountpoint
Nintendo 3DS
directory from an SD card with an SD key hexstring:mount_sd --sd-key 504C415900000000504F4B454D4F4E21 "/path/to/Nintendo 3DS" mountpoint
mount_nds
also works):mount_srl game.nds mountpoint
mount_threedsx boot.3dsx mountpoint
ninfs
is under the MIT license.
fuse.py
is under the ISC license (taken from setup.py
).hac/aes.cpp
and hac/aes.hpp
are from @openluopworld's aes_128 commit b5b7f55
, and uses the MIT License.hac/_crypto.cpp
AES-XTS part by @luigoalma, based on @plutooo's crypto module; Python module implementation initially by me(@ihaveamac).Special thanks to @Stary2001 for help with NAND crypto (especially TWL), and @d0k3 for SD crypto.
OTP code is from Stary2001/3ds_tools, and is under the MIT license.