Podívat se do binárního/spustitelného souboru, abyste získali lidsky čitelné řetězce, není ten druh práce, který dělá každý, ale co když vás o to požádá? Otevření souboru v editoru a ruční hledání věcí není elegantní řešení. Tak co dělat? Ano, uhodli jste správně – existuje nástroj příkazového řádku, který to udělá za vás.
Dotyčný nástroj se nazývá Řetězce a v tomto tutoriálu probereme základy tohoto příkazu pomocí několika snadno srozumitelných příkladů. Ale než to uděláme, stojí za zmínku, že všechny příklady v tomto článku byly testovány na počítači Ubuntu 16.04 LTS.
Příkaz Linux Strings
Příkaz Strings v podstatě vytiskne řetězce tisknutelných znaků v souborech. Následuje jeho syntaxe:
strings [OPTIONS] FILENAME
A zde je návod, jak to popisuje manuálová stránka nástroje:
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.
Následuje několik příkladů ve stylu otázek a odpovědí, které by vám měly poskytnout dobrou představu o tom, jak příkaz Strings funguje.
O1. Jak používat příkaz strings?
Základní použití je poměrně snadné – stačí zadat název souboru jako vstup a spustit příkaz.
Upozorňujeme, že protože Strings se používají hlavně k extrahování informací z binárních/spustitelných souborů, budeme ve všech našich příkladech používat jeden takový soubor.
Například:
strings test
Zde je výstup, který tento příkaz vytvořil v mém systému:
Q2. Jak vynutit vlastní omezení počtu znaků?
Jak bylo vysvětleno na začátku, výchozí chování nástroje Řetězce je tisknout pouze sekvence znaků, které jsou dlouhé alespoň 4 znaky. Pokud však chcete, můžete tento limit změnit pomocí volby -n příkazového řádku (která vyžaduje, abyste předali číslo, které označuje nový limit).
Chcete-li například nastavit limit na 2, postupujte následovně:
strings -n 2 test
Nyní tedy můžete ve výstupu vidět také řetězce dvou a tří znaků.
3. Jak zajistit, aby řetězce tiskly offset sekvencí znaků?
Pokud chcete, aby řetězce také zobrazovaly offsety sekvencí znaků, které zobrazuje na výstupu, pak to lze provést pomocí volby příkazového řádku -t, která vyžaduje zadání jediného znakového vstupu, který specifikuje radix ofsetu - 'o' pro osmičkovou soustavu, „x“ pro šestnáctkové nebo „d“ pro desítkové.
Například:
strings -t d test
A zde je výstup, který vytvořil v mém systému:
Takže můžete vidět, že řetězcům ve výstupu nyní předchází jejich příslušné offsety.
4. Jak přimět řetězce skenovat celý soubor?
V závislosti na tom, jak byly řetězce nakonfigurovány, může nebo nemusí prohledat celý vstupní soubor. Pokud však chcete mít naprostou jistotu, že nástroj přečte celý soubor (a nejen načítatelné inicializované datové části), použijte volbu -a příkazového řádku.
Například:
strings -a test
Naopak, pokud chcete, aby Řetězce zobrazovaly pouze řetězce z inicializovaných, načtených datových sekcí v souboru, použijte volbu -d příkazového řádku.
strings -d test
O5. Jak změnit oddělovač?
Jak jste si všimli, ve výchozím nastavení je oddělovač používaný řetězci nový řádek. Pokud však chcete, můžete mít vlastní oddělovač pomocí volby příkazového řádku -s.
Například:
strings -s [[[]]] test
Závěr
Příkaz Strings je extrémně užitečný nástroj, pokud hledáte užitečné informace v binárních/spustitelných souborech. Zde jsme probrali některé důležité možnosti příkazového řádku. Procvičte si je, a až budete hotovi, přejděte na stránku manuálu nástroje, kde najdete další informace.