retrololo

#375 – Lego Insel 2 ohne Disc

Ich gebe es nur ungern zu, aber die letzten paar Artikel waren echt anstrengend und der Acer Veriton FP2 PC hat mich deutlich mehr Nerven gekostet, als es mir lieb gewesen ist. Irgendwie ist es bei so Projekten mit älterer Hardware vorprogrammiert, dass fast immer was schief geht und man mehrfach von vorne anfangen muss. Sehr ärgerlich!

Bild_1

Wie wäre es damit: Heute lassen wir die ganzen Hardware- und Installationsprobleme hinter uns und spielen zur Entspannung mal etwas. Quasi so als Belohnung für die ganzen Strapazen! Hierfür habe ich mit „LEGO Insel 2: Der Steinbrecher kehrt zurück“ einen echten Klassiker aus meiner Kindheit heraus gekramt:

Bild_2

Geil, das wollte ich schon ewig mal wieder spielen! Auf neueren Betriebssystemen gibt es leider immer wieder Probleme mit dem Spiel, aber mit dem Acer Computer haben wir jetzt endlich ein System, auf dem der zweite Teil der Lego Insel Reihe ideal laufen müsste.

Bild_3

Die Installation ist fix erledigt. Ach ja, ich vermisse die Zeit, in der jedes Spiel ein eigenes, teils sogar animiertes oder zumindest mit entsprechender Hintergrundmusik versehenes, CD-Menü hatte! 🙂

Bild_4

Das war es dann aber mit den guten Nachrichten, denn beim Startversuch bekommen wir eine Fehlermeldung, die uns sagt, dass wir die Spiel-CD einlegen sollen. Merkwürdig – dabei befindet sich die Disc doch bereits im Laufwerk!

Bild_5

Sehr komisch. An und für sich sieht die Scheibe auch noch ganz in Ordnung aus, aber vermutlich haben sich an den entscheidenden Stellen (also bei den Sektoren, welche zu Überprüfung auf Originalität der Disc verwendet werden) ein paar Kratzer zu viel angesammelt, sodass sie nicht mehr gelesen werden kann. So ein Mist!

Bild_6

Und jetzt? Klar könnten wir versuchen, eine weitere Lego Insel 2 CD zu kaufen oder uns ein Image des Spiels zu besorgen und ggf. selbst eine CD zu brennen, aber wenn ich ehrlich bin, sehe ich das nicht ein. Einerseits könnte es schwierig werden, überhaupt eine deutsche Version aufzutreiben, andererseits hat sich das Spiel ja einwandfrei installieren lassen und sollte somit eigentlich auch laufen.

Bild_7

Besser wäre es eh, wenn man das Spiel ohne das laut surrende CD-Laufwerk im Hintergrund spielen könnte. Theoretisch müsste man ja nur irgendwie die CD-Prüfroutinen zu überlisten. Klingt kompliziert, aber vielleicht gibt es schon was fertiges im Internet? Auf der Suche nach einer Lösung bin ich leider nur bedingt fündig geworden. Einen fertigen „NoCD-Crack“ gibt es nicht, allerdings hat wohl jemand die Assembler-Instruktionen innerhalb der EXE-Datei der englischen Version des Spiels herausgefunden, mit welchen sich der CD-Check heraus patchen lassen müsste:

Bild_8

Na das klingt doch prima! Tja, das dachte ich auch – blöd nur, dass diese Modifikation scheinbar nicht für die deutsche Version des Spiels funktioniert. Bei einem Blick in die EXE-Datei mit einem Hex-Editor fällt nämlich auf, dass sich an dem angegebenen Offset ganz andere Assembler-Instruktionen befinden. Eigentlich müsste hier „0F 85“ und nicht „B0 7A“ stehen. Dementsprechend macht es wenig Sinn, dass wir die Bytes austauschen, weil wir so vermutlich nur das Spiel zerstören.

Not so fun Fact: Ich habe natürlich trotzdem versucht, die jeweiligen Stelle zu patchen, aber dann startet das Spiel gar nicht mehr und der PC friert mit einer kryptischen DLL-Fehlermeldung ein. Mist! 🙁

Bild_9

Es hilft nichts und wir müssen wohl oder übel selbst Hand anlegen. Doch wie? Im Endeffekt müssen wir versuchen herauszufinden, was der englische Patch macht, bzw. wie er es schafft, die CD-Prüfung zu überwinden. Hierfür brauchen wir eine EXE-Datei der englischen Version des Spiels. Leider habe ich selbst keine entsprechende CD zur Hand, aber ein Bekannter hat mir mit dem entsprechenden ISO-Image aushelfen können.

Bild_10

So können wir die englische Version testweise auf einer virtuellen Maschine (hier z.B. VirtualBox mit Windows 10) installieren.

Bild_11

Wie zu erwarten war, wird auch hier direkt nach dem Start des Spiels eine – nicht vorhandene – CD gesucht:

Bild_12

Von dieser Installation können wir uns jetzt aber die EXE-Datei schnappen und sie in einem Hex-Editor begutachten. Tatsächlich befinden sich an den angegebenen Adressen die vom Patch erwarteten Werte, die ausgetauscht werden müssen:

Bild_13

Diesen können wir jetzt an den zwei Stellen so modifizieren, dass die Check-Routine übersprungen wird und das Spiel denkt, es sei eine CD eingelegt:

Bild_14

Mit angepasster EXE-Datei startet die englische Version dann tatsächlich einwandfrei – ganz ohne Disc im Laufwerk:

Fun Fact: Theoretisch könnte man es jetzt gut sein lassen und einfach die englische Variante spielen. Nette Idee, aber ihr kennt mich. So einfach möchte ich es mir nicht machen! 😛

Bild_15

Okay, damit haben wir die grundsätzliche Funktion des Patches verifiziert, aber wie hilft uns das bei der deutschen Version weiter? Anhand der englischen Version (bzw. der originalen EXE-Datei) können wir jetzt analysieren, was der Patch macht. Dafür müssen wir uns die Maschinenbefehle, bzw. deren Opcodes (eine Art numerische Darstellung der Maschinenbefehle) zu Gemüte führen. Letztendlich stehen die Instruktionen „0F 85 CE 00 00 00“ für einen „Jump if not equal/zero“-Befehl, welcher 206 Stellen im Code weiter springt, sofern die Bedingung zutrifft. Ich vermute, dass sich kurz zuvor der erste CD-Check im Code befindet.

Bild_16

Der Patch ersetzt diese Stelle durch die Werte „EB 48“, letztendlich ein einfacher (bedingungsloser) Jump-Befehl, welcher immer (unabhängig von irgendwelchen Prüfungen vorab) 48 Stellen im Code weiter zum Befehl „8B DF“ (ein MOV-Befehl zweier Registerwerte) springt:

Bild_17

Zwei Bytes später werden dann noch die Instruktionen „0F 84 82 00 00 00“ („Jump if equal/zero“) durch einfache „NOPs“ (No operation, Opcode „90“) ersetzt. Letztendlich wird damit ein weiterer bedingter Sprung (mit ggf. einem zuvor durchgeführten CD-Check) mehr oder weniger „auskommentiert“, bzw. dem Prozessor gesagt, dass er stattdessen einfach nichts tun soll:

Bild_18

Mit Hilfe dieser Erkenntnisse können wir jetzt versuchen, in der EXE-Datei der deutschen Version ähnliche Muster zu erkennen. So richtig gut erklären, kann ich nicht, wie man hier auf einen grünen Zweig kommt. Im Endeffekt gilt es, die gleichen (oder sehr ähnlich konstruierten) Maschinenbefehle innerhalb der Datei aufzuspüren. Anhand der Bytemuster der Befehle zuvor, lässt sich ein „Jump if not equal/zero“-Befehl exakt 300 Byte später als in der englischen Version an Offset „872C“ finden:

Bild_19

In der englischen Version wird dieser durch „EB 48“ ersetzt, damit das Programm 48 Stellen später zu einem MOV-Befehl springt. In der deutschen Variante befindet sich dieser „8B DF“-Befehl bereits nach 44 Stellen, entsprechend müssen wir den Sprungbefehl auf „EB 44“ anpassen:

Bild_20

Doch das war nur die halbe Miete, denn wie wir gelernt haben, wird zusätzlich zwei Bytes weiter später (direkt nach dem MOV-Befehl) noch eine weitere Prüfung durchgeführt. Im Vergleich zur englischen Version findet sich in der deutschen EXE-Datei ein „Jump if equal/zero“-Befehl in einem etwas kürzeren Format (Opcodes „74 53“):

Bild_21

Diesen müssen wir – analog zur amerikanischen Vorlage – ebenfalls durch NOPs („90 90“) ersetzen.

Bild_22

Damit sollten wir den CD-Check hoffentlich deaktiviert, bzw. übersprungen haben. Ob dem wirklich so ist, lässt sich nur auf einem Weg herausfinden. Zurück auf dem Acer-PC wird die angepasste EXE-Datei in das Anwendungsverzeichnis kopiert und das Spiel gestartet.

Bild_23

YES! Nach einem kurzweiligen Ladebildschirm (ich fand die sich drehende CD-Pizza-Scheibe schon immer cool) landen wir tatsächlich im Hauptmenü. Und das ganz ohne CD. Ist das nicht fabelhaft? 🙂

Bild_24

Jetzt können wir der Aufforderung des „Infomaniacs“ (so heißt der Typ mit dem roten Hut) folgen…

Bild_25

…und endlich zusammen mit unserem Protagonisten „Pepper Roni“ ein paar Pizzen ausliefern.

Bild_26

Ende gut, alles gut. Einerseits bin ich echt happy, dass das so einfach funktioniert hat, andererseits auch etwas geknickt, dass wir den heutigen Beitrag letztendlich doch nicht mit „spielen“ verbracht haben und stattdessen wieder in irgendwelche Assembler-Befehle abgetaucht sind. Aber hey, so läuft es eben manchmal. Immerhin steht am Ende vom Tag der technische Erfolg.

Hier abschließend nochmal konkret die Änderungen, die man in der jeweiligen Version durchführen muss, um die Checks zu deaktivieren. Vielleicht helfen diese Informationen einem anderen Lego Insel Fan – oder vielleicht sogar dem „Zukunfts-retrololo“, wenn er mal wieder versucht, das Spiel auf einem alten PC zu installieren! 😉

Bild_27

In diesem Sinne – bis die Tage, ciao!