Hacking [GUIDE] Upgrading 8.1.0-0J to 9.2.0-20J

  • Thread starter Thread starter yifan_lu
  • Start date Start date
  • Views Views 157,051
  • Replies Replies 759
  • Likes Likes 25
I dunno how to do this steps and asked for a video tutorial but got some overreaction instead :sad:


I will try this with my n3ds tonight and I will do a simple picture tutorial or so (sorry, video took forever and I don't know how...)

For now you can download EasyPHP that Ichii Giki linked in his tutorial and install it. Pretty easy to use I must say.
 
  • Like
Reactions: Ichii Giki
I will try this with my n3ds tonight and I will do a simple picture tutorial or so (sorry, video took forever and I don't know how...)

For now you can download EasyPHP that Ichii Giki linked in his tutorial and install it. Pretty easy to use I must say.


Thanks a lot man but if it will put you in some serious efford you dont have to.But do it or not gratitude!!
 
If I'm correct, all steps use plain HTTP connection.

I think it is quite possible that we setup a proxy server in the middle to intercept and replace these certain requests, and let other requests go through.

Using the proxy method, things needed are just the 3DS itself and a computer.
 
  • Like
Reactions: cynique
If I'm correct, all steps use plain HTTP connection.

I think it is quite possible that we setup a proxy server in the middle to intercept and replace these certain requests, and let other requests go through.

Using the proxy method, things needed are just the 3DS itself and a computer.

Except the initial 3DS connection to Nintendo use "HTTPS" in the 3DS code and we are patching them to use a standard HTTP connection, so I'm not sure you could simply intercept in the middle without doing the patch steps on the 3DS itself. Your initial premise was sound in reasoning though.

Ok so i'll add a disclaimer saying you need su

You could also make use of a non-standard port in your Android app and then just use that non-standard port in the files/patching steps on the 3DS:
http://hostname:PORT/path/to/update.php for example.
 
I put the files I used on a server, hopefully this makes it simpler.

It is still recommended of course to make a backup of your 8.1 sysnand first with gateway's launcher, and to enter and exit recovery mode to clear any pending updates.

  1. Boot your 3DS into NTR CFW 2.0 and connect the debugger
  2. Use listprocess() to get the PID for “nim”. On 8.1.0-0J, it should be 0x25.
  3. Enter commands below into NTR debugger while connected.
  4. Go into system settings, and perform an update (do NOT exit system settings as you will lose your patches and will have to perform them again after restarting).
  5. Once the update is done, you will be prompted to restart, however because you are in NTR mode, the screen will just go black. You need to hold the power button and manually restart.

Code:
connect("your 3ds ip", 8000)
write(0x15E424, tuple(map(ord, "http://jp81to92update.tk/\0")), pid=0x25)
write(0x15E0EC, tuple(map(ord, "http://jp81to92update.tk/\0")), pid=0x25)
write(0x15E463, tuple(map(ord, "http://jp81to92update.tk/\0")), pid=0x25)
 
I put the files I used on a server, hopefully this makes it simpler.

It is still recommended of course to make a backup of your 8.1 sysnand first with gateway's launcher, and to enter and exit recovery mode to clear any pending updates.

Code:
connect("your 3ds ip", 8000)
write(0x15E424, tuple(map(ord, "http://jp81to92update.tk/\0")), pid=0x25)
write(0x15E0EC, tuple(map(ord, "http://jp81to92update.tk/\0")), pid=0x25)
write(0x15E463, tuple(map(ord, "http://jp81to92update.tk/\0")), pid=0x25)

Just a note, your NTRclient commands are missing the update.php/GetAccountStatus_response.xml files from their full paths. Thanks for hosting the files though, should help many people!

Also, if you are using the new NTR-CFW 2.1, you no longer have to hard-power off your console, it should reboot normally!
 
Just a note, your NTRclient commands are missing the update.php/GetAccountStatus_response.xml files from their full paths. Thanks for hosting the files though, should help many people!

Also, if you are using the new NTR-CFW 2.1, you no longer have to hard-power off your console, it should reboot normally!


That's a case in my php file:

*And the server is configured to respond with the same thing for any URL, so it's fine to add /update.php or /GetAccountStatus_response.xml to that domain. But it should not be necessary.

PHP:
if( isset($_SERVER['HTTP_SOAPACTION']) ) {
        header("Content-Type: text/xml");
 
        switch($_SERVER['HTTP_SOAPACTION']) {
                case "urn:nus.wsapi.broadon.com/GetSystemUpdate":
                        readfile("titleversion.xml");
                        break;
 
                case "urn:nus.wsapi.broadon.com/GetSystemTitleHash":
                        readfile("titlehash.xml");
                        break;
 
                case "urn:ecs.wsapi.broadon.com/GetAccountStatus":
                        readfile("getaccountstatus.xml");
                        break;
 
                case "urn:nus.wsapi.broadon.com/GetSystemCommonETicket":
                        readfile("commoneticket.xml");
                        break;
 
That's a case in my php file:

*And the server is configured to respond with the same thing for any URL, so it's fine to add /update.php or /GetAccountStatus_response.xml to that domain. But it should not be necessary.

PHP:
if( isset($_SERVER['HTTP_SOAPACTION']) ) {
        header("Content-Type: text/xml");
 
        switch($_SERVER['HTTP_SOAPACTION']) {
                case "urn:nus.wsapi.broadon.com/GetSystemUpdate":
                        readfile("titleversion.xml");
                        break;
 
                case "urn:nus.wsapi.broadon.com/GetSystemTitleHash":
                        readfile("titlehash.xml");
                        break;
 
                case "urn:ecs.wsapi.broadon.com/GetAccountStatus":
                        readfile("getaccountstatus.xml");
                        break;
 
                case "urn:nus.wsapi.broadon.com/GetSystemCommonETicket":
                        readfile("commoneticket.xml");
                        break;

Aha, nicely done! *Also weird, just got a feeling of deja vu looking at that code...* :blink:
 
I put the files I used on a server, hopefully this makes it simpler.

You are awesome for doing this (yifan_lu, too of course)!

Does this update method also include the web browser? Either way, I'm going to attempt this tonight. Hopefully the N3DS Japanese recovery mode dialogs don't trip me up too badly. Thanks guys!
 

Site & Scene News

Popular threads in this forum