How to extract savegames from NAND dump (for Checkpoint)

Discussion in 'Switch - Tutorials' started by lordelan, Oct 17, 2019.

  1. lordelan
    OP

    lordelan GBAtemp Psycho!

    Member
    12
    Jan 4, 2015
    Germany
    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
     
  2. billapong

    billapong GBAtemp Regular

    Member
    3
    Sep 21, 2019
    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).
     
  3. lordelan
    OP

    lordelan GBAtemp Psycho!

    Member
    12
    Jan 4, 2015
    Germany
    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. :)
     
    billapong likes this.
  4. CrisFTW

    CrisFTW GBAtemp Maniac

    Member
    8
    Jan 10, 2016
    United States
    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
     
    lordelan likes this.
  5. lordelan
    OP

    lordelan GBAtemp Psycho!

    Member
    12
    Jan 4, 2015
    Germany
    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.
     
  6. Smoker1

    Smoker1 GBAtemp Addict

    Member
    9
    Feb 17, 2015
    United States
    Carmichael, California
    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.
     
  7. lordelan
    OP

    lordelan GBAtemp Psycho!

    Member
    12
    Jan 4, 2015
    Germany
    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.
     
    Smoker1 likes this.
  8. skullkeeper94

    skullkeeper94 Professional USB Corrupter

    Member
    6
    Jun 21, 2016
    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!
     
  9. lordelan
    OP

    lordelan GBAtemp Psycho!

    Member
    12
    Jan 4, 2015
    Germany
    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.
     
  10. skullkeeper94

    skullkeeper94 Professional USB Corrupter

    Member
    6
    Jun 21, 2016
    United States
    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
     
  11. WhoIAm

    WhoIAm Member

    Newcomer
    5
    Mar 17, 2018
    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:
     
    lordelan likes this.
  12. lordelan
    OP

    lordelan GBAtemp Psycho!

    Member
    12
    Jan 4, 2015
    Germany
    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)
     
Quick Reply
Draft saved Draft deleted
Loading...