Diablo 3 – STL-Format

Da heute Nacht das Addon von D3 released wird, gibt es auch hier wieder was neues zu diesem Thema ;) Innerhalb der Diablo 3 Community gibt es immer wieder „Data Mining“ News. Unter „Data Mining“ versteht sich eigentlich nichts anderes, als Dateien auslesen und analysieren, um Informationen auf zukünftigen Content zu bekommen. Kann eigentlich jeder und ist dank bestimmten Editoren mega einfach. Dabei habe ich großen Respekt vor dem Entwickler des MPQ Editor, der das MPQ Format reversed hat und das Format MPQ auf seiner Seite sehr gut erläutert. http://www.zezula.net/en/mpq/main.html Vielen Dank an dieser Stelle für den MPQ Editor. Einfach nur geil! :D

Nun gut was steht für heute an? Innerhalb der MPQ Dateien werden die verschiedenen Client Informationen wie Texturen, StringListen, Sounds, Cinematics etc. gespeichert. Speziell habe ich es auf die StringListen (.stl-Dateien in der MPQ) abgesehen. Die Strings kann man gut mit Notepad++ auslesen, jedoch wäre es mir viel lieber, wenn das ein Tool für mich macht ;) Da ich im Netz nichts dazu gefunden habe, bleibt mir wohl nichts anderes übrig als es selbst zu machen.

Notepad_pp_stldata

Wie man sieht bestehen diese String Listen immer aus paaren. Dem Variablen-Namen und dem hinterlegten Text. Also auf in die Analyse!

Hex, Hex!

Die StringListen von Diablo lassen sich in der „deDE_Text.mpq“ finden. Doch wie findet man nun am besten heraus, wie dieses Format aufgebaut ist. Im Grunde bleibt nichts anderes übrig, als Dateien mit einem Hex-Editor zu analysieren und zu vergleichen. Immer wieder analysieren und vergleichen, um herauszufinden wofür welcher Wert stehen könnte. Dabei sollte man definitiv erst einmal die kleinsten Dateien anschauen, da man ansonsten den Durchblick sofort verliert. In meinem Fall habe ich mir die „Mail.stl“ und die „RareNameStrings_Suffix_Regen.stl“ angeschaut und diese verglichen.

rare.stl rare.stl
Achievement.stl

Auf den ersten Blick sieht man sofort, dass die erste Zeile immer gleich ist. Die dritte Zeile hingegen ist nur bei den ersten beiden Files gleich, doch bei der „Achievement.stl“ ist diese anders. Da ich bei 16 bytes in einer Zeile nicht wirklich schnell zusammenhänge erkannt habe, habe ich diese auf 8 bytes herunter geschraubt.

8_rare.stl 8_rare.stl

Wie man nun, meiner Meinung nach, besser erkennen kann, handelt es sich generell immer um DWORDS handelt. Bei den DWORDS muss man dazu sagen, das diese von rechts nach links gelesen werden. Die ersten 4 bytes ergeben damit 0xDEADBEEF! Das zweite DWORD wäre 0x0000002C und so weiter. Generell lässt sich noch erkennen, dass es einen Header gibt, gefolgt von irgendwelchen Meta Daten und am Ende kommen immer die String Listen.

Ergebnis…

An dieser Stelle ist es eigentlich kaum möglich den Prozess zu beschreiben. Im Grunde macht man einfach über die DWORDS Annahmen und schaut, ob diese sich Bewahrheiten. Deswegen kann ich hier nur das Ergebnis vorstellen :) Naja nach ca. 2h vergleichen und knobeln, was die DWORDS bedeuten könnten, bin ich dann zu folgendem Ergebnis gekommen.

 STL-Format-Notizen

Headergesamt
  Header: 0xDEADBEEF
  Gesamt-Header-Länge: 0x0000002C
  2x NULL DWORD (2x 0x00000000) : Trenn Dwords?
  DWORD Prüfsumme?
  4 x NULL DWORD (4x 0x00000000)

Längenangaben
  DWORD Header Länge ohne 0xDEADBEEF gezählt?
  DWORD Meta Data Länge --> Gibt die Länge der Meta Daten an

Meta-Data
  4x null DWORD
  Offset Word 1: Startpunkt der Daten + 0x10
                 (Da Header-Länge und Meta-Data-Länge Daten nicht mitgezählt worden sind)
  Länge von Text 1 (+NULL Zeichen am ENDE)
  2x NULL DWORD
  Offset Word 2: Startpunkt Text 2 + 0x10
  Länge von Text 2 (+NULL Zeichen am Ende)

Interessant ist, dass sich das Offset Word 1 aus der Header Länge und Meta Data Länge errechnet (siehe Zeile 0x28 & 0x40).
0x28 + 0x28 = 0x50!

Hier auch noch mal als Datei Format in Bild Form:

STL-Format-Anschaulich_2

Nun ja, jetzt habe ich noch ein Quick & Dirty PoC dazu gemacht und ich kann wunderbar damit STL Dateien auslesen ;) In dem Paket sind auch die 3 STL Dateien dabei zum ausprobieren ;)

Download: STL-Reader (4955 Downloads)

Viel Spaß mit dem Tool. Ich hoffe das Format ist einigermaßen erklärt.
Greetz TheVamp

One thought on “Diablo 3 – STL-Format”

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.