Polecenie Linuxa, aby znaleźć ciągi znaków w pliku binarnym lub innym niż ascii

39

Czy istnieje komenda linux do wyodrębnienia wszystkich ciągów ascii z pliku wykonywalnego lub innego pliku binarnego? Chyba mógłbym to zrobić grepem, ale pamiętam gdzieś, że takie polecenie istnieje?

Ethan Heilman
źródło

Odpowiedzi:

72

Polecenie, którego szukasz, to strings

Jego nazwa jest dość oczywista, pobiera dowolny drukowalny ciąg z danego pliku.

man strings daje:

STRINGS (1)


Ciągi NAME - znajdź ciągi do wydrukowania w obiekcie lub innym pliku binarnym

STRESZCZENIE
strings [ - ] [ -a ] [ -o ] [ -t format ] [ -number ] [ -n number ] [--] [file ...]

drAlberT
źródło
10

Polecenie strings jest sposobem na rozwiązanie tego rodzaju problemów. Czasami musisz także wyrzucić go z grep .

Na przykład:

strings somebinaryfile | grep textuwanttofind
luis.espinal
źródło
4

Polecenie istnieje i nazywa się ... ciągami!

znak
źródło
3

Polecenie od może to zrobić:

od -c *filename*
Kyle Brandt
źródło
3
tak, to wyodrębnia znaki ASCII, ale tak naprawdę nie są to same łańcuchy. Myślę, że „ciągi” są bardziej przydatne w większości przypadków.
user5336,
Tak, nie wiedziałem o tym poleceniu, ale teraz wiem! AlberT dostał mój „+1” :-)
Kyle Brandt,
2

Problem z używaniem łańcuchów polega na tym, że nie widzisz otaczających niedrukowalnych elementów i musisz być ostrożny z minimalną długością łańcucha.

Problem z używaniem

od -c PLIK
lub
hexdump -C PLIK
jest to, że sekwencja może być trudna do znalezienia, jeśli otacza linię.

Coś, co bardzo mi się podoba, to ZTreeWin działający w systemie WINE w systemie Linux - możesz z tym wiele zrobić, ale wyszukiwanie w dowolnym pliku lub edytowanie plików binarnych może być szczególnie przydatne.

Niesamowity pakiet ytree jest dostępny dla wielu wariantów Linuksa i Uniksa i ma dobry widok Hex zrzutu dowolnego pliku, ale nie ma wyszukiwania, które ma ZTreeWin (i jego 16-bitowy poprzednik, XTree).

qeff
źródło