Strings que não geram texto encontrado usando grep

Strings que não geram texto encontrado usando grep

Estou procurando determinadas strings em arquivos executáveis ​​(Windows).

Primeiro comecei com

grep -a string file

já que trata arquivos binários como arquivos de texto. O problema é que não há uma saída organizada, as quebras de linha acontecem por acaso (quando os bytes corretos estão em ordem) etc.pp.

Então pensei em usar strings:

strings file | grep -i string

Para minha surpresa, 'strings' não encontra strings que consegui encontrar usando 'grep -a'. No entanto, 'strings' é bom porque exibe cada item de tudo o que encontra em uma nova linha.

Como faço para obter o melhor dos dois mundos? Significa que quero realmente encontrar tudo e também obter resultados sensatos do que foi encontrado.

Responder1

Questrings não encontra os mesmos padrões que sua string provavelmente é causado pela stringslocalização de padrões com pelo menos 4 caractereseseguido por um caractere não imprimível. De man stringspara GNU strings:

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.

Além disso, stringspor padrão, verifica apenas seções inicializadas e carregadas de arquivos de objeto, o que pode reduzir ainda mais o número de linhas de saída.

Você pode tentar as opções -ae -npara alterar esse comportamento:

strings -n 1 -a file | grep -i string

Isso deve lhe render mais cordas e provavelmente tudo o que você espera.

Diferença na saída do meu pythonexecutável:

$ strings $(which python) | wc
  31923   68075  474068
$ strings -n 1 $(which python) | wc
 501231  531837 1541204
$ strings -n 1 -a $(which python) | wc
 501398  531995 1541762

Responder2

Por que não:

grep -a string file | strings

stringsimprime as sequências de caracteres imprimíveis com pelo menos 4 caracteres. Portanto, se você grepprecisar de algo menor que 4 caracteres, o processamento via stringsprimeiro fará com que ele seja perdido. Use strings -n 1para definir o comprimento mínimo como 1.

informação relacionada