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?
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?
Odpowiedzi:
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 binarnymSTRESZCZENIE
strings [ - ] [ -a ] [ -o ] [ -t format ] [ -number ] [ -n number ] [--] [file ...]
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
Polecenie od może to zrobić:
od -c *filename*
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 PLIKlub
hexdump -C PLIKjest 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).