Gruetzig's shithole

Info

This guide allows you to system transfer everything between 3DS systems of the same region and country without using the official System Transfer tool.
Luma3DS v11.0 or higher must be running on both consoles and has to be configured and run at least once to generate the sd:/luma/backups folder on both consoles.
Also you need medium experience with the command line to follow along.
This guide was written with Linux in mind, but should work equally fine on Windows and macOS. Contact gruetzig on Discord if you see any potential for improvement. I won’t be available to help unless I gave you this guide

What you need

  • Python 3
  • cleaninty (will be downloaded in the process)
  • 2 working 3DS consoles of the same region modded with latest Luma3DS and GodMode9, good modding tutorial can be found here: 3ds.hacks.guide
  • 2 SD cards(doing it with one is possible but pain and wont be covered here)
  • cleaninty’s ExtractSystemElements script (press Ctrl+S to save it if it opens as a text document in your browser)
  • faketik (the .3dsx)

Section 0 - Explainations

In this guide, the console you’re transferring from is referred to as the “source console”,
The console you’re transferring to is referred to as the “target console”,
The SD card from the source console is referred to as the “source console’s SD card”,
The SD card from the target console is referred to as the “target console’s SD card”.

Section I - Backing up important files and other Prep work

  1. Create a new folder on your computer, name it exactly “3DS_Backups”
    • the name doesn’t necessarily matter. this folder will be used to store files from this guide.
  2. Copy ExtractSystemElements.gm9 to /gm9/scripts/ on the source console’s SD card

Section I-I - Launching GodMode9 on the source console

  1. Turn on the source console with the source console’s SD card inside while holding the (Start) button to launch GodMode9
    • If you see the Luma chainloader instead, select GodMode9 using the D-Pad and (A) button
  2. If you are prompted to create an essential files backup, press (A) to do so, then press (A) to continue once it has completed
  3. If you are prompted to fix the RTC date&time, press (A) to do so, then set the date and time, then press (A) to continue

Section I-II - Creating a NAND backup on the source console

  1. Press (Home) to bring up the action menu
  2. Select “Scripts…”
  3. Select “GM9Megascript”
  4. Select “Backup Options”
  5. Select “SysNAND Backup”
  6. Press (A) to confirm
    • This process will take some time
    • If you get an error, make sure that you have at least 1.3GB of free space on the source console’s SD card
  7. Press (A) to continue
  8. Press (B) to return to the main menu

Section I-III Extracting non-unique console data required for cleaninty

  1. Press (Home) to bring up the action menu
  2. Select “Scripts…”
  3. Select ExtractSystemElements
    • This process will take some time
    • When it finshes, you’ll be back in the main menu

Section I-IV Backing up CTRNAND data

  1. Navigate to [0:] SDCARD
  2. Press R+(Y) to create a new folder, name it ctrnand
  3. Press (B) to return to the main menu
  4. Navigate to [1:] SYSNAND CTRNAND
  5. Press (Y) on the data folder to copy it
  6. Press (B) to return to the main menu
  7. Navigate to [0:] SDCARD -> ctrnand
  8. Press (Y) again to paste the data folder
  9. Press (B) to return to the main menu
  10. Navigate to [1:] SYSNAND CTRNAND -> private
  11. Press (A) on movable.sed
  12. Select Copy to 0:/gm9/out
    • Overwrite file(s) if asked

Section II-I - Launching GodMode9 on the target console

  1. Turn on the target console with the target console’s SD card inside while holding the (Start) button to launch GodMode9
    • If you see the Luma chainloader instead, select GodMode9 using the D-Pad and (A) button
  2. If you are prompted to create an essential files backup, press (A) to do so, then press (A) to continue once it has completed
  3. If you are prompted to fix the RTC date&time, press (A) to do so, then set the date and time, then press (A) to continue

Section II-II - Creating a NAND backup on the target console

  1. Press (Home) to bring up the action menu
  2. Select “Scripts…”
  3. Select “GM9Megascript”
  4. Select “Backup Options”
  5. Select “SysNAND Backup”
  6. Press (A) to confirm
    • This process will take some time
    • If you get an error, make sure that you have at least 1.3GB of free space on the target console’s SD card
  7. Press (A) to continue
  8. Press (B) to return to the main menu

Section III - Moving important backups to the computer

  1. Insert the source console’s SD card into your computer
  2. Create a folder named source_console inside the 3DS_Backups folder on your hard drive
  3. Create a folder named target_console inside the 3DS_Backups folder on your hard drive
  4. Create a folder named cleaninty inside the 3DS_Backups folder on your hard drive
  5. Copy <date>_<serialnumber>_sysnand_##.bin from the /gm9/out/ folder on the source console’s SD card to 3DS_Backups/source_console
  6. Copy movable.sed from the /gm9/out/ folder on your source console’s SD card to 3DS_Backups/source_console
  7. Copy the backups folder from the luma folder on the source console’s SD card to 3DS_Backups/source_console
  8. Copy the ctrnand folder from the source console’s SD card root to 3DS_Backups/source_console
  9. Copy the system_elements folder from the source console’s SD card root to 3DS_Backups/cleaninty
  10. Insert the target console’s SD card into your computer
  11. Copy <date>_<serialnumber>_sysnand_##.bin from the /gm9/out/ folder on the target console’s SD card to 3DS_Backups/target_console
  12. Copy the backups folder from the luma folder on the target console’s SD card to 3DS_Backups/target_console
  13. Create a folder named SDCARD inside 3DS_Backups/source_console
  14. Create a folder named SDCARD inside 3DS_Backups/target_console
  15. Copy all of the source console’s SD card contents to 3DS_Backups/source_console/SDCARD
  16. Copy all of the target console’s SD card contents to 3DS_Backups/target_console/SDCARD

Section IV - Setting up cleaninty

  1. Inside the cleaninty folder, open the terminal/command prompt/powershell
    • Command prompt can be opened by replacing the path bar with cmd while in the correct folder
    • You can alternatively cd into the correct directory if you know what that means
  2. Enter python -m pip install cleaninty
  3. Enter python -m cleaninty ctr SetupConstants --ssl system_elements/sslcode.bin --cfg cfgcode.bin --act actcode.bin --process9 p9code.bin --enc-clcert-cert system_elements/ctr-common-1-cert.bin --enc-clcert-key system_elements/ctr-common-1-key.bin
  4. Enter cp boot9.bin ~/.3ds/boot9.bin
  5. Enter cd ../source_console/backups
  6. Enter dir
    • You should see file names now, like “otp.bin” or “SecureInfo_A”
  7. Enter python -m cleaninty ctr GenJson --otp otp.bin --secureinfo <secureinfo> --region <region> --country <country> --out source.json
    • Replace “<secureinfo>” with the filename listed above, like “–secureinfo SecureInfo_A”
    • Replace “<region>” with the source console’s region, like “–region JPN” (JPN stands for Japan(theres also EUR and USA))
    • Replace “<country>” with the source console’s region, like “–country JP” (JP stands for Japan(there are other countries))
  8. Enter cp source.json ../../
  9. Enter cd ../../target_console/backups
  10. Enter dir
    • You should see file names now, like “otp.bin” or “SecureInfo_A”
  11. Enter python -m cleaninty ctr GenJson --otp otp.bin --secureinfo <secureinfo> --region <region> --country <country> --out target.json
    • Replace with the filename listed above, like "--secureinfo SecureInfo_A"
    • Replace with the target console's region, like "--region JPN" (JPN stands for Japan(theres also EUR and USA))
    • Replace with the target console's region like "--country JP" (JP stands for Japan(there are other countries))
  12. Enter cp target.json ../../
  13. Enter cd ../../

from now on we will do transfer things, but they should be reversible as long as you have your backups

Section V - Moving server-side

  1. Enter python -m cleaninty ctr NNIDTransfer -s source.json -t target.json
  2. Enter python -m cleaninty ctr SysTransfer -s source.json -t target.json
    • This will put you on a 7 day transfer cooldown
  3. Enter python -m cleaninty ctr EShopDelete -C source.json
    • This will ensure the NNID transfers correctly

Section VI - Moving console-side

  1. Insert the target console’s SD card into your computer
  2. Format the target console’s SD card
    • This should be safe when you made a backup of the SD card’s contents in Section III
  3. Copy everything from 3DS_Backups/source_console/SDCARD to the target console’s SD card root
  4. Copy faketik.3dsx to the 3ds folder on the target console’s SD card
    • create the 3ds folder if it doesn’t exist already, Nintendo 3DS is not 3ds
  5. Turn on the target console with the target console’s SD card inside while holding the (Start) button to launch GodMode9
    • If you see the Luma chainloader instead, select GodMode9 using the D-Pad and (A) button
  6. Navigate to [0:] SDCARD -> ctrnand
  7. Press (Y) on data
  8. Press (B) twice
  9. Navigate to [1:] SYSNAND CTRNAND
  10. Press (X) on data
  11. Press (A) to confirm, then unlock write permissions
  12. Press (B) to decline relocking write permissions
  13. Press (Y)
  14. Press (B) twice
  15. Navigate to [0:] SDCARD -> gm9 -> out
  16. Press (Y) on movable.sed
  17. Press (B) until you’re back in the main menu
  18. Navigate to [1:] SYSNAND CTRNAND -> private
  19. Press (Y)
    • Choose overwrite file(s) if asked
  20. Press (B) twice
  21. Press R+A on [1:] SYSNAND CTRNAND
  22. Select “Fix CMACs for drive”
  23. Press (Start) to reboot
You should boot into the HOME menu

Section VII - Recovering tickets using faketik

This is Section III from 3ds.hacks.guide’s Finalizing Setup
  1. Launch the Download Play application
  2. Wait until you see the Nintendo 3DS and Nintendo DS buttons
  3. Press (Left Shoulder) + (D-Pad Down) + (Select) at the same time to open the Rosalina menu
  4. Select “Miscellaneous options”
  5. Select “Switch the hb. title to the current app.”
  6. Press (B) to continue
  7. Press (B) to return to the Rosalina main menu
  8. Press (B) to exit the Rosalina menu
  9. Press (Home), then close Download Play
  10. Launch the Download Play application
  11. Your device should load the Homebrew Launcher
  12. Launch faketik from the list of homebrew
  13. Press (Start) to exit faketik, then exit the Homebrew Launche, and make sure your apps reappear

Section VIII - Formatting the source console

Do not skip this!
  1. Turn on the source console with the source console’s SD card inside while holding the (Start) button to launch GodMode9
    • If you see the Luma chainloader instead, select GodMode9 using the D-Pad and (A) button
  2. Press (Home) to bring up the action menu
  3. Select “Scripts…”
  4. Select “GM9Megascript”
  5. Select “Scripts from Plailect’s guide”
  6. Select “Remove NNID”
  7. Press (A) to continue
  8. Press (A) to unlock SysNAND (lvl1) writing, then input the key combo given
  9. Press (A) to continue
  10. Press (B) to return to the main menu
  11. Select “Exit”
  12. Press (A) to relock write permissions if prompted
  13. Press (Start)
You should boot into the HOME menu
  1. Launch System Settings
  2. Tap Other Settings
  3. Tap Format System Memory
    • For Nintendo 3DS, Nintendo 3DS XL, and Nintendo 2DS, you can find that option by tapping the right arrow three times until you reach page four
    • For New Nintendo 3DS and New Nintendo 3DS XL, you can find that option by tapping the right arrow four times until you reach page five
    • If required, enter your Parental Controls PIN
  4. Tap Format
  5. Tap Format again to erase the data
You’re done!
If you found this guide helpful and want to trash your source console(DO NOT IF YOU WANT TO USE/SELL IT (even if its just the motherboard)), feel free to contact gruetzig on Discord via Nintendo Homebrew on Discord and give them your source.json.

A .json created by cleaninty should never be shared publicly, so do it in DMs.

We can use .jsons of dead consoles to perform system transfers allowing consoles to access the eShop after region change even if it breaks, deep shit I know ;).