Comando equivalente para grep arquivos binários


24

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

Eu quero fazer um:

grep -lir "the string I am looking for"

e obtenha uma lista de todos os binários dentro de um diretório específico que contém essa sequência, mas grep -liraparentemente não está funcionando com esses arquivos.

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

Respostas:


24

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

grep -ali -- string file

Se a sua versão grep não suportar -a, você poderá usar o ack . Com o ack 1.x, você precisa incluir a -aopção, com o ack 2.x, não é necessário, pois ao pesquisar incluir arquivo não-texto por padrão (somente arquivo não-texto ignorado quando você não especificou nenhum arquivo).


Estou interpretando mal acka auto-descrição? (no manual) "o ack 2.x pesquisará todos os arquivos regulares e não binários que não são explicitamente ignorados [por blah blah]" Portanto, parece que o ack 2.x ainda deve parar de ler um arquivo mais cedo se o conteúdo parecer binário.
Peter Cordes

1
@ PeterCordes: Isso ocorreu quando nenhum arquivo foi selecionado. Tente ack grep /bin/grepe você obterá o resultado. Atualizei minha resposta para evitar confusões.
cuonglm

1
Tente usar o comando strings para obter as strings do seu binário.
Uwe Burger

23

O comando stringsextrairá todos os dados ascii de um arquivo; se você grepproduzir o resultado, poderá procurar seus dados:

strings <filename> | grep "search text"

Essa deve ser a resposta aceita. Esse binário é adequado para esta tarefa.
Vladislavs Dovgalecs

5
@xeon: nem sempre é bom de usar strings, leia aqui para mais detalhes.
cuonglm

1
Como o objetivo é determinar quais binários contêm a sequência, strings -fseria mais apropriado.
21415 jamesdlin

Esta é uma resposta melhor.
Xofo

9

Sua pergunta é sobre encontrar arquivos binários que contêm um padrão (e já temos respostas muito boas!). Complementar, podemos gostar das ocorrências.

Eu costumo usar

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

para obter um contexto envolvente de 20 caracteres.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.