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
- Suche nach Byte-Sequenzen
- Suche nach Zahlen
- Suche nach Strings
- Suche in der Dateistruktur
- Suchergebnis kopieren und speichern
- Suchen über die Skriptsteuerung automatisieren
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.
- Sie finden diese Art der Suche, indem Sie in den Suchkriterien die Option "Suche nach Byte-Sequenz" auswählen. Diese Option gibt Ihnen die Möglichkeit, eine freie Byte-Sequenz in das Suchfeld einzugeben.
- Bei der Eingabe spielt es keine Rolle, ob Sie die Buchstaben groß oder klein schreiben oder Leerzeichen zwischen die einzelnen Bytes schreiben oder auslassen. Die Suche nach "0D 0A", "0D0A", "0d0a" oder "0d 0a" wird also dasselbe Ergebnis bringen. Alternativ können Sie auch eine Bytesequenz innerhalb der Hex-Ansicht des FileAnalyzers markieren und mit der rechten Maustaste auf diese Auswahl klicken, um automatisch nach dieser Bytesequenz zu suchen ohne die Bytesequenz händisch eingeben zu müssen.
- Mit einem Klick auf den Button "Suchen" können Sie die Suche starten. Durchsucht werden immer alle Dateien, die gerade im Hauptfenster des FileAnalyzers in der Dateiliste geladen sind.
- Das Suchergebnis erscheint anschließend im Suchdialog in der Tabelle neben den Suchkriterien. Auch wenn die Bedeutung der einzelnen Bytes bei der Suche nach Bytesequenzen zunächst einmal untergeordnet ist, zeigt das Suchergebnis neben dem Byte-Offset nichtsdestotrotz den Pfad sowie die Eigenschaft innerhalb der Dateistruktur der Binärdatei an, in dem die Bytesequenz gefunden wurde. Dies gibt Ihnen die Möglichkeit, die Bedeutung der Bytesequenz aufgrund des Kontextes besser einschätzen zu können.
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.
- Um die Suche nach Zahlen zu nutzen, aktivieren Sie zunächst in den Suchkriterien die Option "Suche nach Zahl".
- Anschließend können Sie die zu suchende Zahl in das Feld "Zahl" eingeben.
- Welcher Bytesequenz diese Zahl entspricht ist abhängig von der Größe (1 bis 8 Bytes - mit wie vielen Bytes soll die Zahl dargestellt werden?), der Signedness (Signed oder Unsigned - soll der Zahlenraum nur positive oder auch negative Zahlen umfassen?) sowie der Endianness (Little Endian oder Big Endian - werden die Bytes von vorne oder von hinten angeordnet?). Diese Angaben können Sie in den gleichnamigen Feldern vornehmen und erhalten darunter mit jeder Änderung eine Live-Preview der generierten Byte-Sequenz oder eine Fehlermeldung, falls Ihre Zahl unter Verwendung Ihrer eingestellten Parameter nicht darstellbar ist (zum Beispiel weil die Byte-Größe zu klein für die Zahl ist oder eine negative Zahl nicht "unsigned" sein kann).
- Zuletzt können Sie wieder auf den Button "Suchen" klicken und erhalten damit ihr Suchergebnis.
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.
- Um diese Funktion zu nutzen, aktivieren Sie zunächst die Option "Suche nach Strings" in den Suchkriterien des Suchdialogs.
- Anschließend können Sie einen beliebigen zu suchenden Text in das Feld "String" eingeben.
- Wichtig ist außerdem anzugeben, unter Hinzunahme welcher Kodierung der String in die Bytes übersetzt werden soll. Diese Einstellung können Sie über das Feld "Kodierung" vornehmen. Ihnen stehen hier zahlreiche Kodierungen wie beispielsweise UTF-8, UTF-16 LE und BE, UTF-32 LE und BE sowie einige Latin- und Windows-Codepages zur Verfügung.
- Weiterhin können Sie über die Option "Byte Order Mark (BOM)" einstellen, ob Ihr String mit oder ohne die einleitenden Bytes für die Byte Order Mark der Kodierung gesucht werden soll.
- Nach Ihrer Eingabe können Sie die Suche wieder über den Button "Suchen" starten und erhalten daraufhin eine Tabelle mit Ihrem Suchergebnis.
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:
- Wenn Sie zum Beispiel nur nach einem Pfad suchen und die beiden anderen Felder freilassen, findet der FileAnalyzer alle beliebigen Eigenschaften und Werte, die in diesem Pfad gespeichert sind.
- Ähnlich verhält es sich, wenn Sie nur das Feld "Eigenschaft" nutzen. Dann werden unabhängig vom Wert und unabhängig davon, in welchem Chunk-Typ sich die Eigenschaft befindet, alle Treffer aufgelistet, auf die ihre gesuchte Eigenschaft zutrifft.
- Nutzen Sie dagegen nur das Feld "Wert" und lassen alle anderen Felder frei, findet das Programm alle Werte, die Ihrem Suchkriterium entsprechen, unabhängig davon, in welchem Pfad und in welchen Eigenschaften sich diese Werte befinden.
- Weiterhin sind auch beliebige Kombinationen aus verschiedenen Suchfeldern möglich. Wenn Sie zum Beispiel nur die Felder "Pfad" und "Eigenschaft" ausfüllen und das Feld "Wert" freilassen, finden Sie beliebige Werte dieser Eigenschaft im angegebenen Pfad. Wenn Sie nur nach Pfad und Wert suchen, finden Sie beliebige Eigenschaften mit dem gesuchten Wert innerhalb des gesuchten Pfades und so weiter.
- Füllen Sie alle Felder aus, finden Sie nur die Dateien, die exakt diesem Suchmuster entsprechen, das heißt in diesem Fall müssen sowohl Pfad, Eigenschaft als auch Wert mit Ihren Suchkriterien übereinstimmen.
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.
- Standardmäßig wird als Default-Wert der Operator "EQUALS" verwendet. Dies bedeutet, dass die gesuchte Eigenschaft beziehungsweise der gesuchte Wert exakt mit dem Suchbegriff übereinstimmen muss. Bei einer Suche nach "abc" werden dementsprechend nur Werte gefunden, die exakt dem String "abc" entsprechen.
- Wenn Sie dagegen den Operator "STARTS_WITH" (startet mit) verwenden, würde eine Suche nach "abc" auch "abcdef" finden, nicht aber "_abcdef".
- Dies wäre jedoch der Fall unter Verwendung des Operators "CONTAINS" (enthält).
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.
- In die Zwischenablage kopieren: Direkt unter dem Suchergebnis finden Sie die beiden Buttons "Kopieren als TSV" sowie "Kopieren als CSV". Mit diesen Buttons können Sie die gesamte Ergebnistabelle Ihrer Suche in die Zwischenablage kopieren, zum Beispiel um sie in einer anderen Anwendung einzufügen. Dabei nutzt die TSV-Funktion als Trennzeichen zwischen den einzelnen Feldern Ihrer Tabelle den Tab, während "CSV" - abhängig von Ihren Spracheinstellungen - das Komma oder das Semikolon verwendet.
- Ergebnis als Datei abspeichern: Mit dem dritten Button unter der Ergebnistabelle "Speichern als" lässt sich das Suchergebnis als Datei abspeichern. Ihnen stehen dafür die Formate CSV (Comma Separated Values), TSV (Tab Separated Values), XLSX (Microsoft Excel Spreadsheet), ODS (Open Document Spreadsheet), DIF (Data Interchange Format), HTML (Webseite) sowie TXT (Plain Text) zur Verfügung. Das Format können Sie im Speichern-Dialog unter "Dateityp" auswählen.
- Ergebnis in der Originaldatei anzeigen: Mit einem Klick auf eine Tabellenzeile können Sie darüber hinaus die Originaldatei, in der die Bytesequenz gefunden wurde, im FileAnalyzer öffnen und die betreffende Bytesequenz in der Hex-Ansicht markieren. Damit verschaffen Sie sich sofort einen Überblick darüber, in welchem Kontext Ihr Suchtreffer in der Datei eingebettet ist.
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.