Other update to readme

This commit is contained in:
Edoardo Lolletti 2024-04-29 00:06:01 +02:00
parent b324161824
commit f58dcdda19
2 changed files with 24 additions and 13 deletions

View File

@ -16,6 +16,7 @@ This can modify your internal system NAND! There is *always* a risk of
This installer comes bundled with a specific version of unlaunch (2.0), but can This installer comes bundled with a specific version of unlaunch (2.0), but can
load a separate unlaunch installer from the root of the sd card, named load a separate unlaunch installer from the root of the sd card, named
`unlaunch.dsi`. `unlaunch.dsi`.
Supported unlaunch versions are 1.8, 1.9 and 2.0, since earlier ones don't work Supported unlaunch versions are 1.8, 1.9 and 2.0, since earlier ones don't work
if installed with this new method. if installed with this new method.
@ -23,21 +24,25 @@ if installed with this new method.
The Nintendo DSi's stage2 has a failsafe where it will load a backup launcher The Nintendo DSi's stage2 has a failsafe where it will load a backup launcher
(HNAA) if it can't find the real one (eg. missing, corrupted), even on retail (HNAA) if it can't find the real one (eg. missing, corrupted), even on retail
consoles. consoles.
Whereas the official unlaunch installer appends itself to the tmd of the
primary launcher (thus leaving the console bricked in case of failed install The official installer will append itself to the tmd of the "real" launcher.
uninstall), the safe unlaunch installer takes advantage of this feature This leaves the console bricked in case of failed install or uninstall (since
by installing unlaunch to the backup launcher. the backup launcher doesn't exist, stage2 can't save you).
To make then stage2 actually load unlaunch from the backup launcher, The safe unlaunch installer takes advantage of this feature by installing
the main TMD is "broken" by only changing a byte in it so that it skips it and unlaunch to the backup launcher.
loads the exploited one from the backup. The official launcher's TMD is "broken" by changing a byte, making stage2
load unlaunch in the backup launcher.
This is safer than normal unlaunch installs because as long as the main TMD This is safer than normal unlaunch installs because as long as the main TMD
isn't touched, the system can't be bricked by those operations (apart from isn't touched, the system can't be bricked by those operations (apart from
total nand failure), and the moment the main TMD is tampered with, unlaunch is total nand failure), and when the main TMD is tampered with, unlaunch is
already there as fallback in case of errors. already there as fallback in case of errors.
Reverting this operation (thus uninstalling unlaunch) is also safer as this Uninstalling is also safer as this program only has to restore that
program only has to restore that previously changed byte to restore the main previously changed byte to restore the main TMD.
TMD, this allows to keep backup unlaunch "installed" as general brick This allows to keep backup unlaunch "installed" as general brick
protection since it won't interfere with the system. protection since it won't interfere with the system. As a bonus, if you
sell/trade you console in the future and the new owner uses the official
installer, they'll be protected from bricks.
## Credits ## Credits
- [DevkitPro](https://devkitpro.org/): devkitARM and libnds - [DevkitPro](https://devkitpro.org/): devkitARM and libnds

View File

@ -307,7 +307,13 @@ int main(int argc, char **argv)
} }
} }
messageBox("\x1B[41mWARNING:\x1B[47m This tool can write to\nyour internal NAND!\n\nThis always has a risk, albeit\nlow, of \x1B[41mbricking\x1B[47m your system\nand should be done with caution!\n\nIf you have not yet done so,\nyou should make a NAND backup."); messageBox("\x1B[41mWARNING:\x1B[47m This tool can write to\n"
"your internal NAND!\n\n"
"This always has a risk, albeit\n"
"low, of \x1B[41mbricking\x1B[47m your system\n"
"and should be done with caution!\n\n"
"If you have not yet done so,\n"
"you should make a NAND backup.");
//main menu //main menu
int cursor = 0; int cursor = 0;