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
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.
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.ack grep /bin/grep
e você obterá o resultado. Atualizei minha resposta para evitar confusão.