1 Punkte von GN⁺ 2023-09-24 | 1 Kommentare | Auf WhatsApp teilen
  • Der Nintendo 3DS war eine Handheld-Konsole aus der Zeit, als Smartphones und App Stores stark wuchsen, und bündelte brillenloses stereoskopisches 3D, Dual-Screens, eine CPU für Abwärtskompatibilität und vielfältige I/O in einer komplexen SoC-Struktur.
  • Das obere 800×240-LCD zeigt mithilfe von Halbbreiten-Pixeln und einer Parallaxenbarriere gleichzeitig zwei Frames mit 400×240 an; der Tiefenregler und das Face-Tracking des New 3DS reduzieren Probleme mit Blickwinkel und Ermüdung.
  • Das Basismodell nutzte einen ARM11 MPCore mit 2 Kernen bei 268MHz, 128MB FCRAM, eine DMP-PICA200-GPU und einen CEVA-TeakLite-II-DSP; der New 3DS ergänzte 4 Kerne mit 804MHz, 256MB FCRAM, NFC und ein verbessertes stereoskopisches Sichtsystem.
  • Im Inneren stecken neben dem ARM11 auch ein ARM946E-S für DS und ein ARM7TDMI für GBA, wodurch zwischen Native-3DS-, Nintendo-DSi- und Game-Boy-Advance-Modus umgeschaltet wird; Entwickler arbeiten normalerweise jedoch nur direkt mit dem ARM11 MPCore.
  • Betriebssystem und Sicherheit bestanden aus einer Vertrauenskette auf Basis von NATIVE_FIRM, TWL_FIRM, AGB_FIRM, SAFE_FIRM, Boot9/Boot11 sowie AES/RSA/OTP; über mehrere Schwachstellen hinweg entwickelte sich ein Ökosystem aus Homebrew und Custom Firmware.

Modellreihen und Hardware-Generationen

  • Nintendo brachte über den Lebenszyklus des 3DS mehrere überarbeitete Modelle heraus, um Preisstufen und Zielgruppen zu differenzieren.
  • Aus Architektursicht lassen sich die Modelle in sechs Varianten einteilen.
    • Nintendo 3DS (2011), Nintendo 3DS XL (2012): basieren auf der ursprünglichen Architektur; der wichtigste Unterschied zwischen XL und Nicht-XL ist die Bildschirmgröße.
    • Nintendo 2DS (2013): ein günstigeres Modell ohne stereoskopischen Bildschirm und mit einem vom Game Boy inspirierten Formfaktor.
    • New Nintendo 3DS (2014), New Nintendo 3DS XL (2015): ergänzen Hardware-Upgrades, einen NFC-Reader, mehr Tasten und ein verbessertes 3D-System.
    • New Nintendo 2DS XL (2017): ein günstigeres Modell auf Basis des New Nintendo 3DS XL ohne 3D-Funktion.
  • Gemeinsame Basis für Spiele ist der ursprüngliche Nintendo 3DS; die New-Reihe weist deutliche eigene Hardware-Unterschiede auf.

Brillenloses 3D-Display

  • Der Nintendo 3DS besitzt wie der Nintendo DS als Vorgänger zwei LCDs; der obere Bildschirm mit 800×240 Pixeln stellt Tiefenwirkung dar.
  • Der 3D-Effekt nutzt dasselbe Prinzip der stereoskopischen Parallaxe wie der Virtual Boy.
    • Dem linken und rechten Auge werden leicht unterschiedliche Bilder gezeigt.
    • Durch den Unterschied in der zentralen Position beider Bilder werden Objekte als weiter vorne oder hinten wahrgenommen.
  • Das obere LCD ist physisch aus Halbbreiten-Pixeln aufgebaut und arbeitet in zwei Modi.
    • 2D-Modus: Je zwei horizontale Pixel werden wie eines behandelt.
    • 3D-Modus: Alle Pixel werden einzeln genutzt, um gleichzeitig zwei Frames mit 400×240 darzustellen.
  • Die Parallaxenbarriere trennt das Backlight hinter den LCD-Pixeln, sodass jedes Auge unterschiedliche Teilmengen der Pixel sieht.
  • Diese Methode hat Einschränkungen.
    • Sie benötigt zusätzliche Helligkeit und beeinflusst dadurch die Akkulaufzeit.
    • Wenn der Bildschirm relativ zu den Augen geneigt ist, können sich die beiden Parallaxen-Frames überlagern, was die Augen stärker ermüdet.
    • Durch die feste Haltung und die schnelle Ermüdung der Augen kann die 3D-Funktion umständlich werden.
  • Der 3D-Tiefenregler vergrößert oder verkleinert den Unterschied zwischen den beiden Frames und steuert so den Tiefeneffekt.
  • Der New 3DS mildert das Neigungsproblem durch Face-Tracking mit Frontkamera und Infrarot-LED.
  • Spiele müssen für die GPU, ähnlich wie beim Rendern normaler Frames, dieselbe Szene als zwei leicht versetzte Frames rendern.
    • Die offizielle API bietet Routinen zum Erstellen von zwei Projektionsmatrizen.

CPU, Speicher und Abwärtskompatibilitäts-Struktur

  • Das Haupt-SoC CPU CTR enthält den Großteil des Systems außer Speicher und RAM.
  • Nintendo entwickelte zusammen mit ARM einen CPU-Cluster auf Basis des ARM11 MPCore.
    • Ursprünglicher 3DS: 2 MP11-Kerne mit jeweils 268MHz
    • New 3DS: 4 MP11-Kerne mit jeweils 804MHz und gemeinsamem 2MB-L2-Cache
  • Der ARM11 verwendet den ARMv6k-Befehlssatz und umfasst auch Komponenten wie Thumb, Jazelle und VFP.
    • ARMv6 bietet Integer-SIMD-Befehle und Load/Store-Befehle zur Synchronisation in Mehrkernsystemen.
    • VFP11 beschleunigt Gleitkommaoperationen mit 32-Bit einfacher und 64-Bit doppelter Genauigkeit und folgt IEEE 754.
  • Jeder MP11-Kern besitzt eine 8-stufige Pipeline, dynamische und statische Sprungvorhersage, den CP15-Systemsteuerungs-Coprozessor sowie 16KB Instruktions-Cache und 16KB Daten-Cache.
  • Die ARM11-Kerne sind über den AXI-Bus von ARM verbunden; die Snoop Control Unit des MPCore sorgt für Kohärenz der L1-Caches.
  • Im 3DS stecken neben dem ARM11 noch zwei weitere CPUs.
    • ARM946E-S: arbeitet im nativen 3DS-Modus als vom OS verwalteter Hilfsprozessor für Sicherheit und I/O und wird beim Ausführen von DS-/DSi-Spielen zum Hauptprozessor.
    • ARM7TDMI: arbeitet im DS-/DSi-Modus als Hilfsprozessor und ist im GBA-Modus die primäre Ausführungs-CPU.
  • Es gibt drei Betriebsmodi.
    • Native 3DS mode: Der ARM11 führt 3DS-Spiele aus, ARM9 übernimmt I/O und Sicherheit, ARM7 ist deaktiviert.
    • Nintendo DSi mode: ARM9 und ARM7 führen DS-/DSi-Spiele aus, ARM11 unterstützt fehlende oder verlegte DS-Hardware.
    • Game Boy Advance mode: ARM7 führt GBA-Spielbefehle aus, ARM11 und ARM9 liefern Unterstützung im Hintergrund.
  • Die Speicheraufteilung ist komplex.
    • Der ursprüngliche 3DS bietet aus Entwicklersicht 128MB FCRAM, der New 3DS 256MB FCRAM.
    • Der ARM11 besitzt 512KB SRAM für Sicherheitszwecke.
    • Der ARM9 besitzt 1MB SRAM, beim New 3DS 1,5MB SRAM.
    • Der ARM9 hat außerdem 32KB Instruktions-TCM und 16KB Daten-TCM.
  • FCRAM ist Fast Cycle DRAM, entwickelt 2002 von Fujitsu und Toshiba, mit dem Ziel geringerer Latenz als herkömmliches DRAM bei nicht zusammenhängenden Lesezugriffen.
  • Auch die DMA-Konfiguration ist enthalten.
    • XDMA neben dem ARM9 bietet bis zu 4 Kanäle.
    • CDMA neben dem ARM11 bietet bis zu 8 Kanäle.
    • Der New 3DS ergänzt zusätzlich einen CoreLink DMA-330 neben dem ARM11-Block.
  • 3DS-Entwickler greifen in der Regel nur auf den ARM11 MPCore zu; Programme werden in einem threadbasierten Multithreading-Modell geschrieben.
  • Wenn Spielmetadaten beim New 3DS kennzeichnen, dass sie für das neue Modell bestimmt sind, aktiviert das OS Funktionen wie höheren Takt, zusätzlichen RAM und L2-Cache.
    • Andernfalls deaktiviert es zur Wahrung der Kompatibilität die New-spezifische Hardware.
    • Spiele können Codebasen für Old- und New-Modelle gemeinsam enthalten.

Grafik-Pipeline und PICA200

  • Der Nintendo 3DS verwendet als erstes Gerät in Nintendos Handheld-Linie statt einer eigenen PPU einen IP-Kern eines GPU-Anbieters
  • Nintendo lizenzierte PICA200 von DMP und integrierte ihn in das CPU-CTR-SoC; die GPU läuft mit 268 MHz
  • PICA200 ist ein stromsparender 3D-Prozessor und nutzt die Maestro-2G-Architektur, die zu OpenGL ES 1.1 kompatibel ist und um Elemente von OpenGL ES 2.0 erweitert wurde
  • Die Pixelstufe hat zwar eine Fixed-Function-Struktur, aber die Maestro functions bieten Fragment-Beleuchtung, Algorithmen für mehrfache Schatten, Polygon-Unterteilung, Bump-Mapping, prozedurale Texturen und verschiedene Nebeleffekte
  • Der dedizierte VRAM der GPU beträgt nur 6 MB; Programmierer müssen Befehle, Buffer und wiederholt genutzte Texturen mit sofortigem Zugriffsbedarf im VRAM halten und den Rest im FCRAM platzieren
    • PICA200 besitzt DMA für Übertragungen zwischen FCRAM und VRAM
  • Der LCD-Controller versteht das Render-Buffer-Format von PICA200 nicht direkt, daher wird ein separater LCD-Framebuffer benötigt
    • Mindestens drei werden für oben links, oben rechts und den unteren Bildschirm benötigt
    • Um Artefakte zu vermeiden, kann man ein dupliziertes Set für Page Flipping vorhalten
  • Während eines Spiels rendert die GPU normalerweise drei Bildschirme
    • oben links: 400×240
    • oben rechts: 400×240
    • unten: 320×240
    • Alle zeigen 8-Bit-RGB-Farben mit bis zu 16,78 Millionen Farben an
  • Die PICA200-Pipeline besteht aus den Stufen Befehl, Vertex, Geometrie, Rasterizer, Fragment und Post-Processing
    • Die Befehlsstufe liest den command buffer und zeichnet Polygone
    • Die Vertex-Stufe nutzt vier Vertex Processor parallel; bei aktiviertem Geometrie-Shader sind nur drei nutzbar
    • Die Geometrie-Stufe reserviert einen Vertex Processor und verwendet ihn mit einem separaten Shader
    • Die Fragment-Stufe besteht aus vier Texture Units und einer Shading-Einheit
    • Es gibt keinen Pixel-Shader; stattdessen werden sechs Farb-Kombinierer mit Maestro-Funktionen kombiniert
    • Die Post-Processing-Stufe kann Alpha-, Stencil- und Tiefentests sowie Blending und 2×2-Supersampling ausführen
  • Im New 3DS scheint ein DSP namens MVD hinzugefügt worden zu sein, der H.264-/MJPEG-Dekompression und YUV-zu-RGB-Konvertierung übernimmt
    • Offenbar nutzt der Webbrowser des New 3DS ihn für beschleunigte Videowiedergabe
  • Auch die PPU für DS- und GBA-Spiele ist im SoC enthalten
    • DS-/DSi-/GBA-Spiele verwenden die PPU wie auf der ursprünglichen Hardware
    • Die Ausgabe wird über LgyFB an den Framebuffer weitergegeben, und PICA200 übernimmt die Anzeige
    • Diese Struktur fügt Latenz hinzu, für Nutzer ist sie aber vernachlässigbar

Audio und I/O

  • Das SoC enthält zwei Audio-Blöcke
    • einen proprietären DSP für 3DS-Spiele
    • CSND aus der DS-Familie, das von 3DS-, DS- und GBA-Spielen genutzt wird
  • Der exklusive DSP des 3DS ist ein CEVA TeakLite II und läuft mit etwa 134 MHz
    • Er gibt Stereo mit 2 Kanälen, bis zu 32 kHz Sampling und 16-Bit-Auflösung aus
    • Als DSP-Arbeitsbereich dienen 512 KB RAM, doppelt gepuffert in Blöcken zu je 256 KB
    • Der DSP kann ADPCM- und PCM-Samples über bis zu 24 Kanäle mischen
  • Programme laden zur Laufzeit eine von Nintendo geschriebene DSP-Firmware hoch, die im offiziellen SDK enthalten ist, und der Audio-Service des Betriebssystems abstrahiert die DSP-Kommunikation
  • CSND bietet 32 Kanäle und damit doppelt so viele wie der entsprechende Block im DS
  • Die externe I/O ist stärker auf Konkurrenz zu Smartphones als zu klassischen Handheld-Konsolen ausgelegt
    • digitale Tasten, analoger Circle Pad, 3D- und Lautstärke-Schieberegler, Wi‑Fi-Schalter
    • resistiver Touchsensor, Gyroskop, Beschleunigungsmesser
    • eine Frontkamera und zwei Rückkameras
    • Infrarot-Sendeempfänger, SD-Kartenslot, 3,5-mm-Klinke, Game-Card-Reader
  • Der New 3DS ergänzt zusätzliche I/O
    • zwei digitale Tasten, C-Stick, NFC-Reader unter dem unteren Bildschirm
    • Infrarot-LED für Gesichts-Tracking
    • microSD-Slot statt SD
    • Entfernung des Wi‑Fi-Schalters und Steuerung per Software
  • Interne Schnittstellen sind in SPI, HID, I²C, FIFO-basierte Hochgeschwindigkeits-Peripherie und MCU gegliedert
    • SPI verbindet Flash für den Speicher der Game Card, DS-Stromversorgung, Teile von Wi‑Fi, Touchscreen, Sound, Mikrofon, Circle Pad und mehr
    • HID liest das digitale Keypad über ein 16-Bit-Register
    • I²C verbindet Kameras, Infrarot-Sendeempfänger, NFC, das QTM-Modul für Gesichts-Tracking, Gyroskop, MCU und mehr
    • eMMC und SD-Slot sind als 16-MB/s-Peripherie über FIFO-Register angebunden
  • Der Auxiliary Microcontroller ist ein von NEC entwickelter und von Renesas gefertigter 78K0R-MCU und verwaltet LCD, LEDs, Stromversorgung, Akku, RTC, 3D-Schieberegler, HOME-/Power-Taste und mehr
  • Zu den I/O-basierten Diensten gehören QR Reader, AR Games, Face Raiders, Amiibos, SpotPass, StreetPass und Play Coins

Betriebssystem und Boot-Struktur

  • Der Nintendo 3DS speichert mehrere Firmwares, um nativen Betrieb, Abwärtskompatibilität und Wartungsmodi bereitzustellen
    • NATIVE_FIRM: führt native 3DS-Funktionen aus, wobei ARM11 das Hauptprogramm ausführt
    • TWL_FIRM: lässt den 3DS wie einen Nintendo DSi arbeiten, wobei ARM9 und ARM7 im Vordergrund stehen
    • AGB_FIRM: lässt den 3DS wie einen Game Boy Advance arbeiten, wobei ARM7 das Hauptprogramm ausführt
    • SAFE_FIRM: wird für Wartungsaufgaben wie Systemupdates verwendet
  • In NATIVE_FIRM übernehmen ARM9 und ARM11 jeweils getrennte OS-Rollen
    • ARM9 führt Kernel9 und Process9 aus und ist für Sicherheit, Verschlüsselung, I/O, Dateisystem sowie Titelprüfung und -installation zuständig
    • ARM11 führt Kernel11 und mehrere User-Prozesse aus und stellt Netzwerk, HOME Menu, App-Start und die Abstraktion von Hardware-Diensten bereit
  • Der ARM11-Scheduler behandelt die Kerne nicht wie gewöhnliche General-Purpose-Cores
    • Der erste Kern, appcore, ist für Spiele und verwendet FIFO-Scheduling
    • Der zweite Kern, syscore, ist für Systemaufgaben zuständig und kann 30 % seiner Laufzeit an User-Anwendungen verleihen
    • Der vierte MP11-Kern des New 3DS ist ausschließlich für Gesichts-Tracking vorgesehen
    • Der dritte MP11-Kern wird standardmäßig nicht eingeplant und bleibt meist im Leerlauf
    • Das zusätzliche CDMA des New 3DS ist nur während des Bootens zugänglich und wird danach nicht mehr verwendet
  • Der RAM, den Apps tatsächlich nutzen können, ist kleiner als das gesamte FCRAM
    • ursprünglicher 3DS: standardmäßig 64 MB von 128 MB
    • New 3DS: standardmäßig 124 MB von 256 MB
    • Mit dem Flag APPMEMTYPE kann ohne Start des HOME Menu gebootet werden, um bis zu 96 MB bzw. 176 MB zu erhalten
  • Die Speichermedien bestehen aus Boot-ROM, OTP, eMMC-NAND und SD/microSD
    • Boot9 und Boot11 sind ROMs für den Startvorgang und aus Sicherheitsgründen verborgen
    • OTP enthält konsolenspezifische Informationen und Verschlüsselungsschlüssel, die während der Fertigung einmalig geschrieben werden
    • Auf eMMC-NAND werden Systemdaten, Firmware und User-Daten für 3DS-/DSi-Modi gespeichert
    • Auf SD/microSD werden eShop-Software, Speicherstände, Fotos, Aufnahmen und mehr gespeichert und mit AES-128-CTR geschützt
  • Beim Booten startet zuerst Boot9 auf ARM9, weckt dann Boot11 auf ARM11 und prüft anschließend den NCSD-Header sowie die Firmware-Partitionen auf dem NAND
    • SHA-256-Hashes und RSA-2048-Signaturen werden geprüft, um eine gültige Firmware zu finden
    • Bei Fehlschlag wird versucht, vom Flash des Wi‑Fi-Moduls zu booten; schlägt auch das fehl, wird ein Fehlerbildschirm angezeigt
    • Sobald NATIVE_FIRM geladen ist, folgen Kernel9, Process9, Kernel11, Systemprozesse, NS und dann HOME Menu oder ein Spiel
  • Das HOME Menu ist eine einseitige Navigations-Shell, die installierte Anwendungen in einem scrollbaren Raster anzeigt
    • Das NS-Modul stellt auch Aufrufe für Applet wie das HOME-Button-Overlay und die virtuelle Tastatur bereit
    • Auf dem New 3DS können Applet- und NS-Routinen die vollständige Hardware nutzen, selbst wenn Spiele im Kompatibilitätsmodus laufen
  • Systemupdates sind online oder per Spielmodul möglich
    • Spielmodule enthalten nur Systemupdates, keine Updates für User-Apps
    • Netzwerk-Updates enthalten das vollständige Paket
    • Die Installation erfolgt nach einem Neustart in SAFE_FIRM durch den System Updater

Spieleentwicklung, Distribution, Virtual Console

  • Das 3DS-Entwicklungsökosystem wurde von der ARM-basierten Smartphone-Industrie und den Fortschritten bei Compilern beeinflusst, Nintendo stellte jedoch noch keine vollständig standardisierte Toolchain bereit
  • Hardware-Entwicklungskits wurden von Intelligent Systems und Kyoto MicroComputers geliefert
    • CTR-BOX bestand aus einer Metallbox mit 3DS-Hardware und einem Dummy-3DS-Gehäuse
    • Offizielle Flashcards wurden verwendet, um Spielprototypen an externe Tester zu verteilen
    • Für den New 3DS wurde das SNAKE-Kit bereitgestellt
  • Das offizielle SDK enthielt für den 3DS armcc, Debugger, Hardware- und OS-Service-APIs, Grafikbibliotheken, Packager, Netzwerk-, Audio- und Videobibliotheken, ein Visual-Studio-2010-Plugin sowie PICA200-Tools und Profiler
  • Es gab vier Grafikbibliotheken
    • GL: einfache, aber langsame OpenGL-ES-API
    • GD: schnellere Alternative, die PICA200-Befehle erzeugt
    • GR: PICA200-Befehls-API mit der größten Nähe zur Hardware
    • GX: allgemeine Bibliothek zur Verwaltung von PICA200
  • Es gab drei Medien zum Ausführen von Spielen
    • Gamecard: konnte 128 MB bis 4 GB ROM oder bis zu 2 GB Flash sowie Backup-Speicher für Spielstände enthalten
    • eShop/SD Card: unterstützte Download-Software, Vorbestellungen und die Verteilung von DLC
    • Local wireless: Download Play wurde auf dem 3DS fortgeführt, übertragene Spiele wurden auf NAND installiert und belegten nur einen Slot
  • Die Virtual Console bot über den eShop DSiWare-, NES/Famicom-, Sega-Game-Gear-, Game-Boy- und Game-Boy-Color-Spiele an
    • Nutzer des New 3DS hatten auch Zugriff auf den Super-Nintendo-Katalog
    • Meist lief dies als App-Paket mit ROM und Emulator
  • Game-Boy-Advance-Spiele wurden offiziell nur für Nutzer des Ambassador Program angeboten
    • Sie liefen nicht über einen ARM11-Emulator, sondern nativ auf dem ARM7 über AGB_FIRM
    • GBA-Spiele wurden nach FCRAM kopiert und anschließend mit AGB_FIRM neu gestartet, worauf der ARM7 die Kontrolle übernahm
  • Spiel-Updates wurden über den eShop verteilt und galten für alle Spieltypen außer Download Play

Sicherheit, Kopierschutz, Homebrew

  • Die wichtigsten Ziele der 3DS-Sicherheit waren der Game/CTR card reader und das Betriebssystem
    • Die Daten auf CTR-Karten liegen im NCSD-Format vor, Authentifizierung, Verifizierung und Entschlüsselung übernimmt das OS
    • Die eigentliche Vertrauenskette konzentrierte sich auf das Betriebssystem und die Boot-Struktur
  • Es war dedizierte Sicherheitshardware enthalten
    • Das XN-Flag des ARM11 und die MPU des ARM9 schränkten die Ausführung aus beliebigem Speicher ein
    • Der ARM9 arbeitete wie ein dedizierter Sicherheitsprozessor und hatte Zugriff auf Kryptoblöcke wie AES, RSA und PRNG
    • Die AES-Engine unterstützte AES-128-Ver- und -Entschlüsselung, bis zu 64 Key-Slots sowie die Modi CTR/CCM/CBC/ECB
    • Die RSA-Engine führte RSA-Operationen auf Basis öffentlicher Schlüssel aus und besaß 4 Key-Slots
    • OTP enthielt konsolenspezifische Schlüssel und CTCert, die eMMC-CID wurde ebenfalls zur Verschleierung von Schlüsseln verwendet
  • Die Vertrauenskette reichte über Boot9, OTP, eMMC, NCSD, NCCH bis zur Title-Verifizierung
    • NCSD und NCCH verwenden RSA-2048- + SHA-256-Signaturen
    • NCCH-Payloads sind mit AES-128 CTR verschlüsselt
    • Titles werden mit RSA-2048, RSA-4096 oder ECDSA und SHA-256 signiert
    • Auch Tickets als eShop-Downloadlizenzen sind mit RSA-2048 + SHA-256 signiert
  • Es gab auch Schwächen in der Implementierung
    • Die AXI-WRAM-Page-Table-Konfiguration von Kernel11 vergab Lese-, Schreib- und Ausführungsrechte sehr großzügig
    • Vor Systemversion 3.0.0 war der OTP-Speicher nicht verborgen
    • Zwischen Process9 und Kernel9 gab es keine Rechte-Trennung
    • Es gab kein ASLR und auch keinen Schutz gegen System-Downgrades
    • Der WebKit-basierte Webbrowser war wiederholt Ziel von Angriffen
  • Frühe Homebrew- und Kopierlösungen gingen von DS-Flashcards aus
    • DSi und 3DS versuchten, Flashcards mithilfe einer Whitelist zulässiger Karten zu blockieren
    • Hersteller identifizierten sie durch Umprogrammierung des Cartridge-Headers als andere autorisierte Spiele
  • 2013 erschien Gateway3DS als erste praktisch nutzbare 3DS-Flashcard
    • Blue Gateway installierte über eine DS-Flashcard den Einstiegspunkt für den MSET-Exploit
    • Red Gateway duplizierte mit FPGA und microSD originale Spielkarten
    • Launcher.dat fungierte als MSET-Exploit-Payload und als Custom Firmware
  • Nintendo reagierte mit Updates
    • 5.0.0-11 behob den MSET-Exploit vorübergehend
    • 7.0.0-13 blockierte Kernel-Exploits und ergänzte die NCCH-Entschlüsselungs-Vertrauenskette um ein RSA-Modul
    • 9.3.0 patchte den privaten Kernel-Exploit von Gateway3DS
    • Sky3DS wurde in 11.0 auf die Blacklist gesetzt
  • Das Homebrew-Ökosystem entwickelte sich mit libctru, nihstro, Ninjhax und Homebrew Launcher weiter
    • Ninjhax nutzte die QR-Code-Funktion von Cubic Ninja als Einstiegspunkt
    • GSPWN war eine Schwachstelle, bei der per GPU-DMA der Heap des HOME Menu überschrieben wurde
    • Homebrew Launcher führte unsignierte Homebrew-Apps im Format .3dsx aus
  • memchunkhax und memchunkhax2 ermöglichten eine Privilegienerweiterung in Kernel11
    • Durch Manipulation des in FCRAM gespeicherten memchunk header wurde Zugriff auf AXI WRAM und damit Kontrolle über Kernel11 möglich
  • Nach der Einführung von arm9loader auf dem New 3DS im Jahr 2015 erschien arm9loaderhax
    • Dabei handelte es sich um einen permanenten Exploit, der beim Booten die Ausführung beliebigen Codes mit Kernel9-Rechten ermöglichte
    • Tools wie Luma3DS, Godmode9, Anemone3DS und nds-bootstrap wurden breit genutzt
  • 2016 bis 2017 führten Analysen von Boot9 zu sighax, boot9strap und ntrboot
    • sighax nutzte einen Fehler in der RSA-2048-Signaturprüfung von Boot9 aus, um die Vertrauenskette außer Kraft zu setzen
    • boot9strap wurde zu einem alternativen Bootloader, der SD-Karten-Payloads oder normales Booten unterstützt
    • ntrboot verschaffte mit DS-Flashcard, Magnet und Tastenkombination Boot9-Rechte
    • Diese Schwachstellen befinden sich im Boot ROM und lassen sich daher nicht per Software-Update beheben
  • Methoden seit 2018 entwickelten sich in Richtung einer vereinfachten boot9strap-Installation
    • seedminer rekonstruierte movable.sed aus Friend Code, dem Namen eines Unterverzeichnisses auf der SD-Karte und kurzer brute force
    • BannerBomb3 nutzte einen Stack Overflow in der Settings-App beim Parsen des Title-Banners von DSiWare aus
    • Es kamen Pfade wie SAFE_FIRM-basiertes unSAFE_MODE und safehax sowie HOME-Menu-basierte menuhax67- und nimdsphax-Wege zum Einsatz
  • Das Update 11.17.0 vom Mai 2023 patchte BannerBomb3 und setzte damit einem der letzten Einstiegspunkte ohne zusätzliche Hardware ein Ende
    • Danach benötigten Nutzer einen legalen 3DS-Spiel-Exploit, eine mit ntrboot kompatible DS-Flashcard oder einen WebKit-Exploit

1 Kommentare

 
GN⁺ 2023-09-24
Meinungen auf Hacker News
  • Es ist wirklich erstaunlich, dass beim Ausführen von Gameboy-Advance-Spielen eine echte physische GBA-CPU verbaut ist.
    Ich hatte schon vor dem Launch alle Gerüchte gelesen und das blaue Modell vorbestellt; weil ich anfangs etwa 250 Dollar bezahlt hatte, fiel ich unter das Ambassador Program. Als Nintendo kurz nach der Veröffentlichung den Preis deutlich senkte, gab es als Entschuldigung mehrere kostenlose Spiele, sogar solche, die nicht im eShop waren, und ich war zufrieden.
    Mario Kart Super Circuit aus meiner Kindheit noch einmal mit dem hervorragenden Slide Pad des 3DS zu spielen, war wie ein Traum; als ich später erfuhr, dass es wie auf meinem alten GBA auf einer echten CPU lief, wurde die Erinnerung noch besonderer.

    • Noch erstaunlicher ist der Grund dafür. Nintendo hat Abwärtskompatibilität wie eine Matrjoschka-Puppe aufeinander gestapelt, sodass die GBA-CPU fast zufällig hineingeraten ist.
      Im Nintendo 3DS steckt die gesamte Systemarchitektur des Nintendo DSi, und die DSi-CPU dient zugleich als Supervisor-CPU des Systems. Der DSi war im Grunde eine weitgehend übertaktete Variante der Nintendo-DS-Architektur, und die ersten beiden Nintendo-DS-Modelle enthielten wegen der Abwärtskompatibilität über den GBA-Slot auch den ARM7TDMI des GBA.
      Für das Ambassador Program verteilte Nintendo die Firmware AGB_FIRM, die den 3DS im Game-Boy-Advance-Modus bootet; für den Nintendo-DS-Modus gab es TWL_FIRM. Wenn man heute einen 3DS hackt, kann man auch andere GBA-Software laden und GBA-Spiele, abgesehen von Abhängigkeiten von Peripheriegeräten, praktisch perfekt akkurat ausführen.
    • Sony hat eine ähnliche Methode verwendet.
      Die PlayStation 2 brauchte einen Ein-/Ausgabechip, und Sony wählte dafür die PS1-CPU. Beim Ausführen von PS1-Spielen wurde die Ausführung dorthin übergeben.
      Wenn ich mich richtig erinnere, hatten frühe PlayStation-3-Modelle eine PS2-CPU und -GPU, aber wenn keine PS2-Spiele liefen, hatten sie wohl keine große Aufgabe. Später wurden sie vermutlich zur Kostensenkung entfernt, als man auf Emulation umstellte.
    • Eine echte physische Gameboy-Advance-CPU einzubauen, ist ein alter Trick, aber immer noch cool.
      Auch der GBA hatte zur Abwärtskompatibilität eine GBC-CPU, und der Modus wurde durch einen physischen Schalter umgeschaltet, den die Cartridge selbst betätigte. Auch die PS2 konnte die PS1-CPU als Ein-/Ausgabekomponente auf dem Board wiederverwenden und so für Abwärtskompatibilität nutzen; die anderen Komponenten wurden, soweit ich mich erinnere, von Emulation unterstützt.
    • Walmart begann schon einige Tage vor der offiziellen Preissenkung und dem Ende der Anmeldung für das Ambassador Program, den 3DS zum niedrigeren Preis zu verkaufen.
      Dank eines Reddit-Posts konnte ich ihn zum niedrigen Preis kaufen und trotzdem die kostenlosen Spiele bekommen. Ich habe die Gratis-Spiele kaum gespielt, aber es fühlte sich an, als hätte ich das System ausgetrickst.
    • Die GBA-CPU ist Teil der NDS-CPU, deshalb steckt sie auch im 3DS.
  • Der 3DS hatte einen sehr langsamen Start, wurde am Ende aber persönlich zu einer meiner Lieblingskonsolen.
    Da ich nie ein N64 besessen hatte, habe ich Ocarina of Time und Majora’s Mask dank der hervorragenden 3D-Remaster zum ersten Mal gespielt. Die vollständige DS-Abwärtskompatibilität war ebenfalls ein großer Pluspunkt; um die hässliche nicht-ganzzahlige Hochskalierung des Bildschirms zu vermeiden, muss man beim Starten Start gedrückt halten.
    Auch die Bandbreite an Homebrew und Emulation auf einem softgemoddeten Gerät ist groß, was es zu einem sehr reizvollen kleinen Gerät macht. Das Design des kleinen New 3DS gefällt mir ebenfalls außerordentlich gut; ich habe viele verspielt aussehende, coole austauschbare Faceplates gekauft.
    Ebenfalls wirklich gut war, dass ich, als die Akkus alterten, Nintendo anrufen und zwei neue Originalakkus für mein Gerät und das meiner Frau kaufen konnte. Sie kosteten etwa 15 Pfund pro Stück und ließen sich austauschen, ohne das Gerät zu zerlegen. So etwas sieht man heute selten.

  • Während der Pandemie habe ich wegen ADHS am Ende gleich drei New Nintendo 3DS XL gekauft.
    Einen habe ich aus Japan importiert und auf eine US-ROM umgestellt. Ich mag ihn für Reisen wirklich sehr. Der 3D-Effekt ist cool, ich finde gut, dass man ihn ausschalten kann, und die Akkulaufzeit ist hervorragend.
    Aber wie bei jedem Hobby wird man gierig und sammelt, wenn Dinge rar werden; und da man nicht drei Konsolen gleichzeitig spielen kann, sollte ich sie wohl jetzt loswerden.

    • Wenn du drei Konsolen hast, solltest du mit zwei Freunden Tri Force Heroes ausprobieren.
    • Wenn es eine Möglichkeit gibt, zu verhindern, dass die Akkus kaputtgehen, oder man in Zukunft Ersatzakkus bekommen kann, würde ich sie wohl einfach behalten.
      Ich habe mir früher einen New Nintendo 2DS XL gekauft; er ist die letzte Iteration der DS-Reihe und kann DS-, DSi- und 3DS-Spiele ausführen. Für den „new“ DS erschienen nur wenige exklusive Spiele, also unterstützt er ungefähr 15 Jahre Spielegeschichte.
      Ich versuche, DS-Spiele zu kaufen, wo immer ich sie sehe, aber gute Preise sind inzwischen schwer zu finden, und manche Titel wie Bravely Default kosten hier in der Gegend immer noch um die 60 Euro. Für den DS gibt es auch sehr viele miserable Massenware, die lasse ich aus.
  • Dass man die Tiefeneinstellung des 3DS über einen sehr leicht erreichbaren physischen Slider regeln konnte, war eine geniale Designentscheidung.
    Ich weiß nicht, welche Forschungsergebnisse dazu geführt haben, dass man den Kern der 3D-Funktion auf diese Weise einstellbar gemacht hat, aber für die Nutzbarkeit der 3D-Funktion machte es einen entscheidenden Unterschied.

    • Man hätte erwarten können, dass Bildschirme mit Tiefendarstellung inzwischen zu einer Standardfunktion von Touchscreen-Geräten geworden sind.
      Mit Face ID weiß man, wie weit die Augen auseinanderliegen, und könnte diesen Slider-Wert auch automatisch anpassen.
  • Dieser Artikel ist Teil einer hervorragenden Reihe: https://www.copetti.org/writings/consoles/

  • Eine meiner Lieblingsfunktionen auf einem jailbroken 3DS ist die NSUI-App: https://3ds.eiphax.tech/nsui
    Dank offizieller Virtual-Console-Veröffentlichungen konnte man einige ältere Nintendo-Spiele auf dem 3DS spielen; denselben Wrapper kann man aber für jedes Spiel eines unterstützten Systems verwenden. Es ist weniger ein Emulator als eher ein Wrapper, wodurch Leistung und Kompatibilität direkt gut sind.
    Dadurch wird der 3DS zu einem guten Handheld, um NES-/SNES-/GB-/GBC-/GBA-Spiele pixelgenau zu genießen.
    Eine weitere Sache, die mir erst vor ein paar Jahren klar wurde: Je größer die microSD-Karte ist, die man verwendet, desto langsamer wird der 3DS. Soweit ich weiß, scannt die gesamte Konsole den Speicher blockweise komplett durch, sodass es ab 64 GB quälend langsam wird. Besonders bei injizierten GBA-Spielen, weil der 3DS für diesen Modus praktisch neu bootet und den Speicher dann erneut scannt.

  • Ich erinnere mich an die Stelle: „Vor Systemversion 3.0.0 wurde der OTP-Speicher nicht versteckt, und bei praktisch jeder Schwachstelle konnte man den OTP-Key problemlos extrahieren.“
    Früher musste man eine 3DS auf Firmware 3.0.0 downgraden, um sie zu hacken und den OTP zu extrahieren. 3.0.0 war jedoch nicht vollständig mit der New 3DS kompatibel; bei diesem Modell reichte es, im alten Firmware-Zustand einfach den Deckel zu schließen, und die Konsole war dauerhaft gebrickt. Das waren noch Zeiten.

  • Diese Serie ist wirklich gut.
    Wenn man Homebrew für die 3DS ausprobieren möchte, sollte man sich https://github.com/devkitPro/libctru ansehen.

  • Ich hoffe, Nintendo gibt die Handheld-Spielerfahrung, also eine komplette Konsole in der Hand, niemals auf.
    Ich hoffe auch, dass die größere Indie-Handheld-Gaming-Industrie weiter wächst.
    Was wie der nahende Untergang hochwertiger Handheld-Geräte aussieht, ist Cloud-Gaming – einschließlich des Ansatzes, die Konsole zu Hause laufen zu lassen und aufs Smartphone zu streamen.
    Am Ende hängt alles davon ab, wofür die Leute mit ihrem Geldbeutel abstimmen. Ich vermisse den GBC.

    • Ich glaube nicht, dass Handheld-Konsolen sterben werden. Die Hardware entwickelt sich weiter, während die Hardwareanforderungen stagnieren.
      Die Switch war meiner Ansicht nach mit 2D-Indie-Games wie Stardew Valley, Hades und Dead Cells sehr erfolgreich. Dieses Game-Design funktioniert gut, und gute 2D-Grafik wirkt nie veraltet.
      Ich bezweifle, dass Leute für ein verbraucherunfreundliches Streaming-Modell zahlen werden, nur um großartige Spiele zu spielen, die auch auf einer Kartoffel laufen würden.
    • Das wirkt sehr unwahrscheinlich. Stadia wurde eingestellt, aber Switch und Steam Deck waren beide sehr erfolgreich.
      Die Latenz von Cloud-Gaming und die Abhängigkeit von einer stabilen Netzwerkverbindung sind für viele noch immer ein Problem. Außerdem dürften die meisten Gamer kaum Lust haben, noch ein weiteres Abo zu bezahlen, und bei Cloud-Gaming wird am Ende wahrscheinlich ein Abo dazugehören.
      Wenn man ohnehin Hardware zum Spielen braucht, kann man auch ein gutes Handheld-Gerät nutzen. Auch PC-Hersteller wie Asus bauen Handhelds wie den RoG Ally, und Switch 2 sowie Steam Deck 2 sind praktisch sicher. Eher scheint es so, als würden Handheld-Geräte immer besser und ihr Marktanteil weiter wachsen.
    • Ich finde es wirklich schade, dass Sony die PSP eingestellt hat, aber ich verstehe die Gründe. Aus denselben Gründen sind auch das Steam Deck und leistungsstärkere Varianten erfolgreich.
      Spiele sind heute nicht mehr so stark exklusiv wie früher, und wenn ein Unternehmen stationär und mobil nicht so eng integriert wie Nintendo, das beides praktisch zu einem Gerät gemacht hat, schafft es nur eine unnötige Trennung.
      Wenn Nintendo zusätzlich zur Switch noch eine separate stationäre Konsole herausgebracht hätte, wäre das wohl kein nachhaltiges Modell gewesen.
      Es ist amüsant, wenn Leute Nintendos „Genialität“ und „Innovationskraft“ dafür loben, ein Handheld-Gerät gebaut zu haben, das man an den Fernseher anschließen kann. Währenddessen stehen PSP Go und TV-Dock sinngemäß da und sagen: „Leute, erinnert ihr euch nicht an mich?“ Ich mag die PSP Go sehr; sie ist wirklich klein und niedlich.
    • Chips werden nur leistungsfähiger und kleiner. Schon auf einem Raspberry Pi kann man viele Spiele spielen, und in etwa zehn Jahren wird man auf Geräten ähnlicher Größe vermutlich Spiele der aktuellen Generation laufen lassen können.
      Ich überlege, als spaßiges Projekt eine Handheld-Konsole für meine Tochter zu bauen.
  • Solche Artikel sind wirklich großartig.
    Ich hatte mich für die Architektur von GB/GBC interessiert und wollte ein Spiel für diese Plattform machen, hatte diesen Artikel aber noch nicht gefunden. Danke fürs Posten, und danke an Rodrigo fürs Schreiben.