# Wie analysiert man ein Dateiformat?



## Sicaine (20. November 2004)

Hi,

wie analysiere ich ein Dateiformat? 
Bsp: zip, pdf, doc...
Wobei ich sicher bin, dass es dafür dokus gibt. Mich interrsiert aber die Theorie ansich womit ich dann vielleicht auch mal selbst ein Dateiformat analysieren kann wie z.B. mpq von World of Warcraft oder ein .bin file einer NavigationsCD.
Erkennen von Mustern die verschiedene Formate immer wieder verwenden wie wave oder so.


----------



## Dario Linsky (21. November 2004)

Hi,

ich denke mal, dass man ohne eine entsprechende Dokumentation da wohl nicht allzu weit kommen wird. Bei einfacheren Formaten könnte man unter Umständen noch selbst darauf kommen, wie sie funktionieren, aber da noch mitzuhalten, wird schnell zu umständlich.
Als Beispiel kannst du dir ja mal ohne zusätzliche Informationen eine einfache Bitmap-Datei im Hexeditor ansehen und versuchen, den Dateiinhalt selbst zu interpretieren.

Grüße, Dario


----------



## Daniel Toplak (21. November 2004)

Wie Dario schon sagte, besteht da eigentlich keine Chance. Denn die Hersteller, bzw. Erfinder der Formate haben z.T. auch die Interesse daran, daß niemand das Format "knackt", sonst könnte ja jeder bestimmte Konverter, Importer und Exporter schreiben.
Zurück zum Beispiel Bitmap:
Bitmap ist ansich eigentlich ein "einfaches" Format, wenn man die Spezifikationen kennt, sind diese aber unbekannt, dann wird es schwer die Pixeldaten auszulesen, wenn man nicht weiß wo sie anfangen (Offset) bzw. wie sie geschrieben sind. Denn es können z.B. 24bit sein, oder 8bit mit Palette usw...

Gruß Homer


----------



## Matthias Reitinger (21. November 2004)

Na ja, so aussichtslos ist es ja nun doch wieder nicht. Wenn man schon ungefähr weiß, wonach man sucht, dann findet man es auch viel einfacher. Beispiel GTA 3: Ich hattemich da selber mal rangemacht, die Dateiformate zu "knacken".

Zunächst waren die einzelnen Dateien in eine größere zusammengefasst. Anhand immer wieder auftauchender Datenblöcke (Dateiheader) konnte ich herausfinden, wo die einzelnen Dateien anfingen, so dass ich nach relalativ kurzer Zeit ein Entpack- und Packprogramm schreiben konnte (zum Glück waren die Daten nicht komprimiert, sonst hätt ich an der Stelle schon aufgeben müssen).

Ich hatte dann also jede Menge kleinerer Dateien in einer schönen Verzeichnisstruktur vorliegen, anhand welcher ich die Dateien dann auch in einzelne Dateitypen abgrenzen konnte (Bilddateien, Models, Sounds...). Zunächst machte ich mich dann an die Bilddateien. Dazu hab ich mir ein Programm geschrieben, um die Dateien zu untersuchen. Damit konnte man zur Laufzeit den Dateioffset, an dem die Bilddaten anfangen, das Bildformat, die Bildgröße etc. einstellen, woraufhin das Programm die Daten in der Datei dann entsprechend interpretierte und anzeigte. Nach einiger Rumfrickelei konnte ich dann auch tatsächlich was auf der Anzeige erkennen, und wenige Stunden später hatte ich's sogar ohne Verzerrungen und in richtigen Farben vorliegen   (Das Erfolgserlebnis kann man sich vorstellen ). Einen Konverter zu schreiben, war dann nur noch Formsache.

Davon motiviert machte ich mich an das Modelformat. Da ich aber zu der Zeit noch überhaupt keine Ahnung hatte, wie ein solches aufgebaut ist, musste ich schnell wieder aufgeben. Einzelne, sehr einfache Models konnte ich zwar in Grundzügen extrahieren, aber das war's auch schon.

Man sieht also, unmöglich ist es nicht. Aber ein bisschen Erfahrung mit Dateiformaten sollte man schon mitbringen. Man muss aber natürlich dazu sagen, dass ich bei meinem Beispiel großes Glück hatte, dass keinerlei Kompressionsalgorithmen verwendet wurden, denn die machen die Geschichte noch ein ganzes Stück komplizierter. Wenn dann noch Verschlüsselung hinzukommt (in Zeiten immer leistungsstärkerer Systeme), kann man's größtenteils gleich knicken. Wobei auch hier zu sagen ist, dass hier selten das Rad neu erfunden wird und auf vorhandenes zurückgegriffen wird (z.B. ZIP-Kompression). Wenn alle Stricke reißen, gibt's natürlich noch die Möglichkeit, dem jeweiligen Programm, das mit den Dateien hantiert, "über die Schulter zu schauen", sprich das Disassemblat zu analysieren bzw. einen Debugger anzuwerfen. Dieses Verfahren ist allerdings nur für Hartgesottene zu empfehlen   

Wenn du dich über einige Dateiformate und deren Aufbau informieren willst, kann ich dir http://www.wotsit.org/ empfehlen. Wenn du speziell etwas über das MPQ-Format erfahren willst, solltest du dir mal Inside MoPaQ anschauen.

In dem Sinne, viel Glück beim Reverse Engineering


----------



## melmager (22. November 2004)

unter unix gibt es ein nettes tool das genau das macht was du möchtest
file 
dazu gibt es ein magic file wo die angaben drin sind, wie man die files erkennt

siehe 
http://www.astro.keele.ac.uk/~rno/Computing/File_magic.html

oder "man file" ; "man magic" falls unixsystem vorhanden


----------



## Sicaine (22. November 2004)

hmmmmm jo sehr cool @Matthias. Mal schaun ob ich das auch irgendwie so hinbekokmme 

@melmager cooler Link werd ich mir mal genauer ansehen.

Ansonsten wird man wohl eh Tools selbst schreiben müssen oder Mit dem Hexeditor mal rumspielen oder?

Mal schaun an welches Format ich mich mal Testweise "austobe"


----------

