Coder Social home page Coder Social logo

ihaveamac / ninfs Goto Github PK

View Code? Open in Web Editor NEW
413.0 22.0 17.0 14.59 MB

FUSE filesystem Python scripts for Nintendo console files

License: MIT License

Python 96.93% Batchfile 0.22% NSIS 1.48% Shell 0.62% Nix 0.76%
3ds fuse nintendo-3ds fusepy fuse-filesystem mit python python-3 nintendo-switch

ninfs's Introduction

ninfs

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.

Supported types

  • Nintendo 3DS
    • CTR 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 / DSi
    • Nintendo DSi NAND backup ("nand_dsi.bin")
    • Nintendo DS ROM image (".nds", ".srl")
  • iQue Player
    • iQue Player NAND backup (read-only) ("nand.bin")
  • Nintendo Switch
    • Nintendo Switch NAND backup ("rawnand.bin")

Example uses

  • Mount 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 in a 3DS emulator right away.

Setup

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 Boot9, follow the steps on wiki.hacks.guide.

Boot9 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.8.0 or later is required.

Windows

Windows 10 or later is recommended. Windows 7 and 8.1 may continue to work until ninfs's dependencies stop working on it.

Installer

An installer is provided in releases. It includes both ninfs and WinFsp, which is installed if required.

Standalone release

A standalone zip is also provided in releases. WinFsp must be installed separately.

Install with existing Python

  • Install a version of Python 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 of WinFsp.
  • Install ninfs with py -3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zip

Windows on ARM

Official support for Windows on ARM will come eventually. 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.

macOS

Versions of macOS supported by Apple are highly recommended. macOS Sierra is the oldest version that should work. macFUSE or fuse-t is required.

Standalone application

A standalone build is provided in releases. 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 Python

  • Install a version of Python 3.8 or later. Various methods to use Python:
  • Install the latest version of macFUSE or fuse-t.
  • Install ninfs with python3 -m pip install --upgrade https://github.com/ihaveamac/ninfs/archive/2.0.zip

Linux

Arch Linux

ninfs is available in the AUR: normal, with gui, git, git with gui

Other distributions

  • Recent 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 with 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.
  • You can add a desktop entry with 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.
  • To use the GUI, tkinter needs to be installed. On Debian-/Ubuntu-based systems this is python3-tk. On Fedora this is python3-tkinter.

Usage

Graphical user interface

A GUI can be used by specifying the type to be gui (e.g. Windows: py -3 -mninfs gui, Linux/macOS: python3 -mninfs gui). The GUI controls mounting and unmounting.

Command line

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, Linux/macOS: 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. These are less tested and may have bugs due to unknown differences between retail and dev files.

Unmounting

  • Windows: Press Ctrl + C in 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/mount
  • Linux: Run from terminal: fusermount -u /path/to/mount

Examples

  • 3DS game card dump:
    mount_cci game.3ds mountpoint
  • Contents downloaded from CDN:
    mount_cdn cdn_directory mountpoint
  • CDN contents with a specific decrypted titlekey:
    mount_cdn --dec-key 3E3E6769742E696F2F76416A65423C3C cdn_directory mountpoint
  • CIA:
    mount_cia game.cia mountpoint
  • ExeFS:
    mount_exefs exefs.bin mountpoint
  • 3DS NAND backup with essential.exefs embedded:
    mount_nandctr nand.bin mountpoint
  • 3DS NAND backup with an OTP file (Counter is automatically generated):
    mount_nandctr --otp otp.bin nand.bin mountpoint
  • 3DS NAND backup with OTP and CID files:
    mount_nandctr --otp otp.bin --cid nand_cid.bin nand.bin mountpoint
  • 3DS NAND backup with OTP file and a CID hexstring:
    mount_nandctr --otp otp.bin --cid 7468616E6B7334636865636B696E6721 nand.bin mountpoint
  • DSi NAND backup (Counter is automatically generated):
    mount_nandtwl --console-id 5345445543454D45 nand_dsi.bin mountpoint
  • DSi NAND backup with a Console ID hexstring and specified CID hexstring:
    mount_nandtwl --console-id 5345445543454D45 --cid 576879446F657344536945786973743F nand_dsi.bin mountpoint
  • DSi NAND backup with a Console ID file and specified CID file:
    mount_nandtwl --console-id ConsoleID.bin --cid CID.bin nand_dsi.bin mountpoint
  • iQue Player NAND backup:
    mount_nandbb nand.bin mountpoint
  • Switch NAND backup:
    mount_nandhac --keys prod.keys rawnand.bin mountpoint
  • Switch NAND backup in multiple parts:
    mount_nandhac --keys prod.keys -S rawnand.bin.00 mountpoint
  • Switch NAND encrypted partition dump:
    mount_nandhac --keys prod.keys --partition SYSTEM SYSTEM.bin mountpoint
  • NCCH container (.app, .cxi, .cfa, .ncch):
    mount_ncch content.cxi mountpoint
  • RomFS:
    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
  • Nintendo DS ROM image (NDS/SRL, mount_nds also works):
    mount_srl game.nds mountpoint
  • 3DSX homebrew application:
    mount_threedsx boot.3dsx mountpoint

Useful tools

  • wwylele's 3ds-save-tool can be used to extract game saves and extra data (DISA and DIFF, respectively).
    • wwylele's save3ds is 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.
  • OSFMount for Windows can mount FAT12/FAT16/FAT32 partitions in NAND backups.

Related tools

  • roothorick's BUSEHAC is a Linux driver for encrypted Nintendo Switch NANDs.
  • Maschell's fuse-wiiu can be used to mount Wii U contents.
  • koolkdev's wfslib has wfs-fuse to mount the Wii U mlc dumps and usb devices.

License/Credits

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 from Stary2001/3ds_tools, and is under the MIT license.

ninfs's People

Contributors

ckurtz22 avatar curioustommy avatar dependabot[bot] avatar ihaveamac avatar jhynjhiruu avatar luigoalma avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ninfs's Issues

Taking a long time

Fuse now takes an inordinate amount of time to mount NANDs or SD contents. It used to be about a second or so once the Mount button was pushed. Now it consistently takes 5 minutes (I timed it). I'm assuming the last Win10 update did something to cause this because nothing else of significance changed on my PC.

Fuse 1.3.1 x64
Win 10

Mounting Switch emuMMC on Windows

When mounting on Windows, you have to pass "\.\F:" instead of "F:" because of how Windows works with raw devices. Unfortunately this causes an issue where os.stat() does not like that type of file path. Looking into solutions right now

Generate NAND CTR automatically

Can be generated if the plaintext for an encrypted region and the NAND keys are known, the CTRNAND MBR should be a good target since it would never change without the user intentionally doing so. Thanks @pixel-stuck for telling me about this.

Run fail

My OS is win10 64bit,winfsp and osfmount already install,but when i run the tool,it give me an error message like this. Do i miss something?

Custom icon

Some day this should have its own icon, and not use the default tkinter/pyinstaller icons. Not sure what it would look like though.

One idea I had was a 3DS-like thing in the shape of a folder. There's probably better ones.

Can't modify partitions on mounted Switch nand

Whenever I try to modify any of the partition (.img files) from a Switch's mounted NAND I get an error about not being able to modify it, even with sudo. The permissions of all of them seem to show it has write access, but I can't actually write to it.

"KeyslotMissingError: normal key for keyslot 0x40 is not set up"

Warning: TMD Content size and filesize of 00000000 are different. Failed to mount /0000.00000000.ncch: KeyslotMissingError: normal key for keyslot 0x40 is not set up Failed to mount /0001.00000001.ncch: KeyslotMissingError: normal key for keyslot 0x40 is not set up
i'm trying to mount CDN contents for 00040000001ad700. I'm using v1.0b6 64-bit Windows exe.

Option to update SeedDB

In case newer games are used and the used one is outdated.

Leaving this here as a reminder...

Switch NCA support

Would be great if this could support Switch NCAs (especially if it also does XCI and recursively mounts NCAs in XCIs). Other people may also like NSP support.

First stable release checklist

I think fuse-3ds is now developed enough for a full stable release. But before I make a release called "1.0", I need all the features to be tested, and on all supported platforms, to make sure no obvious bugs stay in (like they have in the past).

Any help is appreciated! Testing all the features on 3 platforms is a lot of work for one person.

Please test on Python 3.6.5 if possible, which is the latest and is preferred, but 3.6.1+ is supported. If you're on Windows, you can also use the latest standalone exe in releases.

These platforms are supported:

  • Windows (7 SP1, 8.1, 10)
  • macOS (El Capitan, Sierra, High Sierra)
    • Older ones may work (tested as low as 10.6 Snow Leopard) but these are my primary focus.
  • Linux (any modern one should do)

When posting if a feature works or not, please post the operating system, fuse-3ds version, and (if not standalone exe) Python version used (py -3 -VV or python3 -VV).

Things to try

  • Any mount works on...
    • Windows 32-bit (me)
    • Windows 64-bit (me)
    • macOS (me)
    • Linux
  • All GUI functions work on...
    • Windows (me)
      • Note that drag&drop doesn't work on 32-bit Python at the moment. Still works in the standalone executable.
      • Windows 7 32-bit: me
      • Windows 7 64-bit: me
      • Windows 10 64-bit: me
    • macOS (me)
    • Linux

Mount types

CCI

  • Files read correctly
    • Windows: me
    • macOS: me

CDN

  • Files read correctly
    • Windows: me
    • Ubuntu 18.04: me
  • Works with existing cetk file
    • Windows: me
    • Ubuntu 18.04: me
  • Works with provided titlekey (has priority over cetk if it exists)
    • Windows: me
    • Ubuntu 18.04: me

CIA

  • Encrypted files read correctly
  • Decrypted files read correctly

ExeFS

  • Files read correctly
    • Windows: me
  • Code is decompressed without errors (assuming original .code is not corrupted)

NAND (3DS & DSi) (remember to use -o allow_root or -o allow_other on Linux/macOS, and a directory as mount point on Windows)

  • Files read correctly
    • macOS: me
    • Windows: me
  • Writes to existing files works
    • Windows: me
    • macOS: me
  • Mounting FAT partition works on...
    • Windows (try OSFMount) (me)
    • macOS (use hdiutil or double-click from Finder) (me)
    • Linux
  • Writing in FAT partition works on...

NCCH

  • Encrypted files read correctly
    • Windows: me
    • macOS: me
  • Zero-key encrypted files read correctly
    • Windows: me
    • macOS: me
  • Decrypted files read correctly
    • Windows: me
    • macOS: me
  • decrypted.cxi of encrypted game works with an application that expects a decrypted file
    • macOS: me
    • Windows: me

RomFS

  • Files read correctly
    • Windows: me

SD

  • Files read correctly
    • macOS: me
    • Windows: me
  • Writes to existing files works on...
    • Windows (me)
    • macOS (me)
      • Changing file size while writing in the middle doesn't work properly: #17
    • Linux
      • Arch Linux: someone else
  • Creating new files works on...

3DSX

  • Files read correctly
    • Windows: me
    • macOS: me

Titledir

  • Files read correctly
    • macOS: me
    • Windows: me

Mount from CDN?

This might be a bit out of reach of what you want to do with this program, but could you make it so it can mount contents actually on the CDN? The specific URL could be specified in settings, or hardcoded - it doesn't matter as all CDN URLs return the same files. It wouldn't download the whole thing - it would, like JNUSTool, just allow you to browse the files and download specific ones as wanted.

Treats some decrypted cart images as encrypted

fuse-3ds treats some of my cart images as encrypted, thus attempting to decrypt what is already decrypted and then failing to mount romfs/exefs. The source images successfully get opened by Citra and a lot of other programs, while trying to open decrypted.cxi with Citra leads to it just crashing.

Mount SD failed

Tried mounting a Nintendo 3DS folder through the "SD Card Contents" option. Mounts fine using the non-gui version but freezes the gui version. Hangs when attempting to mount to a drive letter. Left it alone for many minutes and it just stayed frozen until I ctrl-c the console. Output is below. When attempting to mount to a directory, however, it says "[folder] is not accessible. Incorrect function.", with no errors or tracebacks in the console.

Running: ['D:\Games\Nintendo\3DS\Hack\PC\Fuse-3DS\fuse-3ds-1.0b1-x64.exe', 'sd', '-f', 'D:/Games/Nintendo/3DS/SD/_Jon/Nintendo 3DS', 'A:', '--movable', 'D:/Games/Nintendo/3DS/Hack/PC/Fuse-3DS/movable.sed', '-r']
fuse-3ds 1.0b1 - https://github.com/ihaveamac/fuse-3ds
Root dir: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The service fuse-3ds-1.0b1-x64 has been started.
Exception in Tkinter callback
Traceback (most recent call last):
File "Z:\ThingsMore\nintendo\3DS\fuse-3ds\fuse3ds_gui.py", line 171, in press
File "Z:\ThingsMore\nintendo\3DS\fuse-3ds\fuse3ds_gui.py", line 106, in run_mount
File "C:\Users\Ian Burgwin\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 1057, in wait
subprocess.TimeoutExpired: Command '['D:\Games\Nintendo\3DS\Hack\PC\Fuse-3DS\fuse-3ds-1.0b1-x64.exe', 'sd', '-f', 'D:/Games/Nintendo/3DS/SD/_Jon/Nintendo 3DS', 'A:', '--movable', 'D:/Games/Nintendo/3DS/Hack/PC/Fuse-3DS/movable.sed', '-r']' timed out after 3 seconds

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Ian Burgwin\AppData\Local\Programs\Python\Python36\lib\tkinter_init_.py", line 1699, in call
File "C:\Users\Ian Burgwin\AppData\Local\Programs\Python\Python36\lib\site-packages\appJar\appjar.py", line 3494, in
File "Z:\ThingsMore\nintendo\3DS\fuse-3ds\fuse3ds_gui.py", line 177, in press
KeyboardInterrupt

v1.6 doesn't work with this CCI (boot9 is not defined)

Loaded update config.
Setting up GUI...
Doing final setup...
UPDATE: Checking for updates... (Currently running v1.6)
Starting the GUI!
UPDATE: No new version. (Latest is v1.6)
-------------------------------------------------------------------------------
Running: ['C:\\Writ-App\\Game Editing Tools\\Nintendo - Nintendo 3DS\\~General\\
ninfs\\ninfs.exe', 'cci', '-f', 'G:/Roms/Nintendo - Nintendo 3DS/Super Mario 3D
Land (Europe) (En,Fr,De,Es,It,Nl,Pt,Ru).3ds', 'Z:']
ninfs v1.6 - https://github.com/ihaveamac/ninfs
Failed to mount /content0.game.ncch: NameError: name 'boot9' is not defined
Failed to mount /content1.manual.ncch: NameError: name 'boot9' is not defined
Failed to mount /content7.update_o3ds.ncch: NameError: name 'boot9' is not defin
ed
The service ninfs has been started.

I do have a correct boot9.bin in %APPDATA%/3ds
It worked in v1.5

Install using pip fails

I'm running Linux Mint 19.1 and I'm trying to install it with pip.
I have python 3 installed, but I had to install pip and setuptools manually.

If I now try to install it, it throws the following error:
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-xujry9m3/ninfs/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-c3yqxr07-record/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-build-xujry9m3/ninfs/

Add new configuration directory

Maybe I should add a specific one? Some config files could go here. Don't know exactly what though.

  • Windows: %APPDATA%\fuse3ds
  • macOS: ~/Library/Application Support/fuse3ds (or maybe use the one below too)
  • Linux: ~/.config/fuse3ds

Show advanced options

  • show debug options (saving debug output to a log)
  • some FUSE options (e.g. allow_other, allow_root, like for use with mount/hdiutil)
  • others?

Mounting some images does not work and produces the same error message

Mounting some cxi, cia, and NAND backup files produce an error message saying

AttributeError: 'CTRCartImageMount' object has no attribute 'f'

In addition, the images do not mount. The game images are decrypted with GM9, and a correct boot9.bin, boot9_prot.bin, nandcid.bin, otp.bin, and seeddb.bin are provided.

I have gotten other files to work, but never a NAND backup.

MacOS 10.2.6, Python 3.6.4

"The given titlekey must be 32 characters."

When using the GUI on Windows 8 (32-bit) to mount encrypted CDN contents for 00040002001cb001, and enter the correct titlekey (length of 32 characters), I get the error "The given titlekey must be 32 characters.".

Yo-Kai Watch RomFS only shows audio and movies, even though there should be more.

This happens for all 3 main games.
Affected titles:
Yo-kai Watch
Yo-kai Watch 2: Bony Spirits
Yo-kai Watch 2: Fleshy Souls
Yo-kai Watch 2: Psychic Specters
Yo-kai Watch 3: Sushi
Yo-kai Watch 3: Tempura
Yo-kai Watch 3: Sukiyaki
Yo-kai Watch 3 (International release)

I have not tested the side games.

Directory in fuse3ds:
Capture
This directory shows audio and movies.
It should contain more than just that, including graphics, models, textures, dialogue, etc.
No other directory in the game (that I can find) would make sense to hold those files instead.

I have tried the following:
Godmode9 decryption
Dumping my own cartridges

ninfs seems to have issues decrypting sector0x96

I mounted 2 different nand backups(one with an a9lh key2 set as key2 in secret sector and the other has a normal secret sector) and both of the secret sectors from the mounted nands we're incorrect.

Can't mount system title NCCH

Using the latest fuse with an updated seeddb, I cannot mount any system title apps, even when the hex for those reveal an obvious NCCH magic. Those with .code decompress the code and then just fail to mount, to directory or to a drive letter. Those without .code don't mount, either.

An example I'm attempting to mount in fuse: ctrnand\title\00040138\20000002\content\0000002f.app. The exefs of that (according to godmode9) solely contains a .firm file required for uninstalling b9s (or for fixing a faulty FIRM partition).

What happened to the copy on pypi?

I installed it via pip3 install fuse-3ds when the latest version was 1.2b4, and now pip says the package cannot be found. Why is it removed? Can you bring it back to pypi?

NitroARC support

Maybe. There are various formats and some of them are not very well documented. Good place to start could be Pokémon games.

Leaving this here as a reminder...

Nintendo DSi NAND support

Crypto works the same as the 3DS TWL area, so that could mostly be copied over to its own script.

Multiple mounts in one instance

The GUI should probably have a method to mount multiple types without opening an instance of the GUI multiple times.

This would require a big rework of subprocess handling (since only one is supported at the time), plus GUI modifications to support a list of current mounts and a way to unmount them.

Add A .desktop File for Linux

It would be nice to have a way to launch the GUI application on Linux without needing to use terminal. Would you be able to provide a fuse3ds.desktop file? You can have it automatically install to ~/.local/share/applications.

Here is a guide to creating a .desktop file.

Crash when trying to mount 3DS nand backup (from Dev/Panda console)

Hey, hello !

I tried to mount a 3DS nand dump (from a 3DS "Panda" dev console), and i didn't managed to get ninfs work with it.

I tried to use the mount command that use the otp/cid inside the nand dump, and i also tried to pass directly the otp and cid files manually. I also used the boot9 file extracted from the same console. So, i think i maybe have a bug here. Maybe linked to the fact that this dump is from a dev console?

Console output :

mount_nandctr --boot9 /Users/march/Desktop/Preservation_devkit_dump/Panda_3DS_XXXXXXXXX_23-12-2019/XXXXXXXXX_boot9_00.bin --otp /Users/march/Desktop/Preservation_devkit_dump/Panda_3DS_XXXXXXXXX_23-12-2019/otp --cid /Users/march/Desktop/Preservation_devkit_dump/Panda_3DS_XXXXXXXXX_23-12-2019/nand_cid /Users/march/Desktop/Preservation_devkit_dump/Panda_3DS_XXXXXXXXX_23-12-2019/XXXXXXXXX_sysnand_00.bin 3ds1
ninfs v1.7b2 - https://github.com/ihaveamac/ninfs
Traceback (most recent call last):
  File "/usr/local/bin/mount_nandctr", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/ninfs/main.py", line 124, in main
    exit(mount(basename(argv[0])[6:].lower()))
  File "/usr/local/lib/python3.7/site-packages/ninfs/main.py", line 80, in mount
    return module.main(prog=prog)
  File "/usr/local/lib/python3.7/site-packages/ninfs/mount/nandctr.py", line 470, in main
    boot9=a.boot9)
  File "/usr/local/lib/python3.7/site-packages/ninfs/mount/nandctr.py", line 79, in __init__
    self.crypto.setup_keys_from_otp(otp_data)
  File "/usr/local/lib/python3.7/site-packages/ninfs/pyctr/crypto.py", line 165, in wrapper
    return method(self, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/ninfs/pyctr/crypto.py", line 501, in setup_keys_from_otp
    raise CorruptOTPError(f'expected: {otp_hash.hex()}; result: {otp_hash_digest.hex()}')
pyctr.crypto.CorruptOTPError: expected: 1851eb7a858b75830XXXXXXXXXX7a05fcfbd93332325bd55; result: 64ecc94315509dc1aXXXXXXXXXXXXXXXb7f32b83e5d659a9246d604bf46521983

Thanks for the help !

Michel

Mount Switch partition directly

Hello.

I have a partial backup of my Switch image, that have several files that represent the partitions (PRODINFO, SYSTEM, BCPKG, etc.).
Is it possible to mount only one of these partitions or i need to make a whole nand image to mount?

Problem Decrypted.cxi (Bug)

Hi!

I found one bug: if you try to extract a decrypted.cxi smaller than 1 Gb the extraction keeps going on and the file you are copying becomes bigger and bigger...

One hint: Is it possible to add a feature that you can simply decrypt whole ROM in a 3ds format for example?

Thanks!

GM

Changing Windows executable packaging for 2.0

For the 2.0 release I am going to rewrite the gui code, probably using Qt5/PySide2. The problem is this increases the application size significantly, and I don't think it's best to keep it all packed into an executable that extracts everything every time it is run. (Note that the gui does not run in the same process as mounts, instead a subprocess is created. This means that all the files are extracted multiple times, wasting time and resources.)

The most likely alternative will be an NSIS-based installer. This would make things simple for end users, since it can add a start menu entry (and probably make it easier to add support for file associations). It could also include and install WinFsp for users that don't have it.

For those who like portable applications, a version without an installer could be released, but not in the form of a single executable, instead all supporting files would be next to the exe.

Is this possible?

I love how this program provides a cxi on mount which is great for actual game content but is the anyway to get it to provide a cia for updates or dlc so that they can be installed in citra?

[LINUX][GUI][2.0] Gui module non functionnal also locks non-gui invocations

Hi,

Thank you for your work!

I tried to run the GUI version but came across this:

ninfs --help                                                             
Traceback (most recent call last):
  File "/home/darkeox/.local/bin/ninfs", line 11, in <module>
    load_entry_point('ninfs==2.0b1.dev0', 'console_scripts', 'ninfs')()
  File "/home/darkeox/.local/lib/python3.8/site-packages/ninfs/main.py", line 112, in gui
    import _gui
ModuleNotFoundError: No module named '_gui'

I don't know where this module is supposed to reside but it doesn't seem to lie within the package.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.