I have been paying for Nintendo’s “Nintendo Switch Online” for several years now, but I haven’t used it in quite some time. However, I can’t just cancel it: I have played a lot of A Link to the Past on the Super Nintendo emulator you get access to, and I don’t want to lose my save!
This means I’ve been tinkering with how to get the save out of my Switch (and into Retroarch): here’s a writeup. The information here can also be used to extract any save file, not just the SNES emulator.
Let’s jump right in.
Prerequisites
Alright, before we start tinkering, there’s a couple things you’re going to need:
- A moddable Switch. You can have a look at this guide to determine if your Switch is vulnerable to the Tegra boot rom exploit (which means you won’t have to hardmod it). If you have a patched Switch, the only solution is to install a modchip in it.
- A way to run Hekate on your Switch: if your console is vulnerable, this means you’re going to need a “jig” and a USB-C cable.
- A Micro-SD card: we’re going to dump your console-specific encryption keys on it.
- A computer. I run NixOS, so all the commands below use stuff that’s packaged in NixOS (or easily usable through a flake for example). You might have to mess around with the command lines if you use another OS.
You’re also going to need to download some stuff:
- The latest version of Hekate, an alternative Switch bootloader: https://github.com/CTCaer/hekate/releases
- A copy of Lockpick_RCM: the official repo got DMCA’d by Nintendo because this tool extracts decryption keys from your Switch, allowing you to play pirated games. You can still find copies online though. Mine has the MD5 hash
ad5645c67fec2d59fcb7844e203769ee
Setting up your micro-SD card
Make sure your card is formatted as FAT32: exFAT won’t work (and NTFS or ext4 will extra not work).
Then, extract the latest version of Hekate (it’s the hekate_ctcaer_XXX.zip from the releases) to the root of your microSD.
Finally, copy your Lockpick_RCM.bin file to the bootloader/payloads/ folder.
Your microSD should look like this:
$ tree /mnt/usb/
/mnt/usb/
├── bootloader
│ ├── ini
│ ├── payloads
│ │ └── Lockpick_RCM.bin
│ ├── res
│ │ ├── icon_payload.bmp
│ │ └── icon_switch.bmp
│ ├── sys
│ │ ├── emummc.kipm
│ │ ├── l4t
│ │ │ ├── bpmpfw_b01.bin
│ │ │ ├── bpmpfw.bin
│ │ │ ├── mtc_tbl_b01.bin
│ │ │ ├── sc7entry.bin
│ │ │ ├── sc7exit_b01.bin
│ │ │ └── sc7exit.bin
│ │ ├── libsys_lp0.bso
│ │ ├── libsys_minerva.bso
│ │ ├── nyx.bin
│ │ ├── res.pak
│ │ └── thk.bin
│ └── update.bin
└── hekate_ctcaer_6.2.2.bin
7 directories, 17 files
You can now eject your microSD and insert it in your Switch.
Dumping your keys
Once you got the microSD card in your Switch, turn it off and insert the jig as explained in the guide. Then, start it in rescue mode by holding Volume Up and pressing the Power button.
You can check whether it worked by running dmesg -w in a terminal and plugging your Switch to your computer: it should identify itself as “Nvidia Tegra”.
We will use fusee-launcher to send the Hekate payload to the Switch. Any other launcher will work, it’s just that this one is already packaged in NixOS.
$ nix-shell -p fusee-launcher
$ sudo fusee-launcher hekate_ctaer_XXX.bin
It this works, your Switch should display the Hekate splash screen and drop you into Hekate proper.

Tap “Payloads”, then select “Lockpick_RCM”. You will be dropped into Lockpick, whose menu can be navigated with the volumes keys on your Switch, and an option selected with Power.
From there, choose the option to dump your keys, and select “SysNAND” or “System NAND” when prompted.
Reboot your Switch into Hekate, then head over to “Tools” > “USB Tools” > “SD Card”. You should see your Switch’s SD card appear as a removable drive on your computer.
Copy both prod.key and user.key to your computer, in the following folder: ~/.switch/. Then you can eject your virtual SD card from your computer.
Mounting the Switch’s NAND and extracting saves
These two key files will allow us to mount the Switch’s SysNAND on our computer, and from there access the User partition which contains all game saves.
In order to access the contents of the SysNAND, we will use NinFS, a FUSE filesystem driver for the Switch’s NAND. Follow the README over there to install it if you’re not using Nix.
First, we’ll mount the SysNAND (assumoing /dev/sde11 is where your Switch partition is located). In Hekate, go to “Tools” > “USB Tools” > “SysNAND”. Your Switch’s SysNAND will then show up on your computer as removable media.
Mount it with the following commands (assuming /dev/sde11 is the path to your device):
$ sudo mkdir /media/SWITCH
$ sudo nix run github:ihaveamac/ninfs -- nandhac -r --partition USER /dev/sde11 -o allow_other /media/SWITCH/
Then, we will mount the User partition itself:
$ sudo mkdir /media/USER
$ sudo mount -o ro /media/SWITCH/USER.img /media/USER
Finally, you can copy the contents of /media/USER/Saves/ to grab all the save files on your Nintendo Switch.
Extracting save file contents
Each save file is basically an archive file. The last step is now to extract the file tree present in these save files. In order to do this, we will use hactool.
The save files you extracted have file names which are just a bunch of numbers. We can use hactool to identify the TitleID of each save file by running the following script:
#!/usr/bin/env bash
for f in $@; do
titleid=$(hactool -t save -i "$f" 2>/dev/null | fgrep 'Title ID:' | awk '{ print $3 }')
if [ -z "$titleid" ]; then
continue
f i
echo "$f => $titleid"
done
$ ./identify_saves.sh saves/0000*
You can use this TitleDB lookup tool to search for the game that you’re looking for. In our case, we want “Super Nintendo Entertainment System - Nintendo Switch Online”, which has TitleID 01008D300C50C000.
Once we have identified the correct save file, we can extract it with the following command:
$ mkdir snes
$ hactool -t save -x saves/0000000000000056 --outdir snes/
And by navigating to the snes/ folder, we can see the list of all the games saves, each in their own .sram file. You can easily identify the one you want if there was a save state associated to the game: each suspendpoint folder has a screenshot of the moment you took the save state, allowing you to identify the game.
Finally, I used this nifty online tool to fix my character’s name, which got mangled when trying to load this save file with a French ALttP ROM: I guess the alphabet is slightly different between the version used by NSO and the French release.
FAQ
- Can I copy a save back to the Switch?: I don’t think hactool knows how to repack a save file. Even if it did, I’d be wary of doing any modification to your Switch filesystem, lest your console gets banned.
- nandhac fails to mount my Switch’s internal storage: make sure your
prod.keyanduser.keyfiles are correctly stored on your computer, in the~/.switch/folder. You might have to create that folder. - Does this work with other game saves?: Yes! I successfully transferred my Hollow Knight and Slay the Spire saves to my Steam Deck this way. For Hollow Knight, I used this website to convert the save from the Switch format to the PC format.