Strings não produzem texto encontrado usando grep

1

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

Primeiro comecei com

grep -a string file

como isso trata arquivos binários como arquivos de texto. O problema lá é que não há saída pura, quebras de linha acontecem por acaso (quando os bytes certos aparecem em ordem), etc.pp.

Então, pensei em usar strings:

strings file | grep -i string

Para minha surpresa, 'strings' não encontra strings que eu consegui encontrar usando 'grep -a'. No entanto, 'strings' é legal na maneira como ele exibe cada item do que encontrar em uma nova linha.

Como obtenho o melhor dos dois mundos? Significa que quero realmente encontrar tudo e também obter uma saída sensata do que foi encontrado.

    
por Marki 06.10.2014 / 18:18

2 respostas

3

Que strings não encontre os mesmos padrões que sua sequência provavelmente é causada por strings , que procura padrões com pelo menos quatro caracteres e seguidos por um caractere não imprimível. De man strings para 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, strings b y padrão verifica apenas seções inicializadas e carregadas de arquivos de objetos, o que pode reduzir ainda mais o número de saídas de linhas.

Você pode tentar as opções -a e -n para alterar esse comportamento:

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

Isso deve gerar mais strings e provavelmente tudo o que você espera.

Diferença na saída no meu python exececutable:

$ 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
    
por 06.10.2014 / 19:05
0

Por que não:

grep -a string file | strings

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

    
por 06.10.2014 / 18:28

Tags