Wie funktionierte eigentlich… freeShop?

Vor rund drei Jahren sorgte eine Homebrew-Applikation für den 3DS für Aufregung: Mit dem sogenannten "freeShop" konnte man sich illegal 3DS-Spiele direkt von der Konsole aus vom Nintendo-Server herunterladen. Die "Lücke" hat Nintendo mit der 3DS-Firmware 11.8 Ende Juli 2018 geschlossen – doch wie funktionierte freeShop überhaupt? Und wusstet ihr, dass das gleiche Prinzip auch auf der Wii und der Wii U funktioniert?

Aus was bestehen 3DS-Titel?

Zuerst einmal ist es wichtig zu wissen, wie ein 3DS-Spiel überhaupt aufgebaut ist. Dabei interessiert uns nur die verschlüsselte Form. 3DS-Titel (DSi, Wii und Wii U sind ähnlich aufgebaut) bestehen aus drei Teilen:

  • TMD: "Title Metadata": Enthält Informationen über einen Titel, wie die Anzahl der Inhalte, die Title ID, die Version und den SHA-256-Hash
  • Ticket: Enthält den verschlüsselten Title-Key zur Entschlüsselung von Inhalten und die Konsolen-/Shop-ID
    • Neben persönlichen Tickets (für eShop-Käufe inkl. Gratis-Software) existieren auch noch "Common e-Tickets", welche für jeden 3DS gültig sind (bspw. System-Titel und vorinstallierte Spiele). Diese "cetk"-Dateien können direkt vom CDN heruntergeladen werden.
  • Inhalte: Die eigentlichen Inhalte in verschlüsselter Form, verschlüsselt mit dem Title-Key im Ticket

Am Anfang der TMD und des Tickets steht noch eine Signatur (ein SHA-256-Hash) und die dazugehörigen Zertifikate mit Public-Key im Footer (RSA-2048). Bei 3DS-Titeln ist nur der Header der beiden signiert, da das völlig ausreicht. Stimmt der Hash in der Signatur überein, ist die TMD/das Ticket valide – gekennzeichnet mit einem "[OK]" im unten stehenden Bild.

Eine valide CIA des HOME-Menüs, bestehend aus TMD, Ticket und Inhalten, angesehen in 3DS-NUSD
Eine valide CIA des HOME-Menüs, bestehend aus TMD, Ticket und Inhalten, angesehen in 3DS-NUSD

Wenn der Hash nicht übereinstimmt, heißt das, dass die TMD/das Ticket verändert wurde – der 3DS verweigert die Installation und den Start des Titels. Behaltet das im Hinterkopf!

Das Bruteforcen des Private-Keys zum Selbstsignieren ist unmöglich.

Wie funktionieren eShop-Käufe?

Für das Herunterladen von Titeln vom CDN ("Content Delivery Network") kommt das NIM-Systemmodul zum Einsatz. Beim Klicken auf "Download" wird (falls noch nicht vorhanden) ein Ticket heruntergeladen und installiert. Anschließend wird die TMD heruntergeladen, welche Informationen über die Inhalte enthält. Bei beiden wird natürlich auch die Signatur geprüft. Zu guter Letzt sind die eigentlichen Inhalte dran und das ist das, was natürlich am längsten dauert.

Nachdem die Inhalte heruntergeladen wurden, geht es ans Installieren: Der 3DS entschlüsselt den Title-Key aus dem Ticket mit einem der Common-Keys und entschlüsselt anschließend mit diesem Key die Inhalte. Diese werden auch gegen den SHA-256-Hash geprüft, der in der TMD steht – passt alles, werden die entschlüsselten Inhalte auf die SD-Karte/in den NAND (DSiWare) installiert, andererseits wird ein Fehler angezeigt (wenn bspw. die Verbindung schlecht ist und der Download korrumpiert).

Also kurz gesagt: Ticket-Download -> TMD-Download -> Inhalts-Download -> Verifizieren -> Installieren

Übrigens ist das Bruteforcen der Title-Keys unmöglich. Dazu gibt es einfach zu viele Kombinationen.

Was macht(e) freeShop?

Vor August 2018 waren alle Inhalte auf dem CDN frei zugänglich – sprich für bspw. Super Smash Bros. for Nintendo 3DS: http://ccs.cdn.c.shop.nintendowifi.net/ccs/download/00040000000EE000/tmd -> lud die TMD herunter (heute nur ein 403-Fehler). Da alles verschlüsselt ist, ist es eigentlich kein großes Ding… da wir aber Komplettzugriff auf das gesamte 3DS-System haben allerdings schon.

FreeShop konnte also die TMD und die Inhalte frei vom Nintendo-Server herunterladen.

Was ist mit dem Ticket?

Hier kommt der Clou: Man nehme einfach irgendein (Common e-)Ticket, tausche die TitelID, die Version und den Title-Key durch den des neuen Spiels aus und schon hat man ein Ticket für das Spiel, das man will!

Aber ist dann nicht die Signatur invalide?

Korrekt und gut aufgepasst! Das Modifizieren des Tickets sorgt dafür, dass die Signatur ungültig wird – und genau hier kommen die Signaturpatches ins Spiel, die jede Custom Firmware mitbringt. Mit diesen wird der Signatur-Check ausgeknipst und die Titel lassen sich frei installieren und starten.

Hier kommt dann die "Title-Key-Seite" ins Spiel: Auf dieser werden/wurden alle verschlüsselten Title-Keys gehostet (und der Einfachheit direkt Tickets angeboten), die freeShop direkt heruntergeladen und installiert hat. Insofern war freeShop an sich nicht illegal, solange man seine eigene Title-Key-Datenbank nutzte. Was natürlich keiner tat.

Also kurz gesagt: Ticket-Download von der Title-Key-Seite/Ticket-Generierung manuell mit den nötigen Infos (TitleID, Version, Key) -> TMD-Download -> Inhalts-Download -> Verifizieren -> Installieren

Der Fix

Am 31. Juli 2018 erschien die 3DS-Firmware 11.8.0-41, welche zwei Strings zum "NIM"-Service hinzufügt, die einen AES-Key und das Ticket der Software beinhalten. Sprich Nintendo prüfte erst ab dann, ob man den Titel überhaupt besitzt und dazu benötigt man ein valides TIcket. Die CDN-Sperre wurde zwei Wochen später scharf geschaltet. Seitdem sind freeShop und alle anderen CDN-Downloader Geschichte.

Vorher funktionierte es übrigens auch, wenn man nur das falsche Ticket installierte und anschließend das Spiel im eShop herunterlud.

Kann ich das Ticket nicht teilen?

Nein, da es konsolengebunden ist – wie oben schon steht, enthält es auch die Konsolen-und die Shop-ID. Diese können auch nicht modifiziert werden, sonst ist die Signatur wieder ungültig.

Seit wann geht das überhaupt?

Das Ganze funktioniert schon seit der Wii (bzw. dem DSi, aber den lassen wir hier mal außen vor), allerdings hat sich keiner damit beschäftigt, bis jemand einen Post auf Reddit gemacht hat – 10 Jahre später!

Anhang: Wii

Super Mario 64 mit eigens generiertem Ticket
Super Mario 64 mit eigens generiertem Ticket

Das was ihr im obigen Bild seht, ist eine WAD von Super Mario 64 (VC), heruntergeladen mit meinem PyNUSD. Das einzig "falsche" an dem Titel ist das Ticket – ich habe einfach das Common e-Ticket vom Wetterkanal genommen, TitleID, Version und den verschlüsselten Title-Key ausgetauscht und hinzugepackt. Die Wii wird diesen Titel ohne Murren installieren (ein gescheiter WAD-Manager vorausgetzt, siehe Trucha Bug, dazu plane ich auch noch einen Beitrag).

Das funktioniert übrigens noch immer (solange der Wii-Shop noch verfügbar und die Titel noch auf dem CDN sind natürlich). Es hat wohl nur keiner Tools dazu gemacht, da WADs nicht besonders groß sind (maximal 40 MB)… Außerdem gibt es (noch) keine Title-Key-Datenbank wie beim 3DS/der Wii U. Um an den Key zu kommen, reicht es, den Titel zu kaufen, zu installieren und mit BlueDump zu dumpen. Mein PyNUSD kann mit Tickets und WADs umgehen und zeigt allerhand nützliche Infos an.

Übrigens sind fast alle "Scene-Releases" falsch gepackt. Der am meisten auftretende Fehler sind fehlende/falsch angeordnete Zertifikate und ein falscher Common-Key-Index, aber ich hab auch schon WADs gesehen, die völlig neu verschlüsselt wurden mit einem eigenen Key. Macht natürlich keinen Unterschied, aber es fühlt sich schon unsauber an… andererseits ist es ja sowieso Piraterie wink . PyNUSD kann nach dem Entpacken und Repacken versuchen, diese Fehler zu beheben ("fixup"-Parameter).

Anhang: Wii U

Unnötig zu erwähnen, dass das Ganze auch auf der Wii U funktioniert. Hier braucht man größtenteils nicht mal Signatur-Patches. Man lädt alle Inhalte vom CDN und nimmt das Ticket von einer Disc. Falls keine Disc vorhanden ist (Digital-only-Spiele und DLCs) fälscht man eben ein Ticket wie bei der Wii und dem 3DS (und deshalb muss man vorher auch eine CFW ausführen, um diese Titel zu starten).

FunFact: Diese Methode wurde erstmals von Brasilianern "entdeckt", welche sie nicht erklärt sondern einfach vollständige Spiele hochgeladen haben – ich hab auch gehört, dass es manche Entwickler ziemlich auf die Palme bringt, wenn man das "Brasilianer-Methode" nennt tongue .

Anhang: Nintendo Switch

Die Switch ist völlig anders und setzt sogar ein Konsolen-Zertifikat zum Download voraus. SciresM hat das Ganze gut auf Reddit erklärt. Man kann definitiv sagen, dass Nintendo sehr viel dazugelernt hat!

Anhang: PlayStation 3, PSP, PS Vita

Um zu zeigen, dass nicht nur Nintendo inkompetent ist: Der CDN-Download ist auch auf der PS3, der PSP und der PS Vita möglich. Dort funktioniert das allerdings ganz anders, da man nur die PKG vom Server braucht plus ein NoDRM-Plugin. Mehr kann ich dazu aber leider auch nicht sagen.