FileAnalyzer

Suche in Binärdateien

Die Suche nach einem bestimmten Inhalt innerhalb von Textdateien ist vergleichsweise einfach, da die Bytes von Textdateien bei gegebener Kodierung eindeutig bestimmten Zeichen zugeordnet werden können. Anders verhält es sich jedoch bei der Suche innerhalb von Binärdateien.

Je nach Format unterliegen Binärdateien einer bestimmten definierten Dateistruktur, so dass die gleiche Bytesequenz innerhalb der selben Datei an unterschiedlichen Stellen eine völlig andere Bedeutung haben kann. An der einen Stelle kommt eine Bytesequenz vielleicht als Größenangabe für einen Chunk daher, an einer anderen Stelle ist genau die gleiche Abfolge von Bytes dagegen vielleicht als String zu interpretieren, da diese Stelle sich innerhalb eines Elements befindet, das zum Beispiel Metadaten speichert.

Aufgrund dieser Schwierigkeiten möchten wir uns in diesem Artikel ansehen, welche verschiedenen Arten von Byte-Suchen mit der Hilfe des FileAnalyzers durchgeführt werden können und was dabei zu beachten ist. Wir beginnen dabei mit einer simplen Suche nach einfachen Byte-Sequenzen ohne Berücksichtigung ihrer Bedeutung, fahren fort mit der Suche nach Bytesequenzen, denen Zahlen oder Strings zu Grunde liegen und enden mit der Suche nach Pfaden, Eigenschaften und Werten, die innerhalb der Dateistruktur von Binärdateien gespeichert sind:

Aufruf der Suchfunktion

Alle in diesem Tutorial vorgestellten Funktionen finden Sie im Suchdialog des FileAnalyzers. Dieses kann über den Button "Suchen" unter der Dateiliste, über das Menü "Tools > Suchen" oder über die Tastenkombination STRG + S aufgerufen werden.

Darüber hinaus lässt sich die Suchfunktion auch direkt über die rechte Maustaste aus der Dateistruktur, der Detail-Tabelle oder der Hex-Ansicht aufrufen. Auf diese Weise lassen sich Bytes aus der Hex-Ansicht, Daten aus der Tabelle oder Pfade aus der Baumstruktur der Dateistruktur direkt ohne Eingabe in die Suche übernehmen.

Suche nach Byte-Sequenzen

Die einfachste Suche innerhalb von Binärdateien ist die simple Suche nach einzelnen Bytes oder längeren Bytesequenzen ohne Berücksichtigung des Kontextes, in dem die Bytes innerhalb der Datei erscheinen.

Dennoch sollten Sie im Hinterkopf behalten, dass eine über diese Option gefundene Bytesequenz natürlich nicht nur innerhalb eines bedeutungstragenden Elementes innerhalb der Dateistruktur vorkommen kann, sondern sich auch über mehrere Elemente oder Chunks erstrecken könnte. Wenn Sie auf die Bedeutung der Bytes Wert legen und nur innerhalb der geordneten Elemente einer Binärdatei suchen möchten, sollten Sie daher stattdessen die Suche in der Dateistruktur verwenden, auf die wir später zu sprechen kommen.

Wenn Ihre zu suchende Byte-Sequenz auf eine Zahl oder einen String zurückgeht, müssen Sie sich übrigens nicht die Mühe machen, die für die gesuchte Zahl oder den gesuchten String erforderliche Bytesequenz selber zu errechnen. In diesem Fall können Sie nämlich einfach die Suche nach Zahlen oder Strings verwenden, die wir uns in den nächsten beiden Abschnitten ansehen möchten.

Suche nach Zahlen

Die Suche nach Zahlen ist so etwas wie eine Eingabevereinfachung für die Suche nach Byte-Sequenzen. Diese Suche funktioniert im Prinzip genauso, wie die Suche nach Byte-Sequenzen, jedoch mit dem Unterschied, dass Sie die Bytesequenz nicht direkt eingeben müssen, sondern stattdessen eine Zahl in das Suchfeld schreiben, aus der dann automatisch die zu suchende Bytesequenz für das gewählte Zahlenformat generiert wird.

Wie auch bei der simplen Suche nach Bytesequenzen, bleibt das Format und die Dateistruktur auch bei der Suche nach Zahlen über diese Funktion unberücksichtigt. Das heißt, auch die Suche nach Zahlen scannt die durchsuchende Datei lediglich nach dem Byte-Äquivalent der zu suchenden Zahl, lässt dabei aber außer acht, ob die gefundenen Bytes innerhalb der Dateistruktur auch wirklich für diese Zahl stehen. Ein solcher Treffer kann also genauso innerhalb der Datei eigentlich in der Bedeutung eines Strings vorkommen oder sogar über mehrere bedeutungstragende Elemente reichen.

Falls Sie nur diejenigen Zahlen finden möchten, die auch wirklich als solche als Wert innerhalb der Dateistruktur vorkommen, sollten Sie stattdessen die Funktion Suche in der Dateistruktur verwenden. Diese Funktion ermöglicht es nämlich, direkt nach vorgegebenen Werten innerhalb der in der Datei wirklich definierten Eigenschaften zu suchen.

Suche nach Strings

Auch die Suche nach Strings ist wie auch die Suche nach Zahlen als Vereinfachung der Suche nach Bytesequenzen zu verstehen. Der einzige Unterschied besteht darin, dass bei dieser Funktion statt einer Zahl ein String beziehungsweise ein Text eingegeben werden kann, aus dem dann automatisch das für die Suche erforderliche Byte-Äquivalent generiert wird.

Wie bei der Suche nach Zahlen auch erhalten Sie auch bei der Suche nach Strings unter den Eingabefeldern eine Vorschau der generierten Bytesequenz. An dieser Stelle wird Ihnen auch direkt eine Fehlermeldung ausgegeben, falls Ihr angegebener Text nicht in Ihrer gewählten Kodierung darstellbar ist (zum Beispiel Unicode-Zeichen in der ASCII-Kodierung).

Weiterhin sollten sie auch für die Suche nach Strings beachten, dass wie bei allen drei bisher vorgestellten Suchtypen keine Berücksichtigung des Formats und der Dateistruktur erfolgt. Falls Sie Strings innerhalb der Dateistruktur Ihrer Dateien suchen möchten und damit nur die Vorkommnisse in Ihr Suchergebnis aufgenommen haben möchten, für die ein String wirklich auch in der Dateien in seiner Bedeutung vorkommt, benutzen Sie bitte die Suche in der Dateistruktur, die wir uns im nächsten Abschnitt ansehen möchten.

Suche in der Dateistruktur

Das Herzstück des FileAnalyzer-Suchdialogs ist die Suche in der Dateistruktur, die Sie über die gleichnamige Option in den Suchkriterien aktivieren können. Im Gegensatz zu den anderen bisher vorgestellten Suchtypen können Sie mit dieser Art von Suche Zahlen, Strings und andere Werte und Eigenschaften innerhalb von Binärdateien finden, die exakt unter dieser Bedeutung innerhalb der Dateistruktur vorkommen und ihre Bedeutung daher nicht nur auf reiner Byte-Ebene tragen.

Die Suche in der Dateistruktur umfasst die drei Felder "Pfad", "Eigenschaft" und "Wert", die für Ihre Suchen einzeln, gemeinsam oder in beliebiger Kombination genutzt werden können:

Pfad

Wenn Sie Ihre Suche auf einen bestimmten Teil innerhalb der Dateistruktur beschränken möchten, können Sie hier den Pfad dieses Teils angeben. Wichtig ist dabei zu wissen, dass der FileAnalyzer die Teile beziehungsweise Chunks einer Datei im Sinne einer Ordnerstruktur versteht, über die sich jedes Element der Datei eindeutig adressieren lässt. Mehr zu diesem Thema erfahren Sie in der Einführung in das Pfadkonzept des FileAnalyzers. In diesem Artikel erfahren Sie auch, wie Sie gleichnamige und damit mehrdeutige Pfade ansprechen können.

Um einen Pfad nicht händisch in den Suchdialog eingeben zu müssen, können Sie einfach mit der rechten Maustaste auf ein Element innerhalb der Dateistruktur im Hauptfenster klicken und "Pfad durchsuchen" aus dem Kontextmenü auswählen. Für mehrdeutige Pfade enthält das Kontextmenü die Einträge "Pfad an dieser Position durchsuchen" sowie "Pfad an allen Positionen durchsuchen" um die Suche entsprechend mit oder ohne Indices im Pfad aufzurufen.

Eigenschaft

Das nächste Feld "Eigenschaft" erlaubt es, die Suche auf bestimmte Eigenschaften zu beschränken beziehungsweise ausschließlich in bestimmten Eigenschaften von Dateien zu suchen. Beispielsweise sind im eben angesprochenen Track-Header der ISO Base Media Dateien einige Eigenschaften wie "Width", "Height", "Volume" oder "Duration" gespeichert, deren Namen Sie hier für die Suche eingeben können, um im Suchergebnis nur Werte dieser Eigenschaft angezeigt zu bekommen.

Auch den Namen der Eigenschaft müssen Sie nicht händisch eingeben sondern können auch in diesem Fall einfach mit der rechten Maustaste auf eine Zeile der Detail-Tabelle klicken und damit direkt die Suche aufrufen. Im Kontextmenü der Detail-Tabelle erhalten Sie dafür einerseits die Möglichkeit nur nach der angeklickten Eigenschaft zu suchen (unabhängig vom Pfad) und andererseits die Möglichkeit, nach dieser Eigenschaft nur innerhalb eines gleichnamigen Pfades zu suchen (wieder mit der Möglichkeit mit oder ohne Berücksichtigung der Pfad-Position).

Wert

In der gleichen Weise funktioniert auch das Feld "Wert" mit dem Sie Ihre Dateien nach beliebigen Werten durchsuchen können. Dabei können Sie dieses Feld genauso für Zahlen wie auch für beliebige Strings verwenden. Je nachdem ob bei Ihrer Suche zusätzlich noch die Felder "Pfad" und/oder "Eigenschaft" ausgefüllt sind, erfolgt die Suche nach den Werten entweder nur innerhalb der gewählten Pfade oder Eigenschaften oder innerhalb der gesamten Datei unabhängig von Element- und Eigenschaftstypen.

Bei einer Suche nach Dezimalzahlen kommt es nicht darauf an, welchen Dezimaltrenner Sie verwenden. Es kann also zum Beispiel sowohl die deutsche Schreibweise mit Komma wie 1,0 auch die englische Schreibweise mit einem Punkt als Dezimaltrennzeichen wie 1.0 für die Eingabe genutzt werden. Auch innerhalb der Dateistruktur werden beide Schreibweisen äquivalent genutzt und bei derartigen Suchen entsprechend gefunden.

Beachten Sie jedoch, dass für eine Suche nach Kommazahlen auch eine Kommazahl eingegeben werden muss. Falls Sie dagegen eine Integer-Zahl eingeben, wird auch nur nach ganzen Zahlen gesucht. Angenommen wir haben zum Beispiel Eigenschaften mit den Werten 0 - 0,5 - 1 - 1,5 - 2 - 2,5 - 3. Wenn Sie nun nach "größer als 1" suchen, erhalten Sie nur 2 und 3 als Treffer, weil nur diese Zahlen auch ganze Integer-Zahlen sind. Wollen Sie dagegen auch die Dezimalzahlen einschließen, müssen Sie nach "größer als 1,0" suchen. Dann wird Ihr Suchergebnis die Zahlen 1,5 - 2 - 2,5 sowie 3 enthalten.

Wie bei den anderen beiden Suchfeldern auch, können Sie auch die Suche nach Werten direkt aus der Detail-Tabelle starten, indem Sie mit der rechten Maustaste auf eine Tabellenzeile klicken und (Diesen) "Wert suchen" aus dem Kontextmenü auswählen und damit direkt die Suche starten.

Suchoperator

Sowohl neben dem Feld "Eigenschaft" als auch neben dem Feld "Wert" finden Sie eine Auswahlbox, mit der Sie den Operator für die Suche einstellen können.

Weitere Operatoren sind "ENDS_WITH" (endet mit), "MATCHES_REGEX" und "CONTAINS_REGEX" (matcht ganz oder in Teilen einen regulären Ausdruck) sowie "GREATER" (größer), "GREATER_OR_EQUAL" (größer oder gleich), "SMALLER" (kleiner), "SMALLER_OR_EQUAL" (kleiner oder gleich) und "BETWEEN" (zwischen). Bei Verwendung des Operators "BETWEEN" lässt sich ein Range von einem bis zu einem anderen Wert definieren. Der Suchbegriff "2-5" findet entsprechend die Werte 2, 3, 4 oder 5 - nicht aber 1, 6 oder 10.

Übrigens können Sie Suchoperatoren wie GREATER, GREATER_OR_EQUAL, SMALLER, SMALLER_OR_EQUAL oder BETWEEN nicht nur mit Zahlen sondern auch mit Text beziehungsweise Strings nutzen. Eine Suche nach GREATER w würde also entsprechend Werte wie x, y oder z finden (nicht aber a, b oder v) während eine Suche nach BETWEEN i-o zum Beispiel j, k, l, m und n finden würde, nicht jedoch a oder x.

Inverse Suche

Unter den beiden Feldern "Eigenschaft" und "Wert" finden Sie darüber hinaus die Option "Invers" mit der sich das Suchkriterium des jeweiligen Feldes umdrehen lässt. Das heißt, wenn Sie zum Beispiel nach einem Wert mit EQUALS 1 suchen und den Haken bei "Invers" setzen, werden alle Werte gefunden, die nicht den Wert 1 haben.

Suchergebnis kopieren und speichern

Nachdem Sie durch eine der in den letzten Abschnitten vorgestellten Sucharten ein Suchergebnis erzeugt haben, haben Sie verschiedene Möglichkeiten, damit zu arbeiten und das Ergebnis für andere Zwecke weiter zu verwenden.

Wenn der Zweck Ihrer Suche darin besteht, Dateien (aus) zu sortieren, können Sie dafür die Buttons "Gefundene entfernen" sowie "Andere entfernen" verwenden, die Sie ebenfalls unterhalb der Ergebnistabelle finden. Mit dem ersten Button entfernen Sie alle Dateien mit Treffern aus der Dateiliste im FileAnalyzer während der zweite Button das Gegenteil bezweckt und alle Dateien aus der Dateiliste entfernt, die keine Treffer enthalten.

Suchen über die Skriptsteuerung des FileAnalyzers automatisieren

Alle in diesem Tutorial vorgestellten Funktionen lassen sich nicht nur wie gezeigt über die grafische Benutzeroberfläche des FileAnalyzers bedienen sondern auch über die Kommandozeile. Damit lässt sich die Suche in Binärdateien zum Beispiel auch in Skripte einbinden und automatisieren.

Mehr zu diesem Thema erfahren Sie im Tutorial über die Skriptsteuerung des FileAnalyzers in den Abschnitten Suche nach Bytesequenzen, Zahlen, Strings und in der Dateistruktur.