|
1 |
| -# gcdumptool |
2 |
| -Nintendo Switch Game Card Dump Tool |
| 1 | +# nxdumptool |
| 2 | +Nintendo Switch Dump Tool |
3 | 3 |
|
4 | 4 | Main features
|
5 | 5 | --------------
|
6 | 6 |
|
7 | 7 | * Generates full Cartridge Image dumps (XCI) with optional certificate removal and optional trimming.
|
8 |
| -* Generates installable Nintendo Submission Packages (NSP) from base applications, updates and DLCs stored in the inserted game card. |
| 8 | +* Generates installable Nintendo Submission Packages (NSP) from base applications, updates and DLCs stored in the inserted game card, SD card and eMMC storage devices. |
9 | 9 | * Compatible with multigame carts.
|
10 | 10 | * CRC32 checksum calculation for XCI/NSP dumps.
|
11 | 11 | * Full XCI dump verification using XML database from NSWDB.COM (NSWreleases.xml).
|
12 | 12 | * XML database and in-app update via libcurl.
|
13 | 13 | * Precise HFS0 raw partition dumping, using the root HFS0 header from the game card.
|
14 | 14 | * HFS0 partition file data dumping.
|
15 | 15 | * HFS0 partition file browser with manual file dump support.
|
16 |
| -* RomFS section file data dumping. |
17 |
| -* RomFS section file browser with manual file dump support. |
| 16 | +* Program NCA ExeFS section file data dumping. |
| 17 | +* Program NCA ExeFS section file browser with manual file dump support. |
| 18 | +* Program NCA RomFS section file data dumping. |
| 19 | +* Program NCA RomFS section file browser with manual file dump support. |
18 | 20 | * Manual game card certificate dump.
|
19 | 21 | * Free SD card space checks in place.
|
20 | 22 | * File splitting support for all operations.
|
21 | 23 | * Game card metadata retrieval using NCM and NS services.
|
22 | 24 | * Dump speed calculation, ETA calculation and progress bar.
|
23 | 25 |
|
| 26 | +Operations related to installed SD/eMMC titles require a keys file located at "sdmc:/switch/prod.keys". Use [Lockpick_RCM](https://github.com/shchmue/Lockpick_RCM) to generate it. |
| 27 | + |
24 | 28 | Thanks to
|
25 | 29 | --------------
|
26 | 30 |
|
27 |
| -* MCMrARM, for creating the original application. |
28 |
| -* RSDuck, for vba-next-switch port. It's UI menu code was taken as a basis for this application. |
29 |
| -* Foen, for giving me some pretty good hints about how to use the NCM service. |
30 |
| -* Yellows8, for helping me fix a silly bug in my implementation of some NCM service IPC calls. |
31 |
| -* SciresM, for hactool. It's NCA content handling procedure is reproduced during the NSP dump process. |
32 |
| -* The-4n, for 4NXCI and hacPack. The NCA content patching procedure used in 4NXCI is replicated in the application, as well as the NACP XML generation from hacPack. |
33 |
| -* shchmue, for Lockpick. It was used as a reference for the key-collection algorithm needed for the NSP dump and RomFS dump/browse procedures. |
34 |
| -* Björn Samuelsson, for his public domain CRC32 checksum calculation code for C (crc32_fast.c). |
35 |
| -* AnalogMan, for his constant support and ideas. |
36 |
| -* RattletraPM, for the awesome icon used in the application. |
| 31 | +* [MCMrARM](https://github.com/MCMrARM), for creating the original application. |
| 32 | +* [RSDuck](https://github.com/RSDuck), for vba-next-switch port. It's UI menu code was taken as a basis for this application. |
| 33 | +* [foen](https://github.com/foen), for giving me some pretty good hints about how to use the NCM service. |
| 34 | +* [yellows8](https://github.com/yellows8), for helping me fix a silly bug in my implementation of some NCM service IPC calls. |
| 35 | +* [SciresM](https://github.com/SciresM), for [hactool](https://github.com/SciresM/hactool) (licensed under [ISC](https://github.com/SciresM/hactool/blob/master/LICENSE)). It's NCA content handling procedure is reproduced during the NSP dump process. |
| 36 | +* [The-4n](https://github.com/The-4n), for [4NXCI](https://github.com/The-4n/4NXCI) (licensed under [ISC](https://github.com/The-4n/4NXCI/blob/master/LICENSE)) and [hacPack](https://github.com/The-4n/hacPack) (licensed under [GPLv2](https://github.com/The-4n/hacPack/blob/master/LICENSE)). The NCA content patching procedure used in 4NXCI is replicated in the application, as well as the NACP XML generation from hacPack. |
| 37 | +* [shchmue](https://github.com/shchmue), for [Lockpick](https://github.com/shchmue/Lockpick) (licensed under [GPLv2](https://github.com/shchmue/Lockpick/blob/master/LICENSE)). It is used as a reference for the runtime key-collection algorithm needed for the NSP dump, ExeFS dump/browse and RomFS dump/browse procedures. |
| 38 | +* Björn Samuelsson, for his [public domain CRC32 checksum calculation C-code](http://home.thep.lu.se/~bjorn/crc). |
| 39 | +* [Adubbz](https://github.com/Adubbz), for [Tinfoil](https://github.com/Adubbz/Tinfoil) (licensed under [MIT](https://github.com/Adubbz/Tinfoil/blob/master/LICENSE)). Its wrappers for ES service IPC calls are used in the application. |
| 40 | +* ChaN, for the [FatFs module](http://elm-chan.org/fsw/ff/00index_e.html) (licensed under [FatFs license](http://elm-chan.org/fsw/ff/doc/appnote.html#license)). It is used to read ES savedata files from the BIS System partition. |
| 41 | +* [AnalogMan](https://github.com/AnalogMan151), for his constant support and ideas. |
| 42 | +* [RattletraPM](https://github.com/RattletraPM), for the awesome icon used in the application. |
37 | 43 | * The GNOME project, from which the high contrast directory/file icons for the filebrowser modes were retrieved.
|
38 | 44 | * The folks from ReSwitched, for working towards the creation of a good homebrew ecosystem.
|
| 45 | +* The Comfy Boyes, for being both awesome and supportive. You know who you are. |
| 46 | + |
| 47 | +Donate |
| 48 | +-------------- |
| 49 | + |
| 50 | +If you like my work and you'd like to support me in any way, it's not necessary, but a donation would be greatly appreciated! |
| 51 | + |
| 52 | +[](https://paypal.me/DarkMatterCore) |
39 | 53 |
|
40 | 54 | Changelog
|
41 | 55 | --------------
|
42 | 56 |
|
| 57 | +**v1.1.1:** |
| 58 | +* Project name changed to `nxdumptool`. This is no longer a gamecard-only tool. |
| 59 | +* Added ExeFS dumping/browsing support. This feature, along with the already available RomFS options, makes the application an excellent tool for modders! |
| 60 | +* Added compatibility with FS process memory layout in the key retrieval procedure while using emuMMC. Thanks to [shchmue](https://github.com/shchmue)! |
| 61 | +* Due to public demand, NSP dumping, ExeFS dumping/browsing and RomFS dumping/browsing support has been added for base applications, updates and DLCs available in both SD card and eMMC! |
| 62 | + * Now it's possible to select the source storage device (gamecard, SD card / eMMC) for any operation right after launching the application. |
| 63 | + * The gamecard submenu works exactly like the main menu has worked up to this point (except for the update options, which are now displayed in the new main menu). |
| 64 | + * The SD card / eMMC submenu shows installed base applications along with their icons. Upon selecting a title, a submenu with NSP and RomFS options will show up. It's also possible to dump updates/DLCs for an installed base application this way. |
| 65 | + * If there's installed content (updates/DLCs) with missing base application titles, pressing Y on the SD card / eMMC submenu will display this "orphan" content list and let you dump titles from it nonetheless. |
| 66 | + * It is possible to generate console-specific NSP dumps, dumps with modified tickets to remove console-specific data, and ticket-less dumps with standard NCA key area crypto. |
| 67 | + * Two new options are available in the NSP dump submenus for SD/eMMC titles: "Remove console specific data" and "Generate ticket-less dump". The latter won't appear if the former isn't enabled. |
| 68 | + * "Remove console specific data" cleans console specific data fields from a "personalized" ticket and replaces its RSA titlekey block with a 16-byte encrypted titlekey, essentially converting it to a "common" ticket. This option has no effect if the title already uses a "common" ticket. |
| 69 | + * "Generate ticket-less dump" goes another step ahead by cleaning up the Rights ID field in every NCA content file that includes it, stores the decrypted titlekey in the NCA key area and then encrypts this area using standard crypto, removing the need for a tik/cert combination. |
| 70 | + * Console-specific NSP dumps and dumps with modified tickets include both `tik` and `cert` files. |
| 71 | + * All NSP dumps generated from installed SD/eMMC titles include both `.cnmt.xml` and `.nacp.xml` files whenever possible. |
| 72 | + * Sadly, due to limitations in the methods currently used to perform key retrieval/derivation at runtime, NSP dumping, ExeFS dumping/browsing and RomFS dumping/browsing for SD/eMMC titles require the "sdmc:/switch/prod.keys" file. Specifically, these are the needed keys: |
| 73 | + * `eticket_rsa_kek`. |
| 74 | + * `titlekek_##` (varies from `00` to `1F`). |
| 75 | + * Additionally, ticket-less NSP dumps for SD/eMMC titles also require the following keys: |
| 76 | + * `key_area_key_application_##` (varies from `00` to `1F`). |
| 77 | + * `key_area_key_ocean_##` (varies from `00` to `1F`). |
| 78 | + * `key_area_key_system_##` (varies from `00` to `1F`). |
| 79 | + * All gamecard-related operations can still be performed without the need for a keys file! |
| 80 | +* Output data generated by the application will now be saved to its corresponding subdirectory in "sdmc:/nxdumptool/": |
| 81 | + * XCI dumps: "sdmc:/nxdumptool/XCI/". |
| 82 | + * NSP dumps: "sdmc:/nxdumptool/NSP/". |
| 83 | + * HFS0 data: "sdmc:/nxdumptool/HFS0/". |
| 84 | + * ExeFS data: "sdmc:/nxdumptool/ExeFS/". |
| 85 | + * RomFS data: "sdmc:/nxdumptool/RomFS/". |
| 86 | + * Certificate dumps: "sdmc:/nxdumptool/Certificate/". |
| 87 | +* The location for the NSWDB.COM XML database has been moved to "sdmc:/nxdumptool/NSWreleases.xml". |
| 88 | +* Tickets from updates with titlekey crypto dumped from gamecards are now converted to regular "common" tickets before being written to the output NSP dump. |
| 89 | +* The content distribution type for updates dumped from custom XCIs mounted through SX OS is now set to "download". |
| 90 | +* Fixed a NCM service handle exhaustion bug if an error ocurred while reading the RomFS section entry from the Program NCA for any base application. |
| 91 | +* Changed the application icon yet again. Big thanks to RattletraPM! |
| 92 | +* Minor changes and other various general fixes. |
| 93 | + |
| 94 | +Thanks to [simontime](https://github.com/simontime) for helping me out with the RSA certificate chain retrieval process! Also thanks to MUXI from PSXTools forums for providing with testing! |
| 95 | + |
43 | 96 | **v1.1.0:**
|
44 | 97 | * Replaced the application icon with a new, stylish one made by RattletraPM. Thanks a lot!
|
45 | 98 | * Gamecard base application icons are now retrieved and displayed in the menu.
|
@@ -75,7 +128,7 @@ Changelog
|
75 | 128 | - If only the base application is included, like most gamecards, choosing the NSP dump option in the main menu will take you right to the base application dump menu.
|
76 | 129 | - Once you enter a submenu, you'll be able to choose exactly which title to dump belonging to that category.
|
77 | 130 | - Output update NSPs will not be modified in any way. Thus, unlike NSPs from base applications and DLCs, their CRC32 checksums will always be the same.
|
78 |
| -* Fixed the minimum system version field size in the extended CNMT header struct. Thanks to @0Liam ! |
| 131 | +* Fixed the minimum system version field size in the extended CNMT header struct. Thanks to [0Liam](https://github.com/0Liam)! |
79 | 132 | * Changed the naming convention for output NSP dumps:
|
80 | 133 | - Base application: "sdmc:/[GameName] v[GameVersion] ([TitleID]) (BASE).nsp".
|
81 | 134 | - Update: "sdmc:/[GameName] v[UpdateVersion] ([UpdateTitleID]) (UPD).nsp".
|
|
0 commit comments