2 Punkte von GN⁺ 2024-12-09 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Dank der 2024 veröffentlichten Sega-Channel-Spiel-Image-CD von September 1996 lassen sich Spiele und Menüdaten nun tatsächlich aus einem rund 60 MB großen Broadcast-Image extrahieren
  • Sega Channel war ein Abo-Dienst, der Genesis-Spiele über Kabelnetze in Schleife ausstrahlte; Nutzer spielten, indem der Adapter im kontinuierlichen Daten-Loop das gewünschte Spiel fand und herunterlud
  • Die Image-Erstellungskette bestand aus MENUMAKR, PKSPREAD und NSF; ein Durchbruch bei der Analyse gelang, weil in der für die finale Kodierung zuständigen NSF.EXE Debug-Symbole erhalten geblieben waren
  • Die Rekonstruktion erfolgte, indem zunächst ein C-Programm erstellt wurde, das dieselbe Ausgabe wie NSF erzeugt, anschließend mit einem umgekehrten Decoder Dateien getrennt und schließlich .SA-Kompression entpackt wurden, um standardmäßige Genesis-ROMs zu erhalten
  • Zu den extrahierten Inhalten gehörten die Sega-Channel-Exklusivtitel Chessmaster und Klondike, neue Builds, mit Wasserzeichen versehene ROMs sowie Menü- und Spielbeschreibungs-ROMs, die sich alle im Emulator ausführen ließen

Hintergrund zu Sega Channel und den Image-Dateien

  • Sega Channel war ein Game-on-Demand-Dienst, der von Juni 1994 bis Juni 1998 betrieben wurde
    • Der landesweite Start erfolgte im Dezember 1994
    • Je nach Kabelanbieter zahlten Nutzer meist 10 bis 15 US-Dollar pro Monat und hatten Zugriff auf eine Bibliothek von rund 50 Sega-Genesis-Spielen pro Monat
    • Der Dienst erreichte in der Spitze etwa 250.000 Abonnenten
  • Abonnenten erhielten eine Adapter-Cartridge, die an den Genesis angeschlossen wurde und mit dem Kabelfernsehanschluss verbunden war
    • Beim Start suchte sie nach dem Sega-Channel-Signal und lud das Spielmenü herunter
    • Der Download des Menüs dauerte in der Regel etwa 20 Sekunden
    • Nach der Auswahl eines Spiels wurde dieses in etwa 1 Minute in den RAM des Adapters geladen
    • Das heruntergeladene Spiel verhielt sich dann wie eine normale Retail-Cartridge
  • Wenn der Strom abgeschaltet oder die Menütaste des Adapters gedrückt wurde, wurde das heruntergeladene Spiel gelöscht
    • Speicherdaten blieben erhalten, solange der Nutzer kein anderes Spiel herunterlud
  • Neben Retail-Spielen bot Sega Channel auch einen Bereich Test Drives
    • Dort konnten zeitlich oder inhaltlich eingeschränkte Vorabversionen gespielt werden
    • Es gab auch Spiele, die nur auf Sega Channel verfügbar waren

Wie Broadcast-Images erstellt und übertragen wurden

  • Mitarbeiter von Sega Channel stellten monatliche Spiel-Line-ups sowie Inhalte wie Spieltipps, Handbücher, News und digitale Fan-Art zusammen
  • Anschließend wurden die Inhalte an Foley Hi-Tech übergeben
    • Foley Hi-Tech erstellte die Menügrafiken und -animationen und fügte die monatlichen Inhalte ein
    • Das Ergebnis war eine rund 60 MB große Spiel-Image-Datei
  • Das Spiel-Image wurde auf CD gebrannt und zu einer Satelliten-Uplink-Anlage in Denver, Colorado, geschickt
    • Die CD wurde in den Uplink-Spielservern installiert
    • Der Server strahlte die Spieldaten fortlaufend in einer Schleife per Satellit aus
    • Kabel-Headends in den gesamten USA empfingen das Satellitensignal und leiteten es an die Abonnenten weiter
  • In einer Umgebung, in der Kabel-TV-Anbieter keine Daten von den Abonnenten empfangen konnten, bestimmte die kontinuierliche Loop-Ausstrahlung die Interaktionsweise des Dienstes
    • Wenn ein Nutzer ein Spiel auswählte, suchte der Adapter im Sega-Channel-Datenstrom nach den zugehörigen Spieldaten
  • Das rund 60 MB große Spiel-Image wurde mit 2 Trägern zu je 6 Mbps bei insgesamt etwa 12 Mbps übertragen
    • Wenn es keine Signalprobleme gab, konnten Nutzer das gewählte Spiel innerhalb eines Daten-Loops spielen
    • Das Menü lag mehrfach im Datenstrom vor, damit es schneller heruntergeladen werden konnte

Entdeckung der Spiel-Image-CD von September 1996

  • Im November 2024 entdeckte der Sonic-Retro-Forennutzer RisingFromRuins beim Durchsehen eines vor langer Zeit gekauften Stapels von PC-Hardware eine Sega-Channel-Spiel-Image-CD von September 1996
  • Er veröffentlichte Fotos der CD und lud eine Kopie der Spiel-Image-Datei von der Disc hoch
  • Ziel der Analyse war es, Daten aus der Image-Datei zu extrahieren und zu prüfen, ob sie Exklusivspiele oder Prototypen enthält
  • Zunächst wurde die Image-Datei mit einem Hex-Editor untersucht
    • Genesis-Spiele besitzen einen standardisierten ASCII-Header, und auch Spieltipps sowie herunterladbare Handbücher sollten eigentlich lesbar sein
    • In der tatsächlichen Datei waren jedoch keine lesbaren Strings zu sehen
    • Dadurch lag nahe, dass die Image-Datei verschleiert oder verschlüsselt worden war

Die in einer Entwickler-Tool-CD gefundene Image-Erstellungskette

  • Ein wichtiger Hinweis war, dass der Nutzer tdijital 2017 eine Backup-CD mit Sega-Channel-Entwicklungsunterlagen von Foley Hi-Tech veröffentlicht hatte
    • Auf dieser CD waren bereits eine Contest-Version von Primal Rage, ein japanisches Sega-Channel-Quizspiel sowie Menü-Demo-ROMs von Dezember 1994 bis Januar 1996 identifiziert worden
    • Die Entwickler-Tools selbst waren jedoch nicht tiefgehend analysiert worden
  • Statt den Download-Code auf der Genesis-Seite rückzuentwickeln, wurde der Ansatz gewählt, die Tools zur Erstellung des Spiel-Images zu reverse engineeren
  • Der Ablauf der Image-Erstellung bestand aus drei Stufen
    • MENUMAKR: Fügt Spiele, Beschreibungen, News-Texte, Art und Musik hinzu und erzeugt ein Menü-Binary sowie die Skriptdatei MENUSPIN.BAT
    • PKSPREAD: Ein von Scientific Atlanta entwickeltes Programm, das den Inhalt von MENUSPIN.BAT validiert und PMAP.DAT ausgibt
    • NSF: Kodiert die Eingabedateien mithilfe von PMAP.DAT und erzeugt die finale Spiel-Image-Datei
  • Scientific Atlanta war ein Kabelausrüster, der mit Sega bei der Broadcast-Hardware von Sega Channel und der Adapter-Cartridge zusammenarbeitete
  • Zentrales Analyseobjekt war NSF.EXE, das die finale Image-Datei erzeugte

Reverse Engineering von NSF.EXE

  • NSF.EXE war im Debug-Modus kompiliert, die Optimierung war deaktiviert, und Symbole waren in der ausführbaren Datei enthalten
    • Das Programm war mit Borland C++ 4.1 kompiliert worden
    • Da IDA Pro die Debug-Symbole nicht automatisch erkannte, wurden sie in Turbo Debugger geprüft und manuell übertragen
  • Statt sofort einen Decoder zu schreiben, wurde zunächst ein äquivalentes Programm zu NSF.EXE erstellt
    • Wenn sich eine Ausgabe erzeugen ließ, die Byte für Byte identisch mit den von DOS-NSF.EXE erzeugten Images war, konnte man davon ausgehen, den Algorithmus korrekt verstanden zu haben
    • Dafür wurden Test-Spiel-Image-Dateien erzeugt und die Implementierung so angepasst, dass die Ausgaben übereinstimmten
  • Nach einem Arbeitstag und mehreren Abenden Debugging entstand ein C-Programm, das dieselbe Ausgabe wie NSF.EXE erzeugt
    • Es wurde umgesetzt, indem IDA und Visual Studio parallel geöffnet und die Logik möglichst nah am Assembler nachgebildet wurde
    • Ziel war nicht, ein identisches kompiliertes Binary wie das Original zu erzeugen
    • Die Implementierung nutzt C99-Deklarationen und stdint.h-Typen und lässt sich daher möglicherweise nicht unverändert mit Borland C++ 4 kompilieren

Das Übertragungs-Kodierungsverfahren von NSF

  • Die Funktion GetData von NSF holt aus PMAP.DAT für jedes Paket die Eingabedatei, die Dateiposition und Sega-Channel-Metadaten
    • Zu diesen Metadaten gehören unter anderem die Datei-ID und die verfügbare Spielzeit bei zeitbegrenzten Demos
    • Danach werden aus der Datendatei 246-Byte-Blöcke gelesen
  • Die Funktion LoadFrame setzt vor jedes Datenpaket einen Header und invertiert alle Datenbytes
    • Die Byte-Invertierung könnte mit der Übertragung zusammenhängen oder dazu dienen, den Paketinhalt zu verschleiern
    • In die Spieldaten werden außerdem BCH-Fehlerkorrekturcodes und Paritätsbits eingefügt
    • Dadurch wachsen 246 Byte Nutzdaten auf 288 Byte an
  • Der Header enthält mehrere Felder
    • GameTimeSync und GameTimeBit übertragen Werte für das Spiellimit bitweise
    • ServiceID ist meist 1 und könnte mit Express Games zusammenhängen
    • FileID identifiziert jede Datei innerhalb des Spiel-Images eindeutig; das Menü ist immer Datei 0
    • Address gibt an, an welche RAM-Adresse der Adapter die Datei herunterladen soll
    • Enthalten sind außerdem HeaderCRC und Header Copy
  • Die Funktion InterLeave teilt Pakete in 450-Bit-Blöcke auf und mischt die Bits innerhalb dieser Blöcke
    • Das scheint dazu zu dienen, Burst-Fehler gleichmäßiger zu verteilen, damit die Fehlerkorrektur besser funktioniert
  • Dieser Vorgang wird in Einheiten von 10 Paketen wiederholt
    • 10 Pakete werden zu einem 2880-Byte-Frame zusammengefasst
    • Der Frame wird auf die Festplatte geschrieben, indem etwa die ersten 2 Byte von Paket 0, dann die ersten 2 Byte von Paket 1 usw. verflochten werden
    • Dasselbe Verfahren setzt sich fort, bis die gesamte Image-Datei erzeugt ist

Dekodierung und Dekompression

  • Nachdem die Funktionsweise von NSF verstanden war, wurde ein Decoder-Programm geschrieben, das den Prozess in umgekehrter Reihenfolge zurückläuft
    • Der Decoder extrahiert einzelne Datendateien aus dem Image
  • Die erste Ausgabe des Decoders enthielt jedoch keine gültigen Genesis-ROM-Daten
    • Der Grund war, dass die Spieldaten vor der Übertragung komprimiert worden waren
  • Das Tool zur ROM-Kompression war GAMEEDIT.EXE auf der Foley-Hi-Tech-CD
    • Dieses Tool selbst musste nicht erneut reverse engineered werden
    • Der GitHub-Nutzer Octocontrabass hatte das .SA-Kompressionsformat bereits reverse engineered
  • Mit Octocontrabass’ Tool unsa wurden die .SA-Dateien zu standardmäßigen ROM-Dateien dekomprimiert

Spiele und Inhalte aus dem Image von September 1996

  • Das auffälligste Ergebnis waren zwei Sega-Channel-Exklusivspiele, die im September 1996 ausgestrahlt wurden
    • Chessmaster: Ein Schachspiel, das es in den 1990ern auf mehreren Plattformen gab, aber nicht für Genesis
    • Klondike: Ein Solitaire-Spiel, das Sega für Sega Channel in Auftrag gab und das von David Crane, bekannt durch Pitfall, programmiert wurde
  • Die Spiele im Image lassen sich in mehrere Kategorien einteilen
    • Exklusive Inhalte: Chessmaster, Klondike, Olympic Summer Games - Test Drive, Sega Channel Game Guide
    • Neue Builds: Bugs Bunny in Double Trouble, OutRunners, Super Volleyball, World Series Baseball '96
    • Einträge, die sich von bestehenden Dumps nur durch Padding unterscheiden: Flashback, Phantasy Star II, The Punisher
    • Bestehende Dumps mit hinzugefügtem Wasserzeichen: Alex Kidd in the Enchanted Castle, Ecco - The Tides of Time, Sonic & Knuckles u. a.
    • Viele Spiele, die mit bestehenden Dumps übereinstimmen: Castlevania - Bloodlines, Streets of Rage 2, ToeJam & Earl, X-Men, Ys III u. a.
  • Black Squirrel von Sonic Retro fand einen Weg, das Menü von September 1996 im Emulator auszuführen
    • Dazu werden die Bytes 0-0x1003FF aus einem Sega-Channel-Demo-Cartridge-ROM kopiert und anschließend die Menüdaten aus dem Spiel-Image angehängt
    • Die Download-Funktion arbeitet zwar nicht, aber das Menü lässt sich durchsuchen
  • Der letzte Inhalt war ein Spielbeschreibungs-ROM
    • Es sah wie ein normales Genesis-ROM aus, zeigte im Emulator aber zunächst nur einen schwarzen Bildschirm
    • Der Grund war, dass es nicht wie bei einer normalen Cartridge ab Adresse 0, sondern ab 0x100000 gelinkt war
    • Es scheint für die direkte Ausführung aus dem Adapter-Speicher von Sega Channel vorgesehen gewesen zu sein
    • Nachdem hinter dem Header Nullen ergänzt wurden, sodass der Code mit den Vektoren des Headers ausgerichtet war, lief es im Emulator
    • Danach erschien ein entwicklerseitiges Menü, in dem die internen Namen der einzelnen Spiele sichtbar waren
  • Auf diesem Weg ließ sich schließlich der gesamte Inhalt der Spiel-Image-Datei im Emulator ausführen

Noch keine Kommentare.

Noch keine Kommentare.