Im Januar 2021 stieß der Paper-Mario-Speedrunner Morpheus mitten in einem Livestream auf einen mysteriösen Spielabsturz. Die Community führte ihn auf die „Effektmatrix“ zurück, eine Datenstruktur, die Details visueller Effekte wie Hammers Rauch speichert: Über einen Menü-Glitch, der normalerweise temporäre Effekte dauerhaft speichert, kann ein Spieler die Matrix in fremden Speicher überlaufen lassen, den die Konsole als Maschinencode-Müll ausführt.

Um aus diesem Absturz nutzbaren Code zu machen, musste Mario so präzise positioniert werden, dass seine 3D-Koordinaten exakt an bestimmten Offsets in der Matrix landeten – brutal schwierig, weil die Schwerkraft seine vertikale Position einschränkt. Mitte Februar hatte der Runner Fray die Positionsmathematik erledigt und mit Emulationswerkzeugen Codeausführung nachgewiesen; wenige Tage später veröffentlichte Rain einen vollständigen tool-assistierten Speedrun, der schneller zu den Credits warpte als jeder frühere Glitch-Run. Doch die Positionierung überstieg menschliche Fähigkeiten – und hier kam Ocarina of Time ins Spiel.

Der Streamer JCog erklärte das Scharnier: Der Überlauf springt bei der Ausführung zufällig in die Nähe von Spieler-Flags und eines Idle-Timers. „Wenn wir diesen Idle-Timer irgendwo zwischen 0x810 und 0x81f erreichen lassen, also 69 Sekunden, bevor wir die gespeicherten Effekte freigeben, dann springt die Ausführung in den Speicher des Expansion Paks, den Paper Mario nicht nutzt.“ Der Trick: eine bestehende ACE-Methode aus Ocarina of Time – dieselbe Familie wie der berühmte Arwing-Einfüge-Glitch, zweimal wiederholt mit sorgfältig konstruierten Dateinamen – nutzen, um zuerst eine ausgewählte Assembler-Anweisung in diesen Expansion-Pak-Speicher zu laden.

Die letzte Zutat ist eine Hardware-Eigenheit: Frühe N64-Konsolen halten den RAM des Expansion Paks nach dem Ausschalten einige Sekunden lang am Leben – dieselbe Eigenart, die hinter Rares verworfenem „Stop n' Swop“-System zum Freischalten über Cartridges hinweg steckte. Ocarina spielen, die Anweisung einpflanzen, ausschalten, im laufenden Betrieb zu Paper Mario wechseln, und dessen Überlauf springt in einen Speicher, der nun deinen Code enthält. Keines der beiden Spiele nutzt das Expansion Pak offiziell; gemeinsam machten sie es zu einem Ausführungskanal.

Zwei Spiele können bei einem Angriff zusammenarbeiten: Ein Spiel pflanzt Maschinencode in den RAM des Expansion Paks, und ein Cartridge-Wechsel im laufenden Betrieb übergibt die Ausführung in einem anderen Spiel dorthin.

Es kombiniert drei unabhängige Schwachstellen – einen Überlauf der Effektmatrix, einen ACE-Schreibvorgang eines zweiten Spiels und die RAM-Persistenz nach dem Ausschalten – zu einem Angriff über Cartridges hinweg, gegen den niemand entworfen hatte.

Der Idle-Timer-Trick verwandelt eine menschlich unmögliche Präzisionsanforderung in einen Wartetimer und macht den Exploit konzeptionell auf echter Hardware durchführbar.

Er erweckt Stop n' Swop – eine in den 1990er-Jahren gestrichene Funktion – zwei Jahrzehnte später als offensive Primitive wieder zum Leben.

Die Entdeckung verlief in der Reihenfolge der Community: der versehentliche Absturz eines Runners, die Mathematik eines anderen, der TAS eines Dritten und die Erklärung der Speicherkarte durch einen Streamer.

Angriffsflächen lassen sich kombinieren: ein Fehler in einem Spiel, eine Schreibprimitive in einem anderen und ein nicht bereinigter Hardware-Zustand dazwischen können zusammen beliebige Codeausführung ergeben, die keine einzelne Komponente allein bietet.

Rains tool-assistierter Run warpte Paper Mario schneller direkt zu den Credits als die schnellsten für Menschen machbaren Glitch-Routen. Der Artikel von Ars Technica stellte die Methode als rekordverdächtig für TAS dar; eine Echtzeit-Ausführung durch einen Menschen bleibt aufgrund der erforderlichen Positionspräzision außer Reichweite.

DEN BELEGEN FOLGEN

Die Quellen

  1. How to beat Paper Mario really fast by... playing Ocarina of Time? Ars Technica · arstechnica.com ·