Tutorial How to extract savegames from NAND dump (for Checkpoint)

lordelan

Well-Known Member
OP
Member
Joined
Jan 4, 2015
Messages
5,375
Trophies
1
Age
42
XP
5,381
Country
Germany
Update 2021

FYI gbatemp user @GarnetSunset made a python script that does the job for you:
https://gist.github.com/GarnetSunset/20caed068b9ce40708f1ff41d895a7cf
Just place it where your save folder is that contains all the saves and run it. You'll end up with a "ready to import" EdiZon pack.

What you need

  • NAND dump
  • Windows
  • HacDiskMount
  • hactoolnet
  • prod.keys renamed to keys.txt (get them with Lockpick RCM)
  • Microsoft Excel (other tools might work as well but the commands may differ so I won't cover them here)
  • Notepad++
Step 1 - Extract save folder from USER partition

  1. In order to utilize HacDiskMount you need to have one rawnand.bin so if you created your dump on a FAT32 card you need the joiner script to join rawnand.bin.00, rawnand.bin.01 and so on into one single file
  2. Open HacDiskMount and go to File -> Open file and select your rawnand.bin
  3. Double click on USER
  4. Your BIS Keys should be there already, test them with the Test button and make sure it says "OK!"
  5. Under Virtual drive make sure the driver is installed and install it otherwise
  6. Pick a letter at Drive letter (I picked S: for Switch :))
  7. Hit the mount button
  8. Open your file browser and go to S:\
  9. Copy over the whole save folder to C:\ so you end up with C:\save\
  10. Close the file browser, unmount the drive (wait a few seconds) and close HacDiskMount
Step 2 - Retrieving newest Title IDs from nswdb

  1. Go to http://nswdb.com/ and hit the Download XML button at the top left to get the most recent Title ID list
  2. Open the file with Notepad++ and copy everything (CTRL + A, CTRL + C) to the clipboard
  3. Go to https://onlinexmltools.com/convert-xml-to-csv (or any other XML to CSV converter that allows individual input for the column seperating character)
  4. Replace the , with a ; at "Column separating character" (this is very important as some games include a "," in their name)
  5. Now paste your clipboard (CTRL + V) into the top left window under XML -> the right windows should automatically be filled up with the CSV content after a moment
  6. Copy that whole CSV content into a new (empty) Notepad++ window
  7. In Notepad++ hit STRG + F, go to the Replace tab and make sure Extended (\n, \r, \t, \0, \x...) is selected at Search mode
  8. Put in ; in the upper input field and \t in the lower one
  9. Hit Replace all to change all semicolons into tabs
  10. Copy the whole content from Notepad++ into the clipboard (CTRL + A, CTRL + C)
  11. Create a new Excel file, name it nswdb.xlsx and open it up
  12. Mark all cells by pressing CTRL + A twice (!)
  13. Change formatting from Standard/Default to Text (you might have to google how to do this for your specific Excel version)
  14. Now click on the very first cell and hit CTRL + V to paste the Title IDs
  15. Now delete all columns except name and Title ID by right clicking the column letter and choosing delete column
  16. You should end up with two columns, the first being the names, the second being the Title IDs
  17. Save the file and keep it open
Step 3 - Retrieving the Title IDs from the saves of your USER partition

Now this sucks a bit as it was the only thing I wasn't able to find a quick and smart solution for. Instead you would have execute a command for each single file in your saves folder but this can be done within a few minutes nevertheless once you're "in it". ;)
  1. Place the keys.txt in the same folder as hactoolnet (not to be confused with HacDiskMount which we don't need any longer by the way)
  2. Open up CMD (hit the Windows key on your keyboard, type in CMD and hit ENTER)
  3. Change to your saves folder:
    Code:
    cd C:\save
  4. Enter the following command:
    Code:
    dir /s/b/o:n > temp.txt
  5. Open the file C:\save\temp.txt with Notepad++ and remove this line from it:
    Code:
    C:\save\temp.txt
  6. Gather all the rest (CTRL + A) and copy it to the clipboard (CTRL + C)
  7. Create a new Excel file, name it save.xlsx and open it up
  8. Put this into the very first cell:
    Code:
    "
  9. Then click on the second cell of the first row (B2)
  10. Paste the content from the temp.txt here (CTRL + V)
  11. Now copy the first cell (A1) with the " and paste it over every empty cell in column A so you'll end up with a table containing the " character in the first column and the path to a file in the save folder in second column in every row
  12. Double click into the third cell of the first row (C1) and paste the following formular (and hitting ENTER afterwards):
    Code:
    =CONCATENATE("hactoolnet.exe --listtitles -t save ";A1;B1;A1)
    (what this does is combining the CMD command that we want to use with the path to the file and some " characters which we can't use in the formular directly as they would tell Excel we're writing plain text, instead we put that character into a column that we're using in the formular now by including A1 before and after the path and filename)
  13. Autofill this formular to the bottom of column C by temporarily clicking into any other cell, then click on C3 again (only once as we don't want to edit it) and now double click the very tiny stairs icon at the bottom right of that cell
  14. Head back to your CMD window
  15. Change the directory to the place where hactoolnet is located, for example by doing this:
    Code:
    cd C:\Tools\Switch\hactoolnet
  16. Now comes the ugly part: Copy C3 from Excel into CMD and execute the command, then double click on the Title ID and copy it back to the Excel into the cell D4
    You have to repeat this for every single line in your Excel sheet so you end up with a Title ID right next to each file path from your save folder
    An example row in your Excel should now look like this:
    First column (A1): "
    Second column (B1): C:\save\0000000000000004
    Third column (C1): hactoolnet.exe --listtitles -t save "C:\save\0000000000000004"
    Fourth column (D1): 01007ef00011e000
Congratulations! You've managed to finish up the worst part of this guide!

Step 4 - mapping the game names to the Title IDs

  1. Still in your save.xlsx double click into the next free cell in the first row (should be E1)
  2. Put in this formular, hit ENTER and autofill it to the bottom:
    Code:
    =UPPER(D1)
    This makes sure all small letters in the Title IDs are capital letters now
  3. Select the whole column E (where we just worked in) and copy it to the clipboard (CTRL + C)
  4. Right click on the first cell of column E and select VALUES at paste options (should be a tiny clipboard symbol with the numbers "123")
    By this we overwrite a formular calculated value by the actual plain text that the formular just brought up
    From now on I call this textify so whenever I say, textify a column, just copy it and paste it over itself as VALUES only
    Now we have our Title IDs with capital letters in column E as plain text
  5. Remember the other Excel file (nswdb.xlsx) which I told you to keep it opened? Good!
    Still in your save.xlsx double click the first free cell in the first row (should be F1) and start typing the following formular (without hitting ENTER):
    Code:
    =VLOOKUP(E1;
    (that last semicolon is very important)
    Now without doing anything else head over to the nswdb.xlsx and select both columns there by clicking on column A and while holding it, moving over to column B. Excel should automatically add those two columns of nswdb.xlsx to your formular. Don't do anything else (don't press ENTER)!
    Just continue typing the formular like this:
    Code:
    ;2;false
    and finally now you can hit ENTER!
  6. Autofill F1 to the bottom and you should end up with the game's name for each Title ID
  7. Textify column F (look at step 4 on how to do this) so you don't need nswdb.xlsx any longer
  8. Replace any special characters like : or ® or . and so on with nothing by selecting the whole column F, hitting CTRL + F, go to Replace, filling in the desired special character in the first input field and leaving the second input field completely empty. Hit Replace all and repeat those steps for any other special characters that appear in your list. The less, the better. The names are most likely there so you know to which game the savefiles belong so it doesn't matter that much how they read like after you're finished
Note: It could be the case that some Title IDs appear twice (so you seem to have duplicated rows in your Excel). In that case the first one is the one you need and you can delete the "clone" row.
However, keep a backup of your save.xlsx before you do this, just in case it wasn't the first row. At least for me it was always the first one.
Step 5 - Creating the batch file for hactoolnet

We're almost finished and the rest is pretty easy! :D
  1. Double click on the next empty cell in the first row of save.xlsx (should be G1)
  2. Paste in the following formular and hit ENTER:
    Code:
    =CONCATENATE("hactoolnet.exe -t save ";A1;B1;A1;" --outdir ";A1;"saves/0x";E1;" ";F1;A1;"/NAND dump")
    You should end up with a line that reads like my example here:
  3. Code:
    hactoolnet.exe -t save "C:\save\0000000000000004" --outdir "saves/0x01007EF00011E000 The Legend of Zelda Breath of the Wild/NAND dump"
  4. Autofill G1 to the bottom
  5. Select the whole column G and copy it to the clipboard (CTRL + C)
  6. Create an empty text file in the same directory as hactoolnet and name it batch.txt
  7. Open it, paste the command column into it (CTRL + V), save it and close it
  8. Rename it to batch.bat and run it
  9. That's it! In your hactoolnet directory there should be a saves folder now which you can directly copy to SD:\switch\checkpoint\ :grog:
Additional info

This guide might work with other savegame homebrews like EdiZon as well. I just didn't test it.

You need to create a savegame for each game in order for it to show up in Checkpoint. In most cases it is enough to just launch them and they'll create it right away so you can keep yourself from long unskippable intro videos by hitting home and closing the game. However if it does not appear in checkpoint, you have to get further into the game until it really creates a save.

I wasn't able to test all this as I've written this guide at work from my memories so if something doesn't work or is spelled wrong, please let me know so I can fix it. Also I'm only aware of the german Excel formular commands. I googled the english commands but don't know if they are really the right ones.

Troubleshooting

For every game that appears in Checkpoint and for which you copied over a save from your NAND dump with this guide, there should be an entry named "NAND dump" now which you can restore and you're done.
However, sometimes Checkpoint names the folders differently to what you might have ended up, especially by replacing the special characters in Excel.

If a game appears in Checkpoint without having the "NAND dump" entry for which you are sure it has to be there, do this:
  1. Select the game in Checkpoint and create a new backup
  2. Hit + to let it create it with the recommended name (your user + creation date) and wait for it to finish
  3. Close Checkpoint
  4. Open a file browser like Apollo or NX-Shell
  5. Navigate to SD:\switch\Checkpoint\saves\
  6. You should find two folders with the same title ID but slightly differently spelled game names there, something like
    Code:
    The Legend of Zelda Breath of the Wild
    The Legend of Zelda   Breath of the Wild
  7. Find the one with the "NAND dump" folder and copy/cut it
  8. Now find the one with the backup that Cheackpoint just created (your user + creation date) and paste the folder right next to it so you end up with something like
    Code:
    Arnold 2019-01-04
    NAND dump
  9. Head back to Checkpoint and it should be there now
 
Last edited by lordelan,

billapong

Well-Known Member
Member
Joined
Sep 21, 2019
Messages
265
Trophies
0
XP
280
Country
United States
Nice guide. Could be useful for people who don't want to run CFW on their system NAND and would like to backup their saves (so there's no ban risk).
 

lordelan

Well-Known Member
OP
Member
Joined
Jan 4, 2015
Messages
5,375
Trophies
1
Age
42
XP
5,381
Country
Germany
Nice guide. Could be useful for people who don't want to run CFW on their system NAND and would like to backup their saves (so there's no ban risk).
Totally forgot about that. Memloader + HacDiskMount indeed make it possible to get sysNAND saves this way without "touching" it in a way Nintendo could detect.
My use case was that I've lost my Switch but luckily had a NAND dump on my PC which was way newer than the last Checkpoint batch update I made of all my games. :)
 
  • Like
Reactions: billapong
D

Deleted User

Guest
I was always told to use this method instead of booting into CFW just to backup save data. Surprisingly still haven't been banned from dumping SMM2 levels for 11 weeks straight. I will use this method just to stay off the radar in case Nintendo somehow updates their system to detect homebrew usage
 
  • Like
Reactions: lordelan

lordelan

Well-Known Member
OP
Member
Joined
Jan 4, 2015
Messages
5,375
Trophies
1
Age
42
XP
5,381
Country
Germany
I was always told to use this method instead of booting into CFW just to backup save data. Surprisingly still haven't been banned from dumping SMM2 levels for 11 weeks straight. I will use this method just to stay off the radar in case Nintendo somehow updates their system to detect homebrew usage
In all honesty, by only dumping your games you should be technically not altering them so you won't get detected but yeah, to be completely sure, avoid homebrews on sysnand.
 

lordelan

Well-Known Member
OP
Member
Joined
Jan 4, 2015
Messages
5,375
Trophies
1
Age
42
XP
5,381
Country
Germany
Can this be done on a Patched (Unhackable) Switch? Have a few Games I want to take the Saves from and move them to my Hacked Switch.
No, not unless you are on a firmware where you can use Pegaswitch/Pegascape.
A patched Switch has no benefits at all. Look for a used unpatched one, use the official way to transfer your saves to it and sell the patched one.
 
  • Like
Reactions: Smoker1

skullkeeper94

Professional USB Corrupter
Member
Joined
Jun 21, 2016
Messages
389
Trophies
0
XP
1,484
Country
United States
Sooo, like, say I have a NAND backup with a game save and a Switch. Could I get the save data from that and somehow put it on my switch directly?

I don't have the game anymore (and neither does anyone I know apparently) and want that data for November!
 

lordelan

Well-Known Member
OP
Member
Joined
Jan 4, 2015
Messages
5,375
Trophies
1
Age
42
XP
5,381
Country
Germany
Sooo, like, say I have a NAND backup with a game save and a Switch. Could I get the save data from that and somehow put it on my switch directly?

I don't have the game anymore (and neither does anyone I know apparently) and want that data for November!
Sure.
You pull it out of your NAND backup following the guide. That makes you end up with a checkpoint ready format with which you inject it on your (new) Switch. Just keep in mind that you would have to start the game at least once before you can inject it since Checkpoint only lists games for which a savegame already has been created.
 

skullkeeper94

Professional USB Corrupter
Member
Joined
Jun 21, 2016
Messages
389
Trophies
0
XP
1,484
Country
United States
Sure.
You pull it out of your NAND backup following the guide. That makes you end up with a checkpoint ready format with which you inject it on your (new) Switch. Just keep in mind that you would have to start the game at least once before you can inject it since Checkpoint only lists games for which a savegame already has been created.
Dang, I was meaning just NAND-to-NAND directly. I guess it makes sense I'd have to use Checkpoint. Gonna find a LG:E somewhere :P
 

WhoIAm

Active Member
Newcomer
Joined
Mar 17, 2018
Messages
35
Trophies
0
Age
24
XP
1,414
Country
United States
Thanks for this guide, I've been looking for one for months. I managed to figure out just enough on my own to transfer my BoTW save from my clean Switch to my Wii U (that game's save directory is very distinct), but I had no idea how to deal with the title ID's for nearly everything else :mellow:
 
  • Like
Reactions: lordelan

lordelan

Well-Known Member
OP
Member
Joined
Jan 4, 2015
Messages
5,375
Trophies
1
Age
42
XP
5,381
Country
Germany
Dang, I was meaning just NAND-to-NAND directly. I guess it makes sense I'd have to use Checkpoint. Gonna find a LG:E somewhere :P
Even for NAND to NAND you would have to use Checkpoint (or EdiZon or whatever) in the end because when savegames are created on a Switch, they are hidden behind files that are randomly named (those on the save folder of the user partition).
Something like 0000000000000004 which is not the title ID so you can't just take that file (after finding out with hactoolnet that it's Zelda) and copy it to another NAND, because Zelda could end up on that NAND in a completely different file (like 00000000000000B7). Also a file named 0000000000000004 could already be present there but is used on that Switch to store the savegame for Splatoon 2. It really differs from NAND to NAND.

Something very similar happens to Switch games that you install btw, no matter if you install them with homebrews (Goldleaf, Tinfoil) or the eShop. They are installed to SD:\Nintendo\ in randomly named folders (even split over multiple of those folders there) so you can't just copy that Nintendo folder from one Switch to the other, install only the tickets and you're good to go.
(please correct me if I'm wrong, all you devs)

So yeah ...
for extracting: My guide
for injecting: Checkpoint (or any other homebrew)
 

lokinmodar

New Member
Newbie
Joined
Jan 17, 2012
Messages
3
Trophies
0
XP
101
Country
Brazil
Found it easier to make a batch file that outputs to a txt file in Step 3.15 and in step 3.16 open it in excel and extract only the TitleID lines :)

EDIT: This process also works with SXOS Emunand files. Just have to rejoin them and do all the rest!
 
Last edited by lokinmodar,
  • Like
Reactions: lordelan
General chit-chat
Help Users
    Dark_Phoras @ Dark_Phoras: Games big now