Como usar o comando strings no Linux

Terminal Linux em um laptop
Fatmawati Achmad Zaenuri / Shutterstock.com

Quer ver o texto dentro de um arquivo binário ou de dados? O stringscomando do Linux puxa esses pedaços de texto – chamados de “strings” – para você.

O Linux está cheio de comandos que podem parecer soluções em busca de problemas. O stringscomando definitivamente cai nesse campo. Qual é exatamente o seu propósito? Existe um ponto para um comando que lista as strings imprimíveis de um arquivo binário?

Vamos dar um passo para trás. Arquivos binários – como arquivos de programa – podem conter strings de texto legível por humanos. Mas como você consegue vê-los? Se você usa catou, lessé provável que termine com uma janela de terminal travada. Os programas projetados para trabalhar com arquivos de texto não funcionam bem se caracteres não imprimíveis são alimentados por eles.

A maioria dos bytes em um arquivo binário não é legível por humanos e não pode ser impressa na janela do terminal de uma forma que faça sentido. Não há caracteres ou símbolos padrão para representar valores binários que não correspondem a caracteres alfanuméricos, pontuação ou espaço em branco. Coletivamente, eles são conhecidos como caracteres “imprimíveis”. O resto são caracteres “não imprimíveis”.

Portanto, tentar visualizar ou pesquisar em um arquivo binário ou de dados por strings de texto é um problema. E é aí que stringsentra. Ele extrai cadeias de caracteres imprimíveis de arquivos para que outros comandos possam usar as cadeias sem ter que lidar com caracteres não imprimíveis.

Usando o comando strings

Não há nada de complicado no stringscomando e seu uso básico é muito simples. Fornecemos o nome do arquivo que desejamos stringspesquisar na linha de comando.

Recomendado:  Como ver quanto dinheiro foi enviado para um endereço Bitcoin

Aqui, vamos usar strings em um arquivo binário – um arquivo executável – chamado “jibber”. Nós digitamos strings, um espaço, “jibber” e então pressionamos Enter.

cordas jibber

strings jibber em uma janela de terminal

As strings são extraídas do arquivo e listadas na janela do terminal.

saída de strings em uma janela de terminal

Definir o comprimento mínimo da corda

Por padrão, as strings irão procurar por strings com quatro caracteres ou mais. Para definir um comprimento mínimo mais longo ou mais curto, use a opção -n(comprimento mínimo).

Observe que quanto menor o comprimento mínimo, maiores são as chances de você ver mais lixo.

Alguns valores binários têm o mesmo valor numérico que o valor que representa um caractere imprimível. Se dois desses valores numéricos estiverem lado a lado no arquivo e você especificar um comprimento mínimo de dois, esses bytes serão relatados como se fossem uma string.

Para pedir stringspara usar dois como comprimento mínimo, use o seguinte comando.

strings -n 2 jibber

strings -n 2 jibber em uma janela de terminal

Agora temos strings de duas letras incluídas nos resultados. Observe que os espaços são contados como caracteres imprimíveis.

saída de strings com strings de duas letras em uma janela de terminal

Tubulação de cordas por menos

Por causa do comprimento da saída de strings, vamos canalizá-lo less. Podemos então percorrer o arquivo procurando o texto de seu interesse.

strings jibber | Menos

strings jibber |  menos em uma janela de terminal

A lista é agora apresentada para nós em less, com o topo da lista exibido primeiro.

saída de strings em menos em uma janela de terminal

Usando strings com arquivos de objeto

Normalmente, os arquivos de código-fonte do programa são compilados em arquivos-objeto. Eles são vinculados a arquivos de biblioteca para criar um arquivo executável binário. Temos o arquivo de objeto jibber em mãos, então vamos dar uma olhada dentro desse arquivo. Observe a extensão de arquivo “.o”.

jibber.o | Menos

jibber.o |  menos em uma janela de terminal

O primeiro conjunto de strings é todo empacotado na coluna oito se tiver mais de oito caracteres. Se eles foram quebrados, um caractere “H” está na coluna nove. Você pode reconhecer essas strings como instruções SQL.

Recomendado:  Como criar um atalho do Windows para abrir um perfil específico no Chrome

saída de strings em menos em uma janela de terminal

Rolar pela saída revela que essa formatação não é usada em todo o arquivo.

saída de strings em menos em uma janela de terminal

É interessante ver as diferenças nas strings de texto entre o arquivo-objeto e o executável finalizado.

Pesquisando em áreas específicas no arquivo

Os programas compilados têm diferentes áreas dentro deles que são usadas para armazenar texto. Por padrão, stringspesquisa todo o arquivo em busca de texto. É como se você tivesse usado a -aopção (todos). Para que as strings pesquisem apenas em seções de dados carregadas e inicializadas no arquivo, use a -dopção (dados).

strings -d jibber | Menos

strings -d jibber |  menos em uma janela de terminal

A menos que tenha um bom motivo para isso, você também pode usar a configuração padrão e pesquisar o arquivo inteiro.

Imprimir o deslocamento da coluna

Podemos stringsimprimir o deslocamento do início do arquivo em que cada string está localizada. Para fazer isso, use a -oopção (deslocamento).

strings -o parse_phrases | Menos

strings -o parse_phrases |  Menos

O deslocamento é fornecido em octal .

strings com o deslocamento em octal em uma janela de terminal

Para que o deslocamento seja exibido em uma base numérica diferente, como decimal ou hexadecimal, use a -topção (raiz). A opção raiz deve ser seguida por d( decimal ), x( hexadecimal ) ou o(octal). Usar -t oé o mesmo que usar -o.

strings -td parse_phrases | Menos

strings -td parse_phrases |  menos em uma janela de terminal

Os deslocamentos agora são impressos em decimal.

saída de strings com offsets em decimal em uma janela de terminal

strings -tx parse_phrases | Menos

strings -tx parse_phrases |  menos em uma janela de terminal

Os deslocamentos agora são impressos em hexadecimal.

saída de strings com offsets em hexadecimal em uma janela de terminal

Incluindo Espaço em Branco

stringsconsidera os caracteres de tabulação e espaço como parte das strings que encontra. Outros caracteres de espaço em branco, como novas linhas e retornos de carro, não são tratados como se fizessem parte das strings. A -w opção (espaço em branco) faz com que as strings tratem todos os caracteres de espaço em branco como se fossem partes da string.

strings -w add_data | Menos

strings -w add_data |  menos em uma janela de terminal

Podemos ver a linha em branco na saída, que é o resultado do retorno de carro (invisível) e caracteres de nova linha no final da segunda linha.

Recomendado:  Agora você pode jogar pinball 3D no Windows em quase tudo

saída de strings em uma janela de terminal

Não estamos limitados a arquivos

Podemos usar strings com qualquer coisa que seja, ou possa produzir, um fluxo de bytes.

Com este comando, podemos examinar a memória de acesso aleatório (RAM) de nosso computador.

Precisamos usar sudoporque estamos acessando / dev / mem. Este é um arquivo de dispositivo de caractere que contém uma imagem da memória principal do seu computador.

strings sudo / dev / mem | Menos

strings sudo / dev / mem |  menos em uma janela de terminal

A lista não é todo o conteúdo de sua RAM. São apenas as strings que podem ser extraídas dele.

saída de strings em menos em uma janela de terminal

Pesquisando muitos arquivos ao mesmo tempo

Os curingas podem ser usados ​​para selecionar grupos de arquivos a serem pesquisados. * caractere representa vários caracteres e o  ? caractere representa qualquer caractere único. Você também pode optar por fornecer vários nomes de arquivo na linha de comando.

Vamos usar um caractere curinga e pesquisar todos os arquivos executáveis ​​no diretório / bin. Como a lista conterá resultados de muitos arquivos, usaremos a -fopção (nome do arquivo). Isso imprimirá o nome do arquivo no início de cada linha. Podemos então ver em qual arquivo cada string foi encontrada.

Estamos canalizando os resultados por meio de grep e procurando strings que contenham a palavra “Copyright”.

strings -f / bin / * | grep Copyright

strings -f / bin / * |  grep Copyright em uma janela de terminal

Obtemos uma lista clara das declarações de direitos autorais de cada arquivo no diretório / bin, com o nome do arquivo no início de cada linha.

saída de strings mostrando declarações de direitos autorais em uma janela de terminal

strings Unraveled

Não há mistério para as cordas; é um comando típico do Linux. Ele faz algo muito específico e muito bem.

É mais uma das engrenagens do Linux e realmente ganha vida quando está trabalhando com outros comandos. Quando você vê como ele pode ficar entre os arquivos binários e outras ferramentas semelhantes grep, você começa a apreciar a funcionalidade desse comando ligeiramente obscuro.