Möchten Sie den Text in einer Binär- oder Datendatei sehen? Mit dem Befehl „Linux-Zeichenfolgen“ werden diese Textteile – „Zeichenfolgen“ genannt – für Sie abgerufen.

Linux ist voll von Befehlen, die auf der Suche nach Problemen wie Lösungen aussehen können. Der Befehl für Saiten fällt definitiv in dieses Lager. Was ist ihr Zweck? Gibt es einen Punkt für einen Befehl, der die druckbaren Zeichenfolgen aus einer Binärdatei auflistet?

Machen wir einen Schritt zurück. Binärdateien – wie z. B. Programmdateien – können Zeichenfolgen mit lesbarem Text enthalten. Aber wie kommst du dazu, sie zu sehen? Wenn Sie eine Katze oder weniger verwenden, wird wahrscheinlich ein hängendes Terminalfenster angezeigt. Programme, die für die Arbeit mit Textdateien ausgelegt sind, kommen nicht gut zurecht, wenn nicht druckbare Zeichen durch sie eingegeben werden.

Die meisten Bytes in einer Binärdatei sind nicht für Menschen lesbar und können nicht auf sinnvolle Weise in das Terminalfenster gedruckt werden. Es gibt keine Zeichen oder Standardsymbole zur Darstellung von Binärwerten, die nicht alphanumerischen Zeichen, Satzzeichen oder Leerzeichen entsprechen. Zusammen werden diese als „druckbare“ Zeichen bezeichnet. Der Rest sind „nicht druckbare“ Zeichen.

Der Versuch, eine Binär- oder Datendatei nach Textzeichenfolgen anzuzeigen oder zu durchsuchen, ist daher ein Problem. Und hier kommen die Saiten ins Spiel. Sie extrahieren Zeichenfolgen druckbarer Zeichen aus Dateien Damit andere Befehle die Zeichenfolgen verwenden können, ohne sich mit nicht druckbaren Zeichen herumschlagen zu müssen.

Verwenden des Befehls strings

Der Befehl strings ist nicht kompliziert und seine grundlegende Verwendung ist sehr einfach. Wir geben den Namen der Datei an, die Zeichenfolgen in der Befehlszeile durchsuchen sollen.

Hier verwenden wir Zeichenfolgen für eine Binärdatei – eine ausführbare Datei – mit dem Namen „Jibber“. Wir geben Strings, ein Leerzeichen und „Jibber“ ein und drücken dann die Eingabetaste.

strings jibber

Überprüfen Sie dies -  So zeigen Sie den Batterieverbrauch pro Stunde unter iOS 12 an

Die Zeichenfolgen werden aus der Datei extrahiert und im Terminalfenster aufgelistet.

Zeichenfolgen werden in einem Terminalfenster ausgegeben

Festlegen der minimalen Zeichenfolgenlänge

Standardmäßig suchen Zeichenfolgen nach Zeichenfolgen mit mindestens vier Zeichen. Verwenden Sie die Option -n (Mindestlänge), um eine längere oder kürzere Mindestlänge festzulegen.

Beachten Sie, dass je kürzer die Mindestlänge ist, desto höher ist die Wahrscheinlichkeit, dass Sie mehr Müll sehen.

Einige Binärwerte haben denselben numerischen Wert wie der Wert, der ein druckbares Zeichen darstellt. Wenn zwei dieser numerischen Werte in der Datei nebeneinander liegen und Sie eine Mindestlänge von zwei angeben, werden diese Bytes so gemeldet, als wären sie eine Zeichenfolge.

Verwenden Sie den folgenden Befehl, um Zeichenfolgen aufzufordern, zwei als Mindestlänge zu verwenden.

strings -n 2 jibber

Strings -n 2 Jibber in einem Terminalfenster

Wir haben jetzt Zeichenfolgen mit zwei Buchstaben in den Ergebnissen. Beachten Sie, dass Leerzeichen als druckbares Zeichen gezählt werden.

Zeichenfolgen, die mit zwei Buchstabenfolgen in einem Terminalfenster ausgegeben werden

Paspeln durch weniger

Aufgrund der Länge der Ausgabe von Zeichenfolgen werden wir weniger durchleiten. Wir können dann durch die Datei scrollen und nach Text von Interesse suchen.

strings jibber | less

Saiten jibber | weniger in einem Terminalfenster

Die Auflistung wird jetzt für uns in weniger angezeigt, wobei der obere Rand der Auflistung zuerst angezeigt wird.

Zeichenfolgen werden in einem Terminalfenster in weniger ausgegeben

Verwenden von Zeichenfolgen mit Objektdateien

In der Regel werden Programmquellcodedateien zu Objektdateien kompiliert. Diese werden mit Bibliotheksdateien verknüpft, um eine ausführbare Binärdatei zu erstellen. Wir haben die Jibber-Objektdatei zur Hand, also schauen wir uns diese Datei an. Beachten Sie die Dateierweiterung „.o“.

jibber.o | less

jibber.o | weniger in einem Terminalfenster

Die ersten Zeichenfolgen werden alle in Spalte 8 eingeschlossen, wenn sie länger als acht Zeichen sind. Wenn sie verpackt wurden, befindet sich in Spalte neun ein „H“ -Zeichen. Sie können diese Zeichenfolgen als SQL-Anweisungen erkennen.

Überprüfen Sie dies -  So verwenden Sie ein Android-Gerät zum Sichern von Linux-Dateien

Zeichenfolgen werden in einem Terminalfenster in weniger ausgegeben

Ein Bildlauf durch die Ausgabe zeigt, dass diese Formatierung nicht in der gesamten Datei verwendet wird.

Zeichenfolgen werden in einem Terminalfenster in weniger ausgegeben

Es ist interessant, die Unterschiede in den Textzeichenfolgen zwischen der Objektdatei und der fertigen ausführbaren Datei zu sehen.

Suchen in bestimmten Bereichen in der Datei

Kompilierte Programme haben verschiedene Bereiche in sich, in denen Text gespeichert wird. Standardmäßig durchsucht Strings die gesamte Datei nach Text. Dies ist so, als hätten Sie die Option -a (alle) verwendet. Verwenden Sie die Option -d (Daten), damit Zeichenfolgen nur in initialisierten, geladenen Datenabschnitten in der Datei gesucht werden.

strings -d jibber | less

Strings -d Jibber | weniger in einem Terminalfenster

Sofern Sie keinen guten Grund dazu haben, können Sie auch die Standardeinstellung verwenden und die gesamte Datei durchsuchen.

Drucken des String-Offsets

Strings können den Offset vom Anfang der Datei drucken lassen, an der sich jeder String befindet. Verwenden Sie dazu die Option -o (Offset).

strings -o parse_phrases | less

Zeichenfolgen -o parse_phrases | weniger

Der Offset ist in angegeben Oktal.

Zeichenfolgen mit dem Versatz in Oktal in einem Terminalfenster

Verwenden Sie die Option -t (Radix), um den Versatz in einer anderen numerischen Basis anzuzeigen, z. B. dezimal oder hexadezimal. Auf die Radix-Option muss d (Dezimal), x (hexadezimal) oder o (Oktal). Die Verwendung von -to entspricht der Verwendung von -o.

strings -t d parse_phrases | less

Zeichenfolgen -td parse_phrases | weniger in einem Terminalfenster

Die Offsets werden jetzt dezimal gedruckt.

Zeichenfolgen, die mit Dezimalstellen in einem Terminalfenster ausgegeben werden

strings -t x parse_phrases | less

Zeichenfolgen -tx parse_phrases | weniger in einem Terminalfenster

Die Offsets werden jetzt hexadezimal gedruckt.

Zeichenfolgen werden mit hexadezimalen Offsets in einem Terminalfenster ausgegeben

Einschließlich Leerzeichen

Zeichenfolgen betrachten Tabulator- und Leerzeichen als Teil der gefundenen Zeichenfolgen. Andere Leerzeichen wie Zeilenumbrüche und Zeilenumbrüche werden nicht so behandelt, als wären sie Teil der Zeichenfolgen. Die Option -w (Leerzeichen) bewirkt, dass Zeichenfolgen alle Leerzeichen so behandeln, als wären sie Teile der Zeichenfolge.

strings -w add_data | less

Zeichenfolgen -w add_data | weniger in einem Terminalfenster

Wir können die leere Zeile in der Ausgabe sehen, die ein Ergebnis der (unsichtbaren) Wagenrücklauf- und Zeilenumbruchzeichen am Ende der zweiten Zeile ist.

Überprüfen Sie dies -  So ändern Sie die vertikale Uhr des Sperrbildschirms auf einem Samsung-Telefon

Zeichenfolgen werden in einem Terminalfenster ausgegeben

Wir sind nicht auf Dateien beschränkt

Wir können Strings mit allem verwenden, was ein Strom von Bytes ist oder erzeugen kann.

Mit diesem Befehl können wir durch die Arbeitsspeicher (RAM) unseres Computers.

Wir müssen sudo verwenden, weil wir auf / dev / mem zugreifen. Dies ist eine Zeichengerätedatei, die ein Bild des Hauptspeichers Ihres Computers enthält.

sudo strings /dev/mem | less

sudo strings / dev / mem | weniger in einem Terminalfenster

Die Auflistung ist nicht der gesamte Inhalt Ihres RAM. Es sind nur die Zeichenfolgen, die daraus extrahiert werden können.

Zeichenfolgen werden in einem Terminalfenster in weniger ausgegeben

Mehrere Dateien gleichzeitig durchsuchen

Mit Platzhaltern können Gruppen von zu durchsuchenden Dateien ausgewählt werden. Das * -Zeichen steht für mehrere Zeichen, und das? Zeichen steht für ein einzelnes Zeichen. Sie können auch viele Dateinamen in der Befehlszeile angeben.

Wir werden einen Platzhalter verwenden und alle ausführbaren Dateien im Verzeichnis / bin durchsuchen. Da die Auflistung Ergebnisse aus vielen Dateien enthält, verwenden wir die Option -f (Dateiname). Dadurch wird der Dateiname am Anfang jeder Zeile gedruckt. Wir können dann sehen, in welcher Datei jede Zeichenfolge gefunden wurde.

Wir leiten die Ergebnisse durch grepund nach Zeichenfolgen suchen, die das Wort „Copyright“ enthalten.

strings -f /bin/* | grep Copyright

Zeichenfolgen -f / bin / * | grep Copyright in einem Terminalfenster

Wir erhalten eine übersichtliche Auflistung der Copyright-Erklärungen für jede Datei im Verzeichnis / bin mit dem Namen der Datei am Anfang jeder Zeile.

Ausgabe von Zeichenfolgen mit Copyright-Anweisungen in einem Terminalfenster

Saiten entwirrt

Saiten sind kein Geheimnis. Es ist ein typischer Linux-Befehl. Es macht etwas sehr Spezifisches und macht es sehr gut.

Es ist ein weiteres Zahnrad von Linux und wird wirklich lebendig, wenn es mit anderen Befehlen arbeitet. Wenn Sie sehen, wie es zwischen Binärdateien und anderen Tools wie grep liegen kann, werden Sie die Funktionalität dieses etwas undurchsichtigen Befehls zu schätzen wissen.