用于 Nintendo 控制台文件的 FUSE 文件系统 Python 脚本
项目描述
宁夫
ninfs(以前的 fuse-3ds)是一个 FUSE 程序,用于从任天堂游戏机中提取数据。它通过呈现一个包含游戏内容、NAND 或 SD 卡内容的虚拟文件系统来工作,您可以只浏览和复制所需的文件。
支持 Windows、macOS 和 Linux。
支持的类型
- 任天堂 3DS:
- CTR 购物车图片(“.3ds”、“.cci”)
- CDN 内容(“cetk”、“tmd”和内容)
- CTR 可导入存档(“.cia”)
- 可执行文件系统(“.exefs”、“exefs.bin”)
- 任天堂 3DS NAND 备份(“nand.bin”)
- NCCH(“.cxi”、“.cfa”、“.ncch”、“.app”)
- 只读文件系统(“.romfs”、“romfs.bin”)
- SD 卡内容(来自 SD 的“Nintendo 3DS”)
- 3DSX 自制软件(“.3dsx”)
- Titles 目录(来自 NAND 或 SD 的“title”)
- 任天堂 DS / DSi
- 任天堂 DSi NAND 备份(“nand_dsi.bin”)
- Nintendo DS ROM 映像(“.nds”、“.srl”)
- 任天堂开关
- Nintendo Switch NAND 备份(“rawnand.bin”)
示例用途
- 挂载一个 NAND 备份并浏览 CTRNAND、TWLNAND 和其他文件,然后写回它们,而无需先提取和解密它们。
- 浏览解密的 SD 卡内容。转储已安装的游戏并保存,或在两个系统的 SD 内容之间复制内容。
- 从 CIA、CCI(“.3ds”)、NCCH、RomFS、原始 CDN 内容中提取游戏文件,只需安装它们并浏览其文件即可。或者使用虚拟解密文件并立即开始在Citra中玩游戏。
设置
对于 3DS 类型,需要 ARM9 bootROM。您可以使用 boot9strap 转储它,它可以通过3DS Hacks Guide进行设置。它按以下顺序检查:
--boot9
参数(如果设置)BOOT9_PATH
环境变量(如果设置)%APPDATA%\3ds\boot9.bin
(特定于 Windows)~/Library/Application Support/3ds/boot9.bin
(特定于 macOS)~/.3ds/boot9.bin
~/3ds/boot9.bin
boot9_prot.bin
也可以在所有这些位置使用。
" ~
" 表示用户的主目录。“ ~/3ds
” 意味着/Users/username/3ds
在 macOS 和C:\Users\username\3ds
Windows 上。
CDN、CIA 和 NCCH 安装可能需要SeedDB来安装使用种子的较新游戏(2015 年以上)的 NCCH 容器。
SeedDB 按以下顺序检查:
--seeddb
参数(如果设置)SEEDDB_PATH
环境变量(如果设置)%APPDATA%\3ds\seeddb.bin
(特定于 Windows)~/Library/Application Support/3ds/seeddb.bin
(特定于 macOS)~/.3ds/seeddb.bin
~/3ds/seeddb.bin
需要 Python 3.6.1+ 和 pycryptodomex。GUI 需要 appJar。
视窗
需要 Windows 7 或更高版本。
可以使用带有 GUI 的独立可执行文件。您可以从GitHub或GBAtemp 下载中心下载单个可执行文件将出现一个窗口,让您轻松选择挂载选项。
不必安装 Python,但仍需要WinFsp。
使用现有的 Python 安装
- 安装最新版本的Python 3。在 64 位 Windows 上首选 x86-64 版本。
- 或者,使用Microsoft Store 中的 Python 3.7。请注意,必须使用
python
or ,而不是.python3
py -3
- 或者,使用Microsoft Store 中的 Python 3.7。请注意,必须使用
- 安装最新版本的WinFsp。
- 安装 ninfs
py -3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/master.zip
。- 使用 GUI 支持:
py -3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/master.zip#egg=ninfs[gui]
- 使用 GUI 支持:
苹果系统
可以使用带有 GUI 的独立应用程序包。需要 OS X 10.9.5 Mavericks 或更高版本。您可以从GitHub下载 DMG 。
不必安装 Python,但仍然需要FUSE for macOS 。
使用现有的 Python 安装
强烈推荐 Apple 支持的 macOS 版本。Mac OS X Snow Leopard 是可以运行的最低版本。
- 安装最新版本的 Python 3。推荐的方式是Homebrew。您还可以使用来自python.org的安装程序或类似pyenv的工具。
- 为 macOS安装最新版本的FUSE。
- 安装 ninfs
python3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/master.zip
。- 使用 GUI 支持:
python3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/master.zip#egg=ninfs[gui]
- 使用 GUI 支持:
Linux
- Arch Linux: ninfs 在 AUR 中可用: normal , with gui , git , git with gui
- 最近的发行版应预先安装 Python 3.6.1 或更高版本,或包含在其存储库中。如果没有,您可以使用额外的存储库(例如deadsnakes 的Ubuntu 的 PPA),从 source 构建,或使用pyenv 之类的工具。
- 大多数发行版应该默认启用/安装保险丝。如果不是,请使用您的包管理器。
- 安装 ninfs
python3 -m pip install --upgrade --user https://github.com/ihaveamac/ninfs/archive/master.zip
。--user
如果您使用的是虚拟环境,则不需要。- 使用 GUI 支持:
python3 -m pip install --upgrade --user https://github.com/ihaveamac/ninfs/archive/master.zip#egg=ninfs[gui]
- 您可以使用
python3 -m ninfs --install-desktop-entry
. 如果要安装到默认 ($XDG_DATA_HOME
) 以外的位置,可以添加另一个参数,其路径为/usr/local/share
.
用法
图形用户界面
如果安装了带有 GUI 支持的 ninfs,则可以通过指定类型来使用 GUI gui
(例如 Windows: py -3 -mninfs gui
、 *nix: python3 -mninfs gui
)。GUI 控制安装和卸载。
命令行
使用“ mount_<type>
”(例如mount_cci game.3ds mountpoint
)运行挂载脚本。用于-h
查看脚本的参数。
如果它不起作用,另一种方法是使用<python-cmd> -mninfs <type>
(例如 Windows: py -3 -mninfs cci game.3ds mountpoint
, *nix: python3 -mninfs cci game.3ds mountpoint
)。
Windows 用户可以使用驱动器F:
号作为挂载点,或者使用*
驱动器号将自动选择。
卸载
- Windows:在命令提示符/PowerShell 窗口中按Ctrl+ 。C
- macOS:两种方法:
- 右键单击挂载并选择“弹出“驱动器名称””。
- 从终端运行:
diskutil unmount /path/to/mount
- Linux:从终端运行:
fusermount -u /path/to/mount
例子
- 3DS游戏卡转储:
mount_cci game.3ds mountpoint
- 从 CDN 下载的内容:
mount_cdn cdn_directory mountpoint
- 具有特定解密标题密钥的 CDN 内容:
mount_cdn --dec-key 3E3E6769742E696F2F76416A65423C3C cdn_directory mountpoint
- 中央情报局:
mount_cia game.cia mountpoint
- 执行文件:
mount_exefs exefs.bin mountpoint
essential.exefs
嵌入式3DS NAND 备份:
mount_nandctr nand.bin mountpoint
- 带有 OTP 文件的 3DS NAND 备份(自动生成计数器):
mount_nandctr --otp otp.bin nand.bin mountpoint
- 带有 OTP 和 CID 文件的 3DS NAND 备份:
mount_nandctr --otp otp.bin --cid nand_cid.bin nand.bin mountpoint
- 带有 OTP 文件和 CID 十六进制字符串的 3DS NAND 备份:
mount_nandctr --otp otp.bin --cid 7468616E6B7334636865636B696E6721 nand.bin mountpoint
- DSi NAND备份(计数器自动生成):
mount_nandtwl --console-id 4E696E74656E646F nand_dsi.bin mountpoint
- 带有控制台 ID 十六进制字符串和指定 CID 十六进制字符串的 DSi NAND 备份:
mount_nandtwl --console-id 4E696E74656E646F --cid 576879446F657344536945786973743F nand_dsi.bin mountpoint
- 带有控制台 ID 文件和指定 CID 文件的 DSi NAND 备份:
mount_nandtwl --console-id ConsoleID.bin --cid CID.bin nand_dsi.bin mountpoint
- 切换NAND备份
mount_nandhac --keys prod.keys rawnand.bin mountpoint
- 多部分切换NAND备份
mount_nandhac --keys prod.keys -S rawnand.bin.00 mountpoint
- NCCH 容器(.app、.cxi、.cfa、.ncch):
mount_ncch content.cxi mountpoint
- ROMFS:
mount_romfs romfs.bin mountpoint
Nintendo 3DS
SD卡中的目录:
mount_sd --movable movable.sed "/path/to/Nintendo 3DS" mountpoint
Nintendo 3DS
带有 SD 密钥十六进制字符串的 SD 卡中的目录:
mount_sd --sd-key 504C415900000000504F4B454D4F4E21 "/path/to/Nintendo 3DS" mountpoint
- Nintendo DS ROM 映像(NDS/SRL,
mount_nds
也可以):
mount_srl game.nds
- 3DSX 自制应用程序:
mount_threedsx boot.3dsx mountpoint
title
来自 NAND 备份或 SD 卡安装中的目录:
mount_titledir title mountpoint
有用的工具
- wwylele 的3ds-save-tool可用于提取游戏保存和额外数据(分别为 DISA 和 DIFF)。
- wwylele 的save3ds是用于 3DS 保存文件的 FUSE 安装。目前仅支持 macOS 和 Linux。
- OSFMount for Windows 可以在 NAND 备份中挂载 FAT12/FAT16 分区。
相关工具
许可证/学分
ninfs
是在麻省理工学院许可下。fuse.py
是在 ISC 许可下(取自setup.py
)。hac/aes.cpp
并且hac/aes.hpp
来自@openluopworld 的aes_128 commitb5b7f55
,并使用 MIT 许可证。hac/ccrypto.cpp
AES-XTS 部分由@luigoalma 提供,基于@plutooo 的加密模块;我的 Python 模块实现(@ihaveamac)。
特别感谢 @Stary2001 对 NAND 加密(尤其是 TWL)的帮助,以及 @d0k3 对于 SD 加密的帮助。
OTP 代码来自Stary2001/3ds_tools,并在 MIT 许可下。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。