Dateien untersuchen

Wir wissen nun, was Reverse Engineering ist, nun wollen wir das mal in der Praxis betrachten.
Das machen wir erstmal anhand von Dateien, da damit auch eine Grundlage für späteres gelegt wird.
bevor wir nun eine Datei genau anschauen, müssen wir klären, was eine Datei überhaupt ist.

Was ist eine Datei?

Jeder kennt Dateien erstmal als Icon in seinem Computer, auf das man klicken kann, um es mit einem Programm zu öffnen.
Damit können wir folgenden Rückschluss ziehen: Dateien sind etwas, was Separat vom Betriebssystem physisch irgendwo vorliegt.
Da dies uns aber noch nicht so viel Weiterbringt, müssen wir uns mit Datenträgern und Dateisystemen beschäftigen.
Ein „Datenträger“, ist, wieder Name schon indiziert, ein Medium zum abspeichern von Daten, wie z.B ein Blatt papier ;)
Da unser Computer im inneren kein Blatt Papier hat, wo er die Daten mit einem Stift drauf schreibt, schauen wir uns Digitale Speichermedien an.
Digitale Speichermedien speichern Daten binär, also zerlegen alles in Einsen und Nullen und speichern diese dann nacheinander, sodass eine lange lange lange kette von Nullen und Einsen entsteht. Da aber niemand was mit einer langen Kette von Nullen und Einsen anfangen kann, bedarf es einer Verwaltung, die Dateisystem genant wird.
Dieses Dateisystem wird auch auf dem Datenträger gespeichert, beginnt aber an der ersten stelle und bietet so einen Einstiegspunkt für das Betriebssystem.
Das Dateisystem verwaltet nun diese lange lange Kette von Nullen und Einsen so, das es angibt wo eine Datei in dieser kette beginnt und wo sie wieder aufhört. Damit weiß das System wenn es versucht eine Datei zu lesen wo es anfangen soll und wo es wieder aufhören muss.
Somit Somit können wir folgende Kette an Aktionen aufstellen, die das Betriebssystem ausführt, wenn wir irgendeine Datei öffnen:
Dateianfrage → Dateisystem → Speicherbereich auf dem Speichermedium → Binäre Daten auslesen → Daten an ein Programm Übergeben
Und hier wird auch etwas ganz Essentielles klar: Egal welche Datei von welchem Programm auch immer, alles wird in Einsen und Nullen zerlegt und gespeichert.
Und dies ist etwas sehr Fundamentales, den es bedeutet zum einen das wir Komplexe Daten wie Bilder in zahlen und damit in Einsen und Nullen zerlegen können, zum anderen das wir jede Datei als Rohdaten behandeln und Öffnen können, den genau diese Eigenschaft machen wir uns jetzt zu nutze.

Dateien Analysieren

Da wir nun Wissen, das alles was auf einem Speichermedium wie einer Festplatte oder einer SD-Karte gespeichert ist, Binär, also in Einsen und Nullen, vorliegt, wollen wir uns mal ansehen wie eine Datei binär aussieht.
Dazu legen wir ein neues Office Dokument(hier OpenOffice-Dokument *.odt) an und Schreiben „Hello World“ rein:

Neue Datei anlegen
Diese Datei speichern wir nun.
Und jetzt brauchen wir erstmal einen Hexeditor.

Hexeditor, was ist denn das?\\
Ein Hexeditor ist ein Programm, das Dateien Binär ausliest, die binäre Darstellung 
interpretiert und ins Hexadezimalsystem überträgt, was das lesen einfacher macht, 
weil so aus der Binären Zahl 10101100(306) die Zahl AC wird. 
Das Hexadezimalsystem zählt von 0-16, bevor es eine neue Stelle gibt,
hat daher die "Ziffern" 0-9 und A-F, wobei A für die Dezimale 10 steht und F für
die Dezimale 15, somit bedeutet 10(Hex) = 16(Dez).
Für Windows könnten das z.B die Programme HexWizard, DF HEXEditor oder der von mir 
bevorzugte Hexeditor aus der "Aedix Suite"


Mit unserem Hexeditor öffnen wir nun einfach mal die Datei und schauen mal, was so drin steht:

Hex Ansicht
Ohh, ist ja nicht so ergiebig, viele Zahlen und rechts sehen wir merkwürdige Zeichen, Punkte und die Zeichenfolge PK und mimetypeapplication/vnd.oasis.opendocument.textPK.
Und genau das ist ein Volltreffer. Um zu verstehen warum, fehlt uns eine Information:
Um Dateien schneller zu erkennen, hat man sich geeinigt in den ersten zwei Bytes eine Zeichenfolge zu Speichern, die den Dateityp festlegt. Das wäre in unserem Falle PK, was für ein ZIP-Archiv steht.
Wir wissen nun, das unsere Office-Datei im Grunde ein Archiv ist, das wiederum mehrere Dateien beinhalten kann.
Das ist eine nicht so unübliche Praxis, das man Dateien in Archive kapselt und dann mit einer neuen Endung versieht, so kommt man nicht auf die Idee an der Datei Rumzubasteln und man hat immer alles Nötige beisammen, z.B Bilder die in dem Text vorkommen.
Da wir uns nun aber dafür Interessieren, was nun in dieser Datei steht, ändern wir die Dateiendung von *.odt nach *.zip(Wird die Dateiendung nicht angezeigt, so muss das erst in den Einstellungen des Explorers aktiviert werden):

Nach *.zip Umbenennen und öffnen
Hier habe ich die Datei schon mit meinem bevorzugten Archivierungsprogramm geöffnet und wir sehen verschiedene Dateien mit wiederum merkwürdigen Endungen.
Nun öffnen wir eine der *.xml Dateien, aber diesmal nicht mit unserem Hex-Editor, sondern mit einem Normalen Text-Editor(ja ich weiß, das ist der IE, aber ich hatte gerade nichts anderes was die Zeilenumbrüche korrekt darstellte):

xml-Datei im Texteditor
Hier sehen wir nun wesentlich verständlicheres, zwar sind da immer noch allerhand merkwürdiger „<“ und „>“ und weiteres, was diese aber bedeuten kann man selber nachlesen.
Und im Unteren Teil finden wir auch unser „Hello World“ wieder.

Das war nun noch ein recht einfaches Beispiel, versuchen wir jetzt also mal Veränderungen zu verstehen.

Analyse: BMP-Dateien

BMP-Dateien sind Bilder, werden aber selten Eingesetzt, weil sie sehr groß sind, weil sie keine Komprimierung bieten, dafür nutzen sie und Um so mehr um etwas über Reverse Engineering zu lernen.
Dazu malen wir erstmal ein wenig.