MSET9
Bei mset9 handelt es sich um einen primären ARM9-Exploit für 3DS, der nur gestartet werden kann, wenn Dateinamensdaten zur eingelegten SD-Karte hinzugefügt werden.
Danke
- Luigoalma für etwas ASM-Hilfe in ID1gen!
- Aspargas2 (die schwarze Katze) für ASM-Hilfe auch in ID1gen!
- TuxSH für usr2arm9ldr und ein paar gute Ratschläge!
- ToxicAven für erhebliche mset9.py-Verbesserungen!
MSET9 in Aktion
https://zoogie.github.io/web/m9/(%20%CD%A1%C2%B0%20%CD%9C%CA%96%20%CD%A1%C2%B0).webm
Wie es funktioniert
In der Implementierung für FSPXI:EnumerateExtSaveData (von MSET aufgerufen, um 3DS-Extdata-IDs für die Datenverwaltung zu analysieren) wurde der Rückgabewert des internen P9-Funktionsaufrufs zum Öffnen eines Verzeichnisses (beim Auflisten von Inhalten des Extdata-Verzeichnisses) nicht überprüft. Wenn der Aufruf fehlschlägt, wird daher ein nicht initialisierter Zeiger auf dem Stapel für einen vtable-Aufruf verwendet.
Daher kann eine Datei, die mit 8 Hexadezimalziffern beginnt, Prozess9 zum Absturz bringen, wenn sie direkt im extdata-Verzeichnis abgelegt wird. Der Absturz kann auf unterschiedliche Weise erfolgen, basierend auf subtilen Unterschieden in der Art und Weise, wie der Benutzer das Absturzereignis auslöst.
Während Prozess9 meist zu Null-Derefs führt, springt Prozess9 in einem bestimmten Kontext direkt zu einer ID1-Zeichenfolge, die im ARM9-Speicher gehalten wird. Überraschenderweise erkennt der 3DS nicht, welche Zeichen für den ID1-Verzeichnisnamen auf der SD verwendet werden, sondern benötigt nur genau 32 Zeichen. Dies ermöglicht es dem Angreifer, ARM-Anweisungen in den Unicode-ID1-Verzeichnisnamen einzufügen und die Kontrolle über den ARM9 und damit die volle Kontrolle über den 3DS zu übernehmen.
Quelle: 3Dbrew
Kann ich es schaffen?
- Du benötigst einen 3DS mit Firmware 11.4 - 11.17, beliebige Region
- Ein USB zu SD-Lesegerät
- Windows/Linux-PC (dies könnte irgendwann auf MAC und/oder Android erweitert werden, wenn möglich)
Richtungen
Im Release-Archiv oder vorzugsweise im 3DS Hacks Guide – MSET9.
Fehlerbehebung
https://3ds.hacks.guide/troubleshooting.html#installing-boot9strap-mset9
FAQ
- F: Dadurch wird boot9strap installiert und auf NAND geschrieben?
A: Ja! Was willst du sonst noch mit der ARM9-Steuerung machen, a9lh? PastaCFW? skizzenhafte Tetris-Klone“ :p - F: Das klingt gefährlich, Zoogie!
A: Ja, das ist es schon, aber die Szene macht diese gefährlichen Sachen schon seit Jahren. Wenn Ihr Bedenken habt, könnt Ihr die Betaphase einfach aussetzen. - F: Was passiert, wenn ich den Exploit nicht deinstalliere, wenn ich fertig bin?
A: Ihr werdet Probleme beim Starten zuvor installierter Titel haben, zusätzlich zu zufälligen Abstürzen in den FBI- und Systemeinstellungen. Stellt Sie also sicher, dass Ihr den Exploit bereinigt! (Option 4 im Menü mset9.py erledigt dies)
(Der Rest davon dient eher eurer Information als allem Wichtigen)
- F: Diese Datei, die den Exploit auslöst (002F003A.txt) ... sieht irgendwie aus wie ... eine virtuelle Adresse, nicht wahr?
A: Es sind die Zeichen „:/“, etwas, das wir in einem typischen Datei-/Ordnernamen nicht anzeigen können. Eine praktische Tatsache dieser Datei (neben der Auslösung des Gesamtabsturzes) ist, dass die ersten 8 Zeichen dieses Hex-Dateinamens in ein u32 konvertiert werden, das zufällig 0x44 nach SP existiert, sodass ich es verwenden kann, um die fehlenden Zeichen in die Nutzlast einzufügen Dateipfad „sdmc??b9“ und halten Sie das Betriebssystem des PCs bei Laune. - F: Du hast in der Hack-Erklärung oben vorgeschlagen, dass FS_EnumerateExtData die verantwortliche Funktion ist, die den Absturz in MSET/ARM9 ermöglicht. Könnte dies im Userland-Homebrew aufgerufen werden, um ARM9 zu übernehmen?
A: Vielleicht? Ich habe kurz mit genau dieser Idee herumgespielt, konnte aber im Gegensatz zur Pre-Userland-Methode MSET9 keinen Absturzkontext finden, den ich steuern konnte. Vielleicht könnte dies eine Übung für den engagierten Benutzer sein, um diese potenzielle Variante von MSET9 zu erkunden und zu konkretisieren! Es könnte auf der ganzen Linie nützlich sein.
Interessante Tatsache: Wenn die 8-stellige Hex-Datei in extdata belassen wird, führt dies auch zum Absturz von FBI, wenn im Hauptmenü die Option „Ext Save Data“ ausgewählt wird. Es ist das einzige mir bekannte Homebrew, das FS_EnumerateExtData aufruft. - F: Du hast SafeB9SInstaller.bin zu SafeB9S.bin gekürzt. Warum?
A: Behalte den Dateinamenstandard 8.3 von FAT bei, der lange Dateinamen vermeidet und somit erhebliche Platzeinsparungen in der FatFs-Bibliothek ermöglicht. Aus dem gleichen Grund wird auch „B9“ verwendet, obwohl es nichts mit FatFs zu tun hat. Bei diesem Exploit ist überall ein kleiner Code-Footprint von größter Bedeutung. - F: Warum funktioniert das nicht auf MAC?
A: Weil es sich weigert , die folgende Unicode-Verrücktheit wiederzugeben: �餑䠇䚅敩ꄈ∁䬅䞘䙨䙙ᰗ䙃䰃䞠䞸退ࠊꁱࠅ캙ࠄsdmc退ࠊb9
( ͡° ͜ʖ ͡°)
Zusätzlicher Dank
Hierbei handelt es sich um Repos, die Homebrew-Binärdateien enthalten, die im Release-Archiv enthalten sind. Vielen Dank an die Autoren.
https://github.com/d0k3/SafeB9SInstaller (umbenannt in SafeB9S.bin)
https://github.com/devkitPro/3ds -hbmenu
Quelle: https://github.com/zoogie/MSET9/