In einer binären/ausführbaren Datei nach menschenlesbaren Strings zu suchen, ist nicht die Art von Arbeit, die jeder tut, aber was, wenn Sie dazu aufgefordert werden? Das Öffnen der Datei in einem Editor und das manuelle Suchen nach Inhalten ist keine elegante Lösung. Also, was tun? Ja, Sie haben es richtig erraten – es gibt ein Befehlszeilenprogramm, das dies für Sie erledigt.
Das fragliche Tool heißt Strings , und in diesem Tutorial werden wir die Grundlagen dieses Befehls anhand einiger leicht verständlicher Beispiele besprechen. Aber bevor wir das tun, ist es erwähnenswert, dass alle Beispiele in diesem Artikel auf einem Ubuntu 16.04 LTS-Computer getestet wurden.
Linux-Strings-Befehl
Der Befehl Strings druckt im Grunde die Zeichenfolgen druckbarer Zeichen in Dateien. Es folgt die Syntax:
strings [OPTIONS] FILENAME
Und so beschreibt es die Manpage des Tools:
For each file given, GNU strings prints the printable character
sequences that are at least 4 characters long (or the number given with
the options below) and are followed by an unprintable character.
Depending upon how the strings program was configured it will default
to either displaying all the printable sequences that it can find in
each file, or only those sequences that are in loadable, initialized
data sections. If the file type in unrecognizable, or if strings is
reading from stdin then it will always display all of the printable
sequences that it can find.
For backwards compatibility any file that occurs after a command line
option of just - will also be scanned in full, regardless of the
presence of any -d option.
strings is mainly useful for determining the contents of non-text
files.
Im Folgenden finden Sie einige Beispiele im Q&A-Stil, die Ihnen eine gute Vorstellung davon vermitteln sollen, wie der Strings-Befehl funktioniert.
Q1. Wie verwende ich den String-Befehl?
Die grundlegende Verwendung ist ziemlich einfach - übergeben Sie einfach den Dateinamen als Eingabe und führen Sie den Befehl aus.
Bitte beachten Sie, dass wir in allen unseren Beispielen eine solche Datei verwenden werden, da Strings hauptsächlich zum Extrahieren von Informationen aus binären/ausführbaren Dateien verwendet wird.
Zum Beispiel:
strings test
Hier ist die Ausgabe, die dieser Befehl auf meinem System erzeugt:
Q2. Wie erzwinge ich eine benutzerdefinierte Zeichenbegrenzung?
Wie eingangs erläutert, besteht das Standardverhalten des Strings-Tools darin, nur Zeichenfolgen auszugeben, die mindestens 4 Zeichen lang sind. Wenn Sie möchten, können Sie dieses Limit jedoch mit der Befehlszeilenoption -n ändern (wobei Sie eine Zahl übergeben müssen, die das neue Limit angibt).
Beispiel:Wenn Sie das Limit auf 2 setzen möchten, gehen Sie wie folgt vor:
strings -n 2 test
Jetzt können Sie also auch zwei- und dreistellige Zeichenfolgen in der Ausgabe sehen.
Q3. Wie kann man Strings dazu bringen, einen Offset von Zeichenfolgen zu drucken?
Wenn Sie möchten, dass Strings auch die Offsets von Zeichenfolgen anzeigt, die es in der Ausgabe anzeigt, können Sie dies mit der Befehlszeilenoption -t tun, bei der Sie eine einzelne Zeicheneingabe vornehmen müssen, die die Basis des Offsets angibt - 'o' für oktal, „x“ für hexadezimal oder „d“ für dezimal.
Zum Beispiel:
strings -t d test
Und hier ist die Ausgabe auf meinem System:
Sie können also sehen, dass den Strings in der Ausgabe jetzt ihre jeweiligen Offsets vorangestellt sind.
Q4. Wie kann man Strings dazu bringen, die ganze Datei zu scannen?
Abhängig davon, wie Strings konfiguriert wurde, kann es die gesamte Eingabedatei scannen oder nicht. Wenn Sie jedoch absolut sicher sein wollen, dass das Tool die vollständige Datei liest (und nicht nur ladbare, initialisierte Datenabschnitte), verwenden Sie die Befehlszeilenoption -a.
Zum Beispiel:
strings -a test
Umgekehrt, wenn Sie möchten, dass Strings nur Strings aus initialisierten, geladenen Datenabschnitten in der Datei anzeigt, verwenden Sie die Befehlszeilenoption -d.
strings -d test
F5. Wie ändere ich das Trennzeichen?
Wie Sie bemerkt haben, ist das von Strings verwendete Trennzeichen standardmäßig ein Zeilenumbruch. Wenn Sie möchten, können Sie jedoch mit der Befehlszeilenoption -s ein benutzerdefiniertes Trennzeichen verwenden.
Zum Beispiel:
strings -s [[[]]] test
Schlussfolgerung
Der Strings-Befehl ist ein äußerst nützliches Werkzeug, wenn Sie Binärdateien/ausführbare Dateien nach nützlichen Informationen durchsuchen möchten. Wir haben hier einige wichtige Befehlszeilenoptionen besprochen. Üben Sie sie also, und wenn Sie fertig sind, besuchen Sie die Manpage des Tools, um weitere Informationen zu erhalten.