Magische Zahl – Dateien sicher erkennen

Magic Bytes

Wie erkennt Windows den Dateityp ? Richtig, anhand der Dateierweiterung ! Erstmals, denn im Endeffekt entscheidet die Magische Zahl …

Datei Erweiterung

Windows orientiert sich an der Datei Erweiterung und öffnet die Datei mit dem Programm, das für diesen Dateityp registriert wurde. Zumindest wenn die Datei angeklickt, oder mit einem Shell Execute aufgerufen wird.

Diese Art der Zuordnung ist schnell, flexibel und übersichtlich.

Ist die Erweiterung „.txt“ mit dem Programm Notepad verknüpft, so wird jede Txt-Datei mit dem Notepad geöffnet. Wollen wir zukünftig „.txt“ Dateien mit Wordpad öffnen, registrieren wir einfach um. Schöner Nebeneffekt: Jede Datei benötigt daher eine Datei Erweiterung und lässt erahnen was in ihr steckt.

Magische Zahl – Magic Bytes – Magic Number

Manch andere Betriebsysteme benötigen keine Datei Erweiterung. Sie erkennen Dateien anhand des Datei Headers. Genauer, anhand der ersten Bytes am Anfang der Datei … den Magic Bytes.

Klassischerweise aus den ersten beiden, oder aus den ersten 4 Bytes. Diese Bytes kann man auch als Zahl interpretieren, der Magischen Zahl. Mit einem simplen Zahlenvergleich wird der Dateityp eindeutig erkannt.

Magische Zahl heute …

Nur weil eine Datei mit einem bestimmten Programm verknüpft ist heisst das noch lange nicht, dass die Datei auch wirklich von diesem Programm richtig gelesen werden kann.

Öffnen wir mal ein Bild mit einem Texteditor. Was wir sehen ist nicht das Bild, sondern eine Menge merkwürdiger Zeichen.

Magic BytesAus diesem Grund, ist die Idee der magischen Bytes auch heute noch aktuell. Ausser einem simplen Textfile verfügen praktisch alle Datei-Formate über einen Header. Dieser enthält meist eine ID ( Magische Zahl ) und Definitionen zu den Daten. Erst anschliessend folgen dann die eigentlichen Daten.

Bei einem Bild werden Attribute wie Breite und Höhe angegeben, bei einem Zipper hingegen Angaben wie z.B.: die komprimierte und unkomprimierte Dateigrösse.

Beispiel: Magische Zahl der ZIP Datei

Zip Format

Die ZIP Datei entspricht dem klassischen Ansatz einer 32 Bit Magischen Zahl. Bestehend aus den beiden Buchstaben: „PK“ (2 Bytes) gefolgt von dem Wert 0x0304 (2 Bytes).
Die Buchstaben „PK“ stehen für die Initialien des ZIP Datei-Format Erfinders: Phil Katz.

Durch den Vergleich der ersten vier Bytes mit der hexadezimalen Zahl 0x504B0304 lässt sich nun sehr einfach, und vor allem blitzschnell, ermitteln ob es sich bei dieser Datei um eine ZIP Datei handelt. Unabhängig der Dateierweiterung  !

 Wikipedia: ZIP Datei-Format

Beispiel: Magische Zahl in ausführbaren Dateien

Eine ausführbare Datei, z.b.: „.exe“, „.dll“, „.cpl“, „.scr“, ist nicht nur eine Ansammlung vieler Programmbefehle, sondern ein ziemlich komplexes Dateiformat. Neben den eigentlichen Befehlen werden noch weitere Daten wie Attribute, importierte und exportierte Bibliotheken / Funktionen, Relokationstabellen, statische Daten und vieles mehr gespeichert.

Das Format nennt sich PE ( portable executable ) und wird durch Microsoft immer wieder erweitert und angepasst.

 Microsoft: PE / COFF Fileformat

Jedes Windows Programm beginnt aus Kompatibilitätsgründen mit einem ausführbaren Dos Programm !

Im vereinfachten Fall beginnt ein Windows Programm mit den folgenden Blöcken:

PE Format

Die Windows Executable beginnt mit einem MS-DOS Header, der verschiedene Attribute wie Stack, Register-Initialisierung, u.s.w. enthält.
Wichtig sind in unserem Falle die ersten beiden (Magic) Bytes.
Diese Bytes enhalten die DOS Signatur 0x4D5A oder auch „MZ“. Die Buchstaben „MZ“ stehen für die Initialien des DOS Entwicklers: Mark Zbikowski.

Am Ende des DOS-Headers, an der Position 0x3c, folgt das Offset zum Windos PE Header.
Das DOS-Stub enthält das bereits besprochene ausführbare DOS Programm.
Wird eine Windows Executable unter DOS gestartet erscheint ein Text in der Art:
„This program cannot be run in DOS mode.“

Der PE Header enthält wiederum Attribute zum Programm wie CPU, Flags, …

Wichtig sind wieder einmal die ersten 4 (Magic) Bytes. Hier steht die PE Signatur: PE\0\0

PE Format

Mit diesem Basiswissen ist es nun recht einfach herauszufinden, ob eine Datei eine ausführbare Datei ist … unabhängig von der Datei-Erweiterung.

  • 2 Bytes DOS-Signatur „MZ“ prüfen,
  • Offset zum PE-Header auslesen (Vorsicht Endian Reihenfolge),
  • zum PE-Header seeken,
  • 4 Bytes PE-Signatur „PE\0\0“ prüfen

Praktische Anwwendung

Gut, so funktioniert’s … und wie kann man das praktisch anwenden ?

Anwendung findet sich überall dort, wo der Dateityp schnell und unabhängig der Datei Erweiterung geprüft werden muss. Z.B.: um versteckte oder verharmloste Dateien aufzuspüren.

Getarnte Musik Dateien

Music Player

Eine „.mp3“ Musik-Datei lässt sich ganz einfach in eine unscheinbare Text-Datei verwandeln, indem man die Datei-Erweiterung .mp3 zu .txt ändert. Trotzdem lässt sich diese umbenannte Datei ohne Probleme mit vielen Playern abspielen, da diese das Format eben anhand des Datei-Headers ermitteln.

Lösung: Datei Header überprüfen.

Versteckte Dateien

  • Dateien die an andere angehängt wurden:
    z.B.: Mit dem copy Befehl mehrere Dateien in eine gemeinsame kopieren.
  • Dateien in Resource Files ( .rc ):
    Ermöglicht das Laden von Dateien aus der eigenen Executable.
  • Dateien in ADS ( Alternative Data Streams ) verstecken:
    In der NTFs Datei als ADF speichern.

Das sind beliebte Methoden um Daten kompakt zu halten, aber auch um Programme und Benutzer gezielt zu täuschen.

Lösung: Nicht nur die Datei, sondern auch den Inhalt und ADS prüfen.

Umbenannte Executables

Executables und Batch Files werden vom Imageloader geladen. Und dem ist es egal ob die Erweiterung nun .exe oder .bat lautet. Ein notepad.exe als notepad.bat umbenannt, sieht sofort harmloser aus und wird auch ohne murren gestartet.

Bei einem CreateProcess() ist die Datei Erweiterung sogar völlig unbedeutend. Da wird auch ein notepad.txt als Executable gestartet.

Lösung: PE Format prüfen

Immer auf dem Laufenden !
Liken Sie uns jetzt auf Facebook
Keinen Artikel verpassen !
Folgen Sie uns jetzt auf Twitter

Fanden Sie den Artikel interessant ? Dann empfehlen Sie ihn doch gleich weiter !

Sagen Sie uns Ihre Meinung !

Happy new year 2016 !
Happy New Year 2016 !
Google Tips
Die besten Google Tipps, Hacks, Games und Easter Eggs !
Registry Quiz
Sind Sie ein Windows Registry Experte ?
Coder Myths
14 hartnäckige Programmier(er) Mythen und Irrtümer
Password Sünden / Password Sins
13 gefährliche Passwort Sünden
Passwort Generator / password generator
Online Passwort Generator
Password Hacker
Passwort Hacker – Wie kommen Hacker an Ihre Passwörter ?
Leet
Leet – die Hacker Sprache
Spy++ Title
Windows Fenster Spionage mit Spy++
Registry Quiz
Sind Sie ein Windows Registry Experte ?
Title ProcMon
Prozess Monitor – Programmen auf die Finger geschaut !
Windows Construct
Fenster im Eigenbau !
Coder Myths
14 hartnäckige Programmier(er) Mythen und Irrtümer
Windows Construct
Fenster im Eigenbau !
Debug Messages
Programmierer Geflüster abhorchen
Registry timestamp / Registry Zeitstempel
Registry Keys haben einen Zeitstempel ?!
Title ProcMon
Prozess Monitor – Programmen auf die Finger geschaut !
WMI Code Creator
WMI Code Creator – WMI ganz komfortabel
Environment Variables / Umgebungs Variablen
Windows konfigurieren mit Umgebungsvariablen
Passwort Generator / password generator
Online Passwort Generator