Eu tenho um monte de binários e sei que dentro desses binários há strings que quero encontrar.

Eu quero fazer um:

grep -lir "the string I am looking for" 

e obter uma lista de todos os binários dentro de um diretório específico que contém essa string, mas grep -lir aparentemente não está funcionando com esses arquivos.

Existe um comando que pode fazer esse tipo de pesquisa no terminal?

Resposta

Com GNU grep , você pode usar a opção -a para fazê-lo tratar arquivos binários como arquivos de texto:

grep -ali -- string file 

Se a sua versão grep não for compatível com -a, você pode usar ack em vez disso. Com ack 1.x, você precisa incluir a opção -a, com ack 2.x, você não faz isso, pois ao pesquisar inclui arquivo não-texto por padrão (apenas ignorado não- arquivo de texto quando você não especificou nenhum arquivo).

Comentários

  • Estou interpretando mal ack ' s autodescrição? (no manual) " ack 2.x pesquisará em todos os arquivos regulares não binários que não sejam explicitamente ignorado [por blá, blá] " Portanto, parece que o ack 2.x ainda deve parar de ler um arquivo mais cedo se o conteúdo parecer binário.
  • @PeterCordes: Esses ' s ocorreram quando nenhum arquivo foi selecionado. Tente ack grep /bin/grep e você obterá o resultado. Atualizei minha resposta para evitar confusão.
  • Tente usar o comando strings para obter as strings de seu binário.

Resposta

O comando strings irá extr ative todos os dados ascii de um arquivo, se você grep sua saída, você pode pesquisar seus dados:

strings <filename> | grep "search text" 

Comentários

  • Essa deve ser a resposta aceita. Este binário é adequado para esta tarefa.
  • @xeon: Ele ' nem sempre é adequado para uso strings , leia aqui para mais detalhes.
  • Já que o objetivo é determinar quais binários contêm a string, strings -f seria mais apropriado.
  • Esta é uma resposta melhor.
  • a melhor resposta. muito obrigado

Resposta

Sua pergunta é sobre encontrar arquivos binários que contenham um padrão (e nós já muito boas respostas!). Complementarmente, podemos gostar de obter as ocorrências.

Eu costumo usar

grep -aPo ".{0,20}pattern.{0,20}" binfile 

para obter um contexto circundante de 20 caracteres.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *