Zobrazit tisknutelné znaky souboru s řetězci

Zkusili jste někdy otevřít soubor v editoru, jen abyste zjistili, že obsahuje nečitelný binární obsah?

Příkaz „strings“ systému Linux umožňuje zobrazit znaky čitelné člověkem v libovolném souboru.

Hlavním účelem použití příkazu "strings" je zjistit, na jaký typ souboru se díváte, ale můžete jej také použít k extrakci textu. Máte-li například soubor z proprietárního programu, který ukládá soubory v podivném binárním formátu, můžete pomocí textových řetězců extrahovat text, který do něj vložíte.


Příklad použití příkazu Strings

Skvělým způsobem, jak předvést sílu příkazu strings, je vytvořit dokument pomocí nástroje LibreOffice Writer.

Jednoduše otevřete LibreOffice Writer, zadejte nějaký text a poté jej uložte ve standardním formátu ODT.

Nyní otevřete okno terminálu (stiskněte CTRL, ALT a T současně) a poté použijte příkaz cat k zobrazení souboru následujícím způsobem:

kočka yourfi

(Nahraďte yourfilename.odt názvem souboru, který jste vytvořili)

Uvidíte celou zeď nečitelného textu.

Stisknutím mezerníku procházejte souborem. Sporadicky v celém souboru uvidíte část textu, který jste zadali.

Příkaz strings lze použít k zobrazení pouze částí, které jsou čitelné člověkem.

V nejjednodušší formě můžete spustit následující příkaz:

struny yourfi

Stejně jako dříve se objeví zeď textu, ale pouze text, který můžete číst jako člověk. Pokud budete mít štěstí, uvidíte svůj text.

To, co uvidíte, to je klíčové, je však na prvním řádku:

mimetypeapplication / vnd.oasis.

Víme, že typ souboru je soubor ODT LibreOffice Writer ze 2 důvodů:

  1. Vytvořili jsme soubor
  2. Přípona je .ODT

Představte si, že jste soubor nevytvořili nebo jste jej našli na obnoveném disku a soubor neměl příponu.

Obnova systému Windows by často obnovovala soubory s názvy jako 0001, 0002, 0003 atd. Skutečnost, že byly soubory obnoveny, je skvělá, ale pokusit se zjistit, jaké typy těchto souborů byly, byla noční můra.

Použitím řetězců máte šanci vypracovat typ souboru. Vědomí, že soubor je soubor opendocument.text, znamená, že jej můžete uložit s příponou ODT a otevřít v zapisovači LibreOffice.

V případě, že jste nevěděli, soubor ODT je ​​v podstatě komprimovaný soubor. Pokud přejmenujete yourfilename.odt na yourfilename.zip, můžete jej otevřít v archivním nástroji a dokonce soubor rozbalit.

Alternativní chování

Ve výchozím nastavení příkaz strings vrací všechny řetězce v souboru, ale můžete přepnout chování tak, aby vracelo řetězce z inicializovaných načtených datových částí v souboru.

Co to přesně znamená? Zdá se, že to nikdo neví.

Má smysl předpokládat, že používáte řetězce, abyste se pokusili zjistit typ souboru nebo vyhledat konkrétní text v souboru.

Pokud při spuštění příkazu strings pomocí výchozího chování nezískáte výstup, ve který jste doufali, zkuste spustit jeden z následujících příkazů, abyste zjistili, zda to má rozdíl:

šňůra

or

strings --data yourfilename

Ruční stránka uvádí, že výše uvedený příkaz může pomoci snížit množství odpadu vráceného z řetězců.

Příkaz "strings" lze nastavit tak, aby pracoval obráceně, takže výchozí nastavení je přepínač mínus d. Pokud tomu tak je ve vašem systému, můžete všechna data vrátit pomocí následujícího příkazu:

šňůra


Formátovací výstup

Text můžete dostat do výstupu, aby se vedle každého řádku textu zobrazil název souboru.

Chcete-li to provést, spusťte jeden z následujících příkazů:

šňůra

or

strings --print-file-name yourfilename

Výstup bude nyní vypadat asi takto:

yourfilename: a piece of text

or

yourfilename: another piece of text

Jako součást výstupu můžete také zobrazit posunutí místa, kde se tento text zobrazí v souboru. Chcete-li tak učinit, spusťte následující příkaz:

šňůra

Výstup bude vypadat asi takto:

Posun je ve skutečnosti osmičkový posun, i když v závislosti na tom, jak byly řetězce zkompilovány pro váš systém, by to mohl být také hexadecimální nebo desítkový offset.

Přesnější způsob, jak získat požadovaný posun, je použít následující příkazy:

strings -td yourfilename
řetězce - na vaše jméno souboru
řetězce - vaše jméno souboru

Mínus t znamená vrátit offset a následující znak určuje typ offsetu. (tj. d = desítkové, o = osmičkové, h = hex).

Ve výchozím nastavení příkaz strings vytiskne každý nový řetězec na nový řádek, ale můžete nastavit oddělovač podle vašeho výběru. Chcete-li například použít symbol oddělovače ("|") jako oddělovač, spusťte následující příkaz:

řetězce -s "| &


Upravte limit řetězce

Příkaz strings ve výchozím nastavení vyhledává řetězec 4 tisknutelných znaků v řadě. Výchozí nastavení můžete upravit tak, aby vracelo pouze řetězec s 8 tisknutelnými znaky nebo 12 tisknutelnými znaky.

Nastavením tohoto limitu můžete přizpůsobit výstup tak, abyste dosáhli co nejlepšího výsledku. Hledáním příliš dlouhého řetězce riskujete, že vynecháte užitečný text, ale jeho zkrácením můžete skončit s mnohem větším počtem nevyžádaných zpráv.

Chcete-li upravit limit řetězce, spusťte následující příkaz:

řetězce

Ve výše uvedeném příkladu jsem změnil limit na 8. Můžete nahradit 8 číslem podle svého výběru.

K provedení stejné věci můžete také použít následující příkaz:

řetězce --bytes & #

Zahrnout prázdné znaky

Ve výchozím nastavení obsahuje příkaz řetězce prázdné znaky, jako například tabulátor, nebo mezeru jako tisknutelný znak. Pokud tedy máte řetězec, který se čte jako „kočka seděla na podložce“, příkaz řetězce by vrátil celý text.

Ve výchozím nastavení se nové řádkové znaky a znaky konce řádku nepovažují za tisknutelné znaky.

Chcete-li, aby řetězce rozpoznaly nové znaky řádku a návraty vozíku jako tisknutelné znaky, spusťte řetězce následujícím způsobem:

šňůra

Změňte kódování

K dispozici je 5 možností kódování pro použití s ​​řetězci:

  • s = 7bitový bajt (používá se pro ASCII, ISO 8859)
  • S = 8bitový bajt
  • b = 16 bit bigendian
  • l = 16 bitů malý

Výchozí hodnota je 7bitový bajt.

Chcete-li změnit kódování, spusťte následující příkaz:

strings -es yourfilename
strings --encoding = s yourfilename

Ve výše uvedeném příkazu jsem určil výchozí "s", což znamená 7bitový bajt. Jednoduše nahraďte písmeno „s“ kódovacím písmenem podle vašeho výběru.

Změňte název popisu binárního souboru

Chování řetězců můžete změnit tak, aby používalo jinou knihovnu deskriptorů binárních souborů, než je ta, která je k dispozici pro váš systém.

Tento přepínač je určen pro odborníky. Pokud máte k dispozici jinou knihovnu, můžete to provést spuštěním následujícího příkazu strings:

st

Možnosti čtení ze souboru

Pokud budete pokaždé používat stejné možnosti, pak nechcete zadávat všechny přepínače při každém spuštění příkazu, protože to nějakou dobu trvá.

Co můžete udělat, je vytvořit textový soubor pomocí nano a určit možnosti v tomto souboru.

Chcete-li to vyzkoušet v terminálu, spusťte následující příkaz:

Do souboru zadejte následující text:

-f -o -n

Uložte soubor stisknutím kláves CTRL a O a ukončete stisknutím kláves CTRL a X.

Chcete-li spustit příkazy řetězců s těmito možnostmi, spusťte následující příkaz:

strings @ strings

Možnosti budou načteny ze souboru stringsopts a před každým řetězcem byste měli vidět název souboru, offset a znak „|“ jako oddělovač.

Získání nápovědy

Pokud si chcete přečíst více o řetězcích, můžete spustit následující příkaz a získat nápovědu.

Alternativně si můžete také přečíst stránku manuálu:

Zjistěte, kterou verzi řetězců používáte

Chcete-li zjistit verzi spuštěných řetězců, spusťte jeden z následujících příkazů:

řetězce -v
řetězce -V
řetězce - verze