Tutorial  Updated

Install developer firmware on retail 3DS

0.16.4_superedited.jpeg

Yes, I know, this guide already exists. However, the old guide is horribly out of date and doesn't show how to prepare your own dev firmwares... something relatively important when there are so few retail encrypted firmware archives online. Hopefully this helps anyone still looking to install development firmwares.
MAKE A NAND BACKUP BEFORE DOING ANYTHING TO YOUR 3DS

As the original guide says, @Konno Ryo is not responsible for any damages to your console, and neither am I. We are only providing a means for installing development firmware, and choosing to follow either guide is ultimately your choice and your responsibility. You, and you alone are responsible for what you do to your console. Make the proper NAND backups and don't complain if you forget.

Prerequisites
- Any 2/3DS
- CFW

You only need these if following method 2!
- Computer running linux. However, WSL can be used for windows (:shit:)
- Python 2

I highly using method 1 as it is much faster and will have 100% working firmware.
Method 2 is more to give an idea of how these firmwares are created.
Getting the firmware
I've uploaded an archive of development firmware somewhere online, though seeing as they break the TOS I can't share a link. You will likely have success searching something along the lines of "CTR SystemUpdater". Good luck! You should see a collection of CIAs, CSUs, and ZIPs. Download the ZIP file for your desired version.

Note: I have not uploaded n3DS/SNAKE firmwares yet. You will need to use method 2 if that is your console.

If you are using a new 3DS, you will need the SNAKE version of the firmware.
If you are using an old 3DS, you will need the CTR version of the firmware.
Using the wrong version will cause crashes. See this page for a complete list of dumped dev firmwares.

Putting the firmware on your SD
Make a new folder on the root of your 3DS SD card called "updates"

Extract the update CIAs from ZIP file you downloaded and copy them all to "updates". It should look something like this:
1694061092368.png


Installing the firmware
You will need to install sysUpdater in order to install the firmware. This can be done through GodMode9 or FBI.

Once installed, open sysUpdater from your home menu. If you are installing an older firmware version than what you currently have, press Y. Otherwise select upgrade.
Note: I've attached a table below to show which dev firmware pairs with what retail firmware. This should help in figuring out doing a downgrade vs upgrade.
Once complete, your 3DS will reboot and you're done!
Sourcing the firmware
Before anything we will need to get the firmware files from the SystemUpdaterForCTR/SNAKE programs.
Unlike retail consoles, devkits can't updated through system settings, so Nintendo created the 3DS SystemUpdater software. The updaters contain a complete set of firmware in RomFS, and when run the updaters will install that firmware to the devkit. Firmware can be extracted from the SystemUpdater cartrides and decrypted/re-encrypted to work on a retail 3DS.
I've uploaded a complete archive of SystemUpdaters somewhere online, though seeing as they break the TOS I can't share a link. You will likely have success searching something along the lines of "CTR SystemUpdater". Good luck! Wherever you get them from, they must be in either CSU or CIA format.

If you are using a new 3DS, you will need the SNAKE version of the updater.
If you are using an old 3DS, you will need the CTR version of the updater.
Using the wrong version will cause crashes. See this page for a complete list of dumped updaters.

Note: If you're using my archive, I've already prepared all the firmwares and compressed them to 7z. You can use those and skip to the "installing step."

Extracting/preparing the firmware
The SystemUpdater needs a few tools to decrypt/encrypt/extract the firmware. For this guide we will use the following programs:
- cia-unix (download "decrypt.py" from the root of the repository)
- CTRTool (download the ubuntu binary)
- CupTheCnt
- makerom (download the ubuntu binary)
- Decrypt9WIP

First we will need to change "decrypt.py" from cia-unix to use development keys for decryption. Change the line devkeys = 0 to devkeys = 1
1692215344802.png


Now run the script in your terminal. Important: make sure you have python 2. This script will not decrypt with python 3.
Note: you may need to install pycryptodome from the AUR for the script to work.
Code:
python2 decrypt.py <path_to_updater>

Next extract RomFS (this contains the update files) from the updater using CTRTool.
Code:
./ctrtool --romfs="romfs.bin" *".Main.ncch"
rm -f *".Main.ncch"
./ctrtool --romfsdir="romfs" "romfs.bin"
rm -f "romfs.bin"

Now we'll run the contents of RomFS through CupTheCnt.
Code:
./ctc "romfs/contents/CupList" "romfs/contents/Contents.cnt"
rm -r "romfs"

There should now be a folder called "updates" containing the CIA files that make up the firmware. These are still encrypted, so we'll have to use "decrypt.py" again. Note: If you can't read/write to the updates folder, please use sudo chmod 777 updates/
Code:
for CIA in updates/*.cia; do
    python2 decrypt.py ${CIA}
done
# Backup TWL titles since they can't be decrypted
mv updates/000480*.cia .
rm -r updates

The decrypted files are NCCH, so we'll need to use Decrypt9WIP on your 3DS to turn them back to CIA*. However, before that we need to rebuild titles to CIA if they specifically have a manual (see footnotes for why).
Note: you will get a "failed to sign header" warning. This is okay.
Code:
for NCCH_MANUAL in *.1.ncch; do
    ./makerom -f cia -ignoresign -target p -o "${NCCH_MANUAL//.1.ncch/.cia}" -i "${NCCH_MANUAL//.1.ncch/.0.ncch}":0:0 -i "${NCCH_MANUAL}":1:1
    rm -f "${NCCH_MANUAL//.1.ncch/.0.ncch}"
    rm -f "${NCCH_MANUAL}"
done

Next we'll move all the files into one folder to put on your SD card.
Code:
mkdir files9
# Properly rename ncch while moving
for NCCH in *.0.ncch; do
    mv "${NCCH}" files9/"${NCCH//.0.ncch/.ncch}"
done
mv *.cia files9

Copy the newly created "files9" folder to the root of your SD card. Important: make sure no "files9" folder already exists. If one is already there, back it up and remove it until this guide is completed.

Insert the SD card into your 3DS and open Decrypt9WIP. Select the menu options as shown below.
Content Decryptor Options --> CIA Builder Options --> Build CIA from NCCH/NCSD

After that is complete, choose the following to retail encrypt the firmware.
Content Decryptor Options --> CIA File Options --> CIA Encryptor (NCCH)

The tool used to install the firmware is very picky about file names, so we'll have to put the SD card back in your computer for one last operation. Navigate to the root of your SD card in your terminal. Important: make sure no "updates" folder already exists. If one is already there, back it up and remove it until this guide is completed.
Code:
mv files9 updates
for NCCH in updates/*.ncch; do
    rm -f "${NCCH}"
done
for CIA in updates/*.ncch.cia; do
    mv "${CIA}" "${CIA//.ncch.cia/.cia}"
done
rm -f updates/Decrypt9.log
NOTE: There's a high chance you'll need to download these titles from the CDN**

The firmware is finally ready to be installed!

Installing the firmware
You will need to install sysUpdater in order to install the firmware. This can be done through GodMode9 or FBI.

Once installed, open sysUpdater from your home menu. If you are installing an older firmware version than what you currently have, press Y. Otherwise select upgrade.
Note: I've attached a table below to show which dev firmware pairs with what retail firmware. This should help in figuring out doing a downgrade vs upgrade.
Once complete, your 3DS will reboot and you're done!

Test menu

Refer to @Konno Ryo's original information for entering the test menu. Just note that you will always need to enable developer UNITINFO in luma for test menu to work properly.

Hold select while booting and enable Set developer UNITINFO
If this option is not available to you, open SD:/luma/config.ini and set use_dev_unitinfo=1
To get Test Menu
  1. Once your at the home menu open "CONFIG", select "Menu Setting", select "Menu", press up to "test menu".
  2. Press B x2, press "Power" to reboot.
To get out of Test Menu
  1. Press Start to open DevMenu scroll to CTR-P-CFGO and press A to open "CONFIG"
  2. Select "Menu Setting", select "Menu", press down to "home menu"
  3. Press B x2, press "Power" to reboot.

Common issues

Test menu is frozen: Enable UNITINFO in luma.

Home menu crashes: Disable UNITINFO in luma.

Failed to apply X firm patch(es): You may need to get some titles from the NUS** and install them via gm9, see here for more info. If that does not work, please reply to this thread with your dev firmware region, version, and whether it's SNAKE/CTR.

Failed to decrypt the arm9 binary: See above ^

Footnotes for any nerds out there:

*In case you're wondering why I wouldn't just use makerom, system CIAs rebuilt with makerom caused my 3DS not to boot (luma failed to apply x firm patches). I do use makerom for titles like the camera which needs makerom to combine the executable NCCH and the manual NCCH, though those titles aren't as picky as things like system modules and so they won't cause problems.

**The titles in the link need to have a .firm image in RomFS decrypted, and this guide does not take that into account. You could probably fix that yourself easily enough, and if you want to go further and contribute the steps for my guide then that'd be much appreciated.
Also note that the n3DS has another layer of encryption on everything and so there's a smaller chance of success with the guide as it is now.
 

Attachments

  • CTR Update Table.png
    CTR Update Table.png
    335.1 KB · Views: 54
Last edited by rvtr,

rvtr

Nintendo DS hoarder
OP
Member
Joined
Oct 18, 2019
Messages
323
Trophies
2
Age
18
Location
$C000-CFFF
Website
randommeaninglesscharacters.com
XP
5,149
Country
Canada
Good job. Now I can finally screw with dev firmware of which I couldn't do from 6 years ago. :P
If you try it then let me know how it goes. I've tested it on my o2DS and o3DS (both USA region), but I'd like to get an idea of how well this works on other types of 3DS.
 
  • Like
Reactions: SylverReZ

SylverReZ

Dat one with the Rez
Member
GBAtemp Patron
Joined
Sep 13, 2022
Messages
7,170
Trophies
3
Location
The Wired
Website
m4x1mumrez87.neocities.org
XP
22,012
Country
United Kingdom
If you try it then let me know how it goes. I've tested it on my o2DS and o3DS (both USA region), but I'd like to get an idea of how well this works on other types of 3DS.
Sure will. I'll look for the CTR system updater.
 
  • Like
Reactions: rvtr and peteruk

rvtr

Nintendo DS hoarder
OP
Member
Joined
Oct 18, 2019
Messages
323
Trophies
2
Age
18
Location
$C000-CFFF
Website
randommeaninglesscharacters.com
XP
5,149
Country
Canada
Looks like it's working on N3DS ver 11.16 EUR with SystemUpdater_SNAKE-0_35_0-EU.csu (see photos).
Just wondering why all cias were not used/installed by sysUpdater (I have 147 cia files without TWL ones and only around 20 installed).View attachment 388814View attachment 388815View attachment 388816View attachment 388817View attachment 388818
That's weird. Can you try choosing the other option in sysUpdater and seeing what happens?

If it still doesn't install all of the files, I would suggest manually installing with gm9 or FBI (though iirc FBI might complain about the update CIAs).
 

Elckerlijc

Member
Newcomer
Joined
Aug 17, 2023
Messages
11
Trophies
0
XP
76
Country
France
That's weird. Can you try choosing the other option in sysUpdater and seeing what happens?

If it still doesn't install all of the files, I would suggest manually installing with gm9 or FBI (though iirc FBI might complain about the update CIAs).
Already tested both "downgrade" option on sysUpdater and install all cia files from updates folder through FBI and the result was the same : crash on boot with error message "failed to decrypt the arm9 binary".
Also tried on firmware ver 11.15 EUR with SystemUpdater_CTR-0_34_0-EU.csu and exactly the same.
I'll try later on US system (after region changing) to see if it's the same.
 
  • Like
Reactions: rvtr

rvtr

Nintendo DS hoarder
OP
Member
Joined
Oct 18, 2019
Messages
323
Trophies
2
Age
18
Location
$C000-CFFF
Website
randommeaninglesscharacters.com
XP
5,149
Country
Canada
Already tested both "downgrade" option on sysUpdater and install all cia files from updates folder through FBI and the result was the same : crash on boot with error message "failed to decrypt the arm9 binary".
Also tried on firmware ver 11.15 EUR with SystemUpdater_CTR-0_34_0-EU.csu and exactly the same.
I'll try later on US system (after region changing) to see if it's the same.
Thanks for testing that. I'd say when you try it the next time use gm9 and skip sysUpdater.

sysUpdater always worked for me, though weirdly enough it seems to break for everyone else. If that's the problem then I'm considering removing it.
 
  • Like
Reactions: SylverReZ

Elckerlijc

Member
Newcomer
Joined
Aug 17, 2023
Messages
11
Trophies
0
XP
76
Country
France
Thanks for testing that. I'd say when you try it the next time use gm9 and skip sysUpdater.

sysUpdater always worked for me, though weirdly enough it seems to break for everyone else. If that's the problem then I'm considering removing it.
Same thing with gm9 on EUR fw. Unfortunately, still no crash dump on sd card...

EDIT :
Everything is the same with 11.15 US fw and SystemUpdater_SNAKE-0_34_0-US.csu. Tried sysUpdater, installs around 15-20 cia (I have 143 cia files except twl ones) and test menu, dev menu, config apps are working.
Tried installing all cia through gm9, arm9 error. Maybe I'm doing something wrong
 

Attachments

  • PXL_20230817_182414436.jpg
    PXL_20230817_182414436.jpg
    2.2 MB · Views: 48
  • PXL_20230817_182440714.jpg
    PXL_20230817_182440714.jpg
    2.2 MB · Views: 65
Last edited by Elckerlijc,
  • Like
Reactions: rvtr

SylverReZ

Dat one with the Rez
Member
GBAtemp Patron
Joined
Sep 13, 2022
Messages
7,170
Trophies
3
Location
The Wired
Website
m4x1mumrez87.neocities.org
XP
22,012
Country
United Kingdom
Any idea on how to fix this? I'm using Linux Mint Cinnamon.

I get the following:
Code:
Traceback (most recent call last):
  File "decrypt.py", line 2, in <module>
    from Crypto.Cipher import AES
ImportError: No module named Crypto.Cipher
 
  • Like
Reactions: rvtr

Elckerlijc

Member
Newcomer
Joined
Aug 17, 2023
Messages
11
Trophies
0
XP
76
Country
France
Any idea on how to fix this? I'm using Linux Mint Cinnamon.

I get the following:
Code:
Traceback (most recent call last):
  File "decrypt.py", line 2, in <module>
    from Crypto.Cipher import AES
ImportError: No module named Crypto.Cipher
You probably don't have pycrypto module for python installed
 
  • Like
Reactions: rvtr

rvtr

Nintendo DS hoarder
OP
Member
Joined
Oct 18, 2019
Messages
323
Trophies
2
Age
18
Location
$C000-CFFF
Website
randommeaninglesscharacters.com
XP
5,149
Country
Canada
Any idea on how to fix this? I'm using Linux Mint Cinnamon.

I get the following:
Code:
Traceback (most recent call last):
  File "decrypt.py", line 2, in <module>
    from Crypto.Cipher import AES
ImportError: No module named Crypto.Cipher
You need pycryptodome. Either install from the AUR or use PIP.
pip install pycryptodome --break-system-packages
Post automatically merged:

Same thing with gm9 on EUR fw. Unfortunately, still no crash dump on sd card...

EDIT :
Everything is the same with 11.15 US fw and SystemUpdater_SNAKE-0_34_0-US.csu. Tried sysUpdater, installs around 15-20 cia (I have 143 cia files except twl ones) and test menu, dev menu, config apps are working.
Tried installing all cia through gm9, arm9 error. Maybe I'm doing something wrong
I've never been able to test on a n3DS so maybe it's just that model. Do you mind if I PM you?
 
  • Like
Reactions: SylverReZ

SylverReZ

Dat one with the Rez
Member
GBAtemp Patron
Joined
Sep 13, 2022
Messages
7,170
Trophies
3
Location
The Wired
Website
m4x1mumrez87.neocities.org
XP
22,012
Country
United Kingdom
You need pycryptodome. Either install from the AUR or use PIP.
pip install pycryptodome --break-system-packages
Post automatically merged:


I've never been able to test on a n3DS so maybe it's just that model. Do you mind if I PM you?
It doesn't show the Python 2 version on Linux Mint for some reason, even with the '--break-system-packages' parameter on, it wouldn't let me install it unless I remove the parameter from the Terminal. Running the "decrypt.py" script doesn't seem to even recognise its existence.

Code:
emily@emily-virtual-machine:~/3ds$ pip install pycryptodome --break-system-packages

Usage: 
  pip install [options] <requirement specifier> [package-index-options] ...
  pip install [options] -r <requirements file> [package-index-options] ...
  pip install [options] [-e] <vcs project url> ...
  pip install [options] [-e] <local project path> ...
  pip install [options] <archive url/path> ...

no such option: --break-system-packages
emily@emily-virtual-machine:~/3ds$ pip install pycryptodome
Defaulting to user installation because normal site-packages is not writeable
Collecting pycryptodome
  Downloading pycryptodome-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 2.9 MB/s eta 0:00:00
Installing collected packages: pycryptodome
Successfully installed pycryptodome-3.18.0
emily@emily-virtual-machine:~/3ds$ python2 decrypt.py
Traceback (most recent call last):
  File "decrypt.py", line 2, in <module>
    from Crypto.Cipher import AES
ImportError: No module named Crypto.Cipher
emily@emily-virtual-machine:~/3ds$

@IS1982 Sure you can DM me if you wanna.
 
  • Like
Reactions: rvtr

rvtr

Nintendo DS hoarder
OP
Member
Joined
Oct 18, 2019
Messages
323
Trophies
2
Age
18
Location
$C000-CFFF
Website
randommeaninglesscharacters.com
XP
5,149
Country
Canada
It doesn't show the Python 2 version on Linux Mint for some reason, even with the '--break-system-packages' parameter on, it wouldn't let me install it unless I remove the parameter from the Terminal. Running the "decrypt.py" script doesn't seem to even recognise its existence.

Code:
emily@emily-virtual-machine:~/3ds$ pip install pycryptodome --break-system-packages

Usage:
  pip install [options] <requirement specifier> [package-index-options] ...
  pip install [options] -r <requirements file> [package-index-options] ...
  pip install [options] [-e] <vcs project url> ...
  pip install [options] [-e] <local project path> ...
  pip install [options] <archive url/path> ...

no such option: --break-system-packages
emily@emily-virtual-machine:~/3ds$ pip install pycryptodome
Defaulting to user installation because normal site-packages is not writeable
Collecting pycryptodome
  Downloading pycryptodome-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 2.9 MB/s eta 0:00:00
Installing collected packages: pycryptodome
Successfully installed pycryptodome-3.18.0
emily@emily-virtual-machine:~/3ds$ python2 decrypt.py
Traceback (most recent call last):
  File "decrypt.py", line 2, in <module>
    from Crypto.Cipher import AES
ImportError: No module named Crypto.Cipher
emily@emily-virtual-machine:~/3ds$
Try pip -V. Your pip might be for python 3 or so and it's installing pycryptodome for python 3 rather than 2.

If that's the case then you could try the python 3 version of the script. Though the readme says experimental so idk if it works. https://github.com/shijimasoft/cia-unix/tree/experimental
 
  • Like
Reactions: SylverReZ

rvtr

Nintendo DS hoarder
OP
Member
Joined
Oct 18, 2019
Messages
323
Trophies
2
Age
18
Location
$C000-CFFF
Website
randommeaninglesscharacters.com
XP
5,149
Country
Canada
@SylverReZ brought up a problem where the "updates" folder isn't created with the right permissions and doesn't let you write to it. Another friend brought that up last night but we weren't sure if it was a one off or not.

Gonna make note of that in the guide now.
 
  • Like
Reactions: SylverReZ

Elckerlijc

Member
Newcomer
Joined
Aug 17, 2023
Messages
11
Trophies
0
XP
76
Country
France
Finally found out what was causing my arm9 error after installing all cias on all x3DS I have. It was NATIVE_FIRM (title id 0004013820000002) from SystemUpdater_(snake or ctr depending which model)-0_35_0-EU.csu that was not working for some reason... Checked decrypt9.log to see if there was decrypting / re-encrypting error but everything went well.
 

Attachments

  • PXL_20230818_064035101.jpg
    PXL_20230818_064035101.jpg
    4.2 MB · Views: 52
  • Like
Reactions: rvtr

rvtr

Nintendo DS hoarder
OP
Member
Joined
Oct 18, 2019
Messages
323
Trophies
2
Age
18
Location
$C000-CFFF
Website
randommeaninglesscharacters.com
XP
5,149
Country
Canada
Finally found out what was causing my arm9 error after installing all cias on all x3DS I have. It was NATIVE_FIRM (title id 0004013820000002) from SystemUpdater_(snake or ctr depending which model)-0_35_0-EU.csu that was not working for some reason... Checked decrypt9.log to see if there was decrypting / re-encrypting error but everything went well.
Funny you should mention that, one friend and I were also discussing this, though we thought the bad firm was limited to emuNAND. We had a bad 0004013820000002 from 0.35.0 JPN and it worked on sysNAND but crashed on emuNAND. Are you on an emuNAND?

Sent someone else a good and bad copy of 0004013820000002. They compared them and had this to say:
1692342196955.png


It's 3 am right now but I'll look into this more in the morning.

Thanks, it definitely helps to know when these issues aren't just for one person.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    S @ salazarcosplay: @BakerMan can one play cod from hen ps3?