Tipps Zum EntschlüSseln Von Rct3 Daten V01

8

Click here to load reader

Transcript of Tipps Zum EntschlüSseln Von Rct3 Daten V01

Page 1: Tipps Zum EntschlüSseln Von Rct3 Daten V01

TIPPS ZUM ENTSCHLÜSSELN VON RCT3 DATEN von Markus Lomberg, Entwickler von CTRs Version 01 (08.Dez.2009)

In diesem Dokument gebe ich einige Tipps für User, die beim Entschlüsseln von RCT3 Daten helfen wollen. Die Tipps sind meist in loser Reihenfolge aufgeführt.

Voraussetzungen und Vorbereitungen • benötigt wird folgende Software

o RCT3 (möglichst ohne AddOns, was einfacher zu entschlüsseln ist – siehe Abschnitt „Grundsätzliches“)

o ein einfacher Texteditor (z.B. Notepad/Editor, Wordpad)

o ein einfacher Hexeditor o ein Taschenrechner (z.B. Calculator in Windows) zum Umrechnen von Hex- in

Dezimalzahlen o bis auf RCT3 sind alle Tools gratis und frei herunterladbar

• ferner benötigt man viel Geduld, einige Zeit zum Rumprobieren und ein schlaues Köpfchen fürs Knobeln

• User, die Programme zum Entschlüsseln und später zum Erstellen von Daten (wie Importer und CTR_Creator) schreiben wollen, benötigen natürlich Programmierkenntnisse und die entsprechende Programmiersoftware (z.B. C++)

• beim Entschlüsseln modifiziert man probeweise die originalen RCT3-Dateien, welche danach eventuell nicht mehr funktionieren. Deshalb empfiehlt es sich, vorab Sicherheitskopien der Daten zu machen.

Grundsätzliches • RCT3 verwendet hauptsächlich „Overlay“ Dateien (.ovl), welche immer als

zusammengehörendes Paar (.common.ovl und .unique.ovl) vorliegen. Gelegentlich werden auch „Data“ Dateien (.dat) verwendet, z.B. bei gespeicherten Parks.

• die Strukturen in RCT3 Dateien ohne AddOns sind einfacher zu entschlüsseln; die Strukturen in den AddOns sind komplizierter, beinhalten dafür aber auch interessantere Spezialfunktionen im Spiel

• Ich vergleiche das Entschlüsseln gerne mit dem Lesen eines fremdsprachigen Textes, z.B. Griechisch. Zunächst sollte man beim versuchen, den groben Aufbau von Strukturen zu erkennen, z.B. Abschnitte und darin enthaltene Sätze im griechischen Text. Dann schaut man in eine Struktur hinein, aus welchen Einzelteilen sie aufgebaut ist, z.B. findet man in einem Satz die einzelnen griechischen Wörter. Jedes Wort besteht aus aneinandergereihten Buchstaben und hat einen Sinn, entsprechend gehören einige aneinandergereihte Bytes zusammen und haben eine bestimmte Funktion, welche durch Ausprobieren zu entschlüsseln ist. Falls diese Erklärung zu kompliziert war, so kann man mal einen Blick auf untenstehende Entschlüsselungsbeispiele werfen.

• im Laufe der Zeit wird man sich ein paar Begriffe aus der Informatik aneignen müssen (siehe untenstehender Abschnitt)

• Die prinzipielle Vorgehensweise beim Erforschen von OVLs und anderen RCT3 Daten ist wie folgt: Man schaut sich den Hexcode an und versucht Zusammenhänge durch Rätseln und geschicktes Kombinieren (erfordert schlaues Köpfchen fürs Knobeln), oder aber durch

Page 2: Tipps Zum EntschlüSseln Von Rct3 Daten V01

gezieltes Rumprobieren (erfordert viel Geduld und Zeit) herauszufinden – siehe untenstehende Entschlüsselungsbeispiele. Damit wurde die Funktion eines kleines Datenstücks entschlüsselt (quasi ein griechisches Wort übersetzt). Auf diese Art kann man stückweise eine ganze Struktur erforschen (quasi einen Abschnitt im griechischen Text). Als Ziel gilt, schließlich alle in den Daten befindlichen Strukturen zu kennen (quasi komplette Übersetzung des Griechischen).

• Es ist ratsam, ein automatisches Entschlüsselungs-Programm zu schreiben, welches die bereits erforschten, bekannten Datenstücke und deren Funktionen kenntlich macht und auflistet, wodurch die weitere Arbeit an den noch unbekannten Teilen vereinfacht wird.

o Ein solches Entschlüsselungs-Programm stellt eine rechtliche Grauzone dar (siehe „Reverse Engineering“ im RCT3-Lizenzabkommen), weshalb es nur für private Zwecke verwendet und nicht allen RCT3-Usern weltweit zugänglich gemacht werden sollte. Wenn man nur eigene Parkdateien, CSOs, CTRs, CFRs und ähnliche selbst erstellte Daten mit dem Programm analysiert, dann ist das natürlich absolut legal.

o Beim Entschlüsselungs-Tool wäre ein modularer Aufbau (womit ich jetzt nicht Module im strengen Sinn der Informatik meine!) sehr empfehlenswert. Damit könnten dann die von mithelfenden Usern neu zugelieferten Daten einfach ins Programm eingebunden werden. Und die User könnten die jeweils neusten Modulpakete downloaden und in ihr Entschlüsselungs-Tool einfügen. Desweiteren sollten die aktuellen Stände der Module in einer Datenbank verfügbar sein, um zu sehen, was alles bereits erforscht und was noch zu entschlüsseln ist.

• Sobald nach Wochen oder Monaten des Erforschens große Teile der Strukturen bekannt sind, kann man beginnen, ein Tool zu programmieren, welches neue OVLs mit diesen Strukturen und eigenen Werten schreibt (wie Importer oder CTR_Creator).

• Die .ovl und .dat Dateien sind mit einem einfachen Texteditor nur begrenzt lesbar (wie im Bild „Adriane J“ und „Ramondo G“). Der große Rest mit wichtigen Zahlenwerten sieht im Texteditor wie ein chaotischer Buchstabensalat aus.

Genaugenommen sind allein die Strings verständlich (also Namen und Texte, siehe untenstehenden Abschnitt mit diesem Begriff aus der Information), welche sich vor allem

Page 3: Tipps Zum EntschlüSseln Von Rct3 Daten V01

am Dateibeginn in Form von sogenannten Deklarationen befinden.

• Einzig und allein mit einem Hexeditor sind die Daten und Zahlen korrekt lesbar und

entschlüsselbar. Wie man im folgenden Bild sieht, sind besteht der ansonsten chaotische Buchstabensalat aus einzelnen Zahlenwerten, die alle ihre eigene, wichtige Funktion haben.

Page 4: Tipps Zum EntschlüSseln Von Rct3 Daten V01

Im untenstehenden Bild, einem Entschlüsselungsbeispiel, sieht man beispielsweise, dass die Zahlen (in gelben Kästen) der Länge des folgenden Textes entsprechen. Dies hab ich dadurch enträtselt, dass ich mir die beiden Bytes zwischen dem roten und blauen Kasten anschaute und nach Kombinationen und Verbindungen zu anderen Daten suchte. Ferner weiß ich nun, dass „InWater“ nur die Werte 1 oder 0 annehmen kann (bool) und

Page 5: Tipps Zum EntschlüSseln Von Rct3 Daten V01

dass „LevelOfDetail“ Werte zwischen 0 und 255 besitzt.

Entschlüsseln von gespeicherten Parkdateien • Die Parkdateien befinden sich unter "/Eigene Dateien/RCT3/Campaigns" (Szenario-

Modus) bzw. "/Eigene Dateien/RCT3/Parks" (Sandkasten-Modus).

• Wenn man alle Begriffe am Anfang der Parkdatei mal durchgeht, dann sieht man, was alles für jeden Peep im Park abgespeichert wird. Dies ist unter anderem: Name des Peeps, Typ (Geschlecht, Kind/Teen/Erwachsener), Aussehen (Kleidung), Position x/y/z-Koordinaten, Blickrichtung in x/y/z-Ausrichtungsvektor, Eigenschaften (Übelkeit, Bahnintensität usw.), Verhalten (Warten, Gehen, usw.), Durst, Hunger, Geld, vorhandene Gegenstände in den Händen und vieles mehr.

• Am Ende der Datei befinden sich die ganzen Peeps mit Namen und Eigenschaften. Ich habe mit dem Peep-Editor einen eigenen Peep namens "Markus" erstellt, den ich in der Parkdatei finde, wenn ich sie mit einem Texteditor öffne und nach "M a r k u s" suche. Entsprechend kann ich jeden Peep auch in der Hexdatei finden. Alle Zahlen zwischen dem beispielhaften Eintrag „Adriane J“ und „Raymondo G“ legen Eigenschaften und

Page 6: Tipps Zum EntschlüSseln Von Rct3 Daten V01

Verhalten von Adriane fest.

Page 7: Tipps Zum EntschlüSseln Von Rct3 Daten V01

• Am Beispiel von Peep „Adriane J“ im Hexeditor zeige ich mögliche Ansätze für die Entschlüsselung der Zahlenwerte:

o Über sinnvolles Kombinieren der Zahlenwerte aus dem Spiel mit den

Zahlenwerten im Hexeditor kann man die Position der Zahl für eine bestimmte Funktion finden. z.B. hat Adriane im Spiel 57 Euro, sodass man im Hexeditor nach 57 sucht und somit die Position für die Funktion „Geldbesitz“ kennt.

o Durch den Vergleich von Adrianes Werten im Hexeditor mit den Werten einem anderen Mädel könnte ein übereinstimmender Wert beispielsweise „Female Teenager“ sein. Im Vergleich zu einem anderen Jungen sollte der Wert nicht übereinstimmen, sodass man die Position der Funktion „Peeptyp“ ermittelt hat.

o Durch gezieltes Rumprobieren hab ich bisher die meisten Funktionen erforscht. Dazu hab ich einfach mal im Hexeditor irgendwo hinter den Peepnamen die Zahl 999 (oder 000 oder 001 oder 012 oder ...) reingeschrieben und im Spiel geschaut, was mit dem Peep passiert. Hat er andere Koordinaten, andere Kleidung, anderes Verhalten, ...? Beim Rumprobieren kann es jedoch häufig passieren, dass das Spiel abstürzt, weil man eine unsinnige Zahl in die Datei geschrieben hat.

Page 8: Tipps Zum EntschlüSseln Von Rct3 Daten V01

Entschlüsseln von OVL Dateien • [wird ergänzt, wenn sich das neue Team etabliert hat und die ersten Aufgaben (Peeps in

.dat Parkdatei) erfolgreich gelöst wurden; dann werde ich hier die mir bekannten OVL-Strukturen erklären, womit das Team die Entschlüsselung von komplexeren Daten (Peeps, Animals, Pools usw. in .ovl Dateien) starten kann]

Begriffe aus der Informatik Es folgt eine Auflistung von einigen Begriffen aus der Informatik, wobei die Liste natürlich nicht vollständig ist. Für detailliertere Informationen eignet sich Wikipedia sehr gut.

• Werte oder Adressen werden oftmals in hexadezimaler Schreibweise mit $... oder mit 0x... angegeben, z.B. $E7 oder 0xE7, wobei beide Schreibweisen gleichwertig sind. Ich verwende aus Gewohnheit immer $.

• byte = besteht aus 8 bit. Der Wert eines Byte liegt in dezimaler Schreibweise zwischen 0 und 255, in hexadezimaler Schreibweise zwischen $00 und $FF. Ein Byte kann auch als ein Buchstabe/Zeichen dargestellt werden, siehe Wikipedia/ASCII-Tabelle.

• uint8 = unsigned integer 8 bit = ganze Zahl zwischen 0 und 255

• int8 = (signed) integer 8 bit = ganze Zahl zwischen -128 und +127

• float32 = float 32 bit (Kommazahl)

• bool = 1 oder 0 = wahr oder falsch (Flag)

• string = Text mit mehreren Buchstaben/Zeichen (jeweils ein Byte), z.B. „Name“

• RCT3 Daten beinhalten zwei verschiedene Arten von Texten

o Text mit vorheriger Längenangabe, beispielsweise .Name = $04 $4E $61 $6D $65, wobei die $04 die Länge des Textes (hier 4 Buchstaben) ist.

o Text mit folgender Nullterminierung, beispielsweise N.a.m.e... = $4E $00 $61 $00 $6D $00 $65 $00 $00 $00, wobei die Nullterminierung $00 $00 am Ende RCT3 anzeigt, dass dort der Text endet.

• soweit ich gesehen habe verwendet RCT3 die „least significant bit“ Anordnung (siehe Wikipedia/Bitwertigkeit). Somit findet man die Zahl $87654321 in den RCT3-Daten abgespeichert als $21 $43 $65 $87. Einfaches Beispiel: dezimal 23 = $17 = $00000017 = $17 $00 $00 $00.