amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

[Login] [Registrieren] [Passwort vergessen?]

< Nächste MeldungVorige Meldung >
17.Mai.2023



Reverse Engineering: Speedball 2
Bezogen auf Spiele (Software) versteht man unter Reverse Engineering den Prozess der Analyse des Codes und des Inhalts des Spiels, um zu verstehen, wie es funktioniert. Eine GitHub-Seite gibt hierzu für den interessierten Entwickler Softwaretipps und Lernmaterialien. Im vorliegenden Fall hat sich Simon Frankau den Amiga-Klassiker Speedball 2 vorgenommen.

Basierend auf seiner vorherigen Analyse der Sega-Megadrive-Version, hat er für die Disassemblierung das Reverse-Engineering-Tool Ghidra verwendet. Nachfolgend schilderte er uns, wie er den Bootprozess verfolgt, um ein Arbeitsspeicher-Image zu erhalten:
  • Analyse des Bootblocks (die ersten paar Sektoren des ADF), um herauszufinden, wie der Second-Level-Loader geladen wird. Der Bootblock verwendet ROM-Routinen, also musste ich lernen, wie man das Betriebssystem aus der Assemblerdatei aufruft.
  • Sobald ich wusste, wo sich der Second-Level-Loader im Disk-Image befand, konnte ich ihn disassemblieren. Damit wird die Haupt-Binärdatei geladen. Der Second-Level-Loader hat seine eigenen Disk-Routinen, also musste ich etwas über die Sektor-Kodierung von Amiga-Disketten (mit MFM) und den Blitter lernen.
  • Von dort aus lernte ich, wo die Haupt-Binärdatei war, und konnte sie aus dem ADF extrahieren. Es ist komprimiert, also habe ich den Kompressor umgedreht und meine eigene Implementierung geschrieben, um das Binärprogramm zu dekomprimieren.
  • Zu diesem Zeitpunkt hatte ich ein Speicherbild, das das Spiel nach dem Laden und Dekomprimieren darstellte. Ich lud es in Ghidra und arbeitete es durch, verstand es und gab allen Funktionen und Variablen Namen und fügte Kommentare hinzu.
  • Ich habe auch Tools entwickelt, um die Grafiken und Sounds zu extrahieren und zugänglich zu machen.
Wie er weiter schildert, verwendet der Kopierschutz (obwohl das Spiel geknackt wurde) Rob Northen's Copylock, eine Art Trace-Vektor-Decoder. Um das rückgängig zu machen, habe ich den Debugger von FS-UAE benutzt, um zu verfolgen, was er tut.

Insgesamt hätte dieses Projekt ihm immens geholfen, eine Menge über den Amiga zu lernen, da das Spiel die Hardware gut nutzt:
  • es verwendet den Copper für das Scrollen und die Palettenverwaltung.
  • es verwendet den Blitter, um Sprites zu rendern und Disketten zu dekodieren.
  • es verwendet die Soundhardware und den vertikalen Blanking-Interrupt für einen Mod-Player-ähnlichen Sliced Player.
  • es verwendet die CIA und andere E/A für Tastatur und Joystick.
  • einige Grafik-Ressourcen waren eingebettete IFFs, also lernte ich etwas über sie.
Der Code wäre seiner Meinung nach ziemlich gut gewesen - er hätte in der Regel herausfinden können, was die Entwickler vorhatten, obwohl es keine Symbole oder Kommentare gab, und er entdeckte nur wenige Bugs. Amüsant fand er, dass die Kopierschutzroutine trotz ihrer Komplexität nur drei Speicherstellen ändert.

Trotz der Hardwareunterschiede sei der Code der Megadrive-Version sehr ähnlich, was a) zeigen würde, wie einfach es ist, ihn auf 68000-Plattformen zu portieren, und b) die Dekodierung der Amiga-Version einfacher macht.

Die Binärdatei enthält ein paar tote Codes, wie z.B. ein Teamauswahlmenü, aber im Gegensatz zur Megadrive-Version gäbe es keine Cheat-Codes.

Die KI sei ziemlich einfach, wenn man bedenkt, wie gut sie spielt! Und sie würde nicht schummeln: sie interagiere mit dem Rest des Spiels, indem sie in die Variablen schreibt, die sonst von der Joystick-Routine für ein Spiel mit zwei Spielern geschrieben werden würden. (dr)

[Meldung: 17. Mai. 2023, 06:05] [Kommentare: 8 - 20. Mai. 2023, 15:22]
[Per E-Mail versenden]  [Druck-Version]  [ASCII-Version]
< Nächste MeldungVorige Meldung >

.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.