Skip to content

Como mostrar os caracteres imprimíveis de um arquivo com o comando Strings

3 de abril de 2021

Neste artigo

Você já tentou abrir um arquivo em um editor apenas para descobrir que ele contém conteúdo binário ilegível? O comando “strings” do Linux torna possível visualizar os caracteres legíveis por humanos em qualquer arquivo. O principal objetivo de usar o comando “strings” é descobrir que tipo de arquivo você está olhando, mas você também pode usá-lo para extrair texto. Por exemplo, se você tiver um arquivo de um programa proprietário que salva arquivos em um formato binário estranho, você pode usar “strings” para extrair o texto que colocou no arquivo.

Exemplo de uso do comando Strings

Uma ótima maneira de demonstrar o poder do comando strings é criar um documento usando o LibreOffice Writer. Abra o LibreOffice Writer, insira algum texto e salve-o no formato ODT padrão. Agora abra uma janela de terminal (pressione CTRL, ALT e T ao mesmo tempo) e use o comando cat para exibir o arquivo da seguinte maneira: cat yourfilename.odt | mais

type = “code”> (Substitua “yourfilename.odt” pelo nome do arquivo que você criou) O que você verá é uma parede inteira de texto ilegível.

Pressione a barra de espaço para rolar pelo arquivo. Esporadicamente ao longo do arquivo, você verá parte do texto que inseriu. O comando strings pode ser usado para exibir apenas as partes legíveis por humanos. Em sua forma mais simples, você pode executar o seguinte comando: strings yourfilename.odt | mais

type = “code”> Como antes, uma parede de texto aparecerá, mas apenas o texto que você pode ler como um humano. Se você tiver sorte, poderá ver seu texto. O que você poderá ver que é a chave, no entanto, está na primeira linha: mimetypeapplication / vnd.oasis.opendocument.text

type = “code”> Sabemos que o tipo de arquivo é um arquivo ODT do LibreOffice Writer por dois motivos:

  1. Nós criamos o arquivo
  2. A extensão é .ODT

Arquivo odt de comando de strings do Linux

Imagine que você não criou o arquivo ou encontrou o arquivo em um disco recuperado e o arquivo não tinha uma extensão. A recuperação do Windows costumava recuperar arquivos com nomes como 0001, 0002, 0003, etc. O fato de os arquivos terem sido recuperados é ótimo, mas tentar descobrir quais eram os tipos desses arquivos era um pesadelo. Usando strings, você tem uma chance de descobrir o tipo de arquivo. Saber que um arquivo é um arquivo opendocument.text significa que você pode salvá-lo com a extensão ODT e abri-lo no LibreOffice writer. Caso você não saiba, um arquivo ODT é basicamente um arquivo compactado. Se você renomear yourfilename.odt para yourfilename.zip, poderá abri-lo em uma ferramenta de arquivamento e até mesmo descompactar o arquivo.

Comportamentos Alternativos

Por padrão, o comando strings retorna todas as strings em um arquivo, mas você pode mudar o comportamento para que ele retorne strings de seções de dados carregadas e inicializadas em um arquivo. o que isso significa, exatamente? Ninguém parece saber. Faz sentido supor que você está usando strings para tentar descobrir o tipo de arquivo ou procurar um texto específico em um arquivo. Se, ao executar o comando strings usando o comportamento padrão, você não obtiver a saída que esperava, tente executar um dos seguintes comandos para ver se faz diferença: strings -d yourfilename

type = “code”> ou strings –data yourfilename

A página do manual afirma que o comando acima pode ajudar a reduzir a quantidade de lixo retornado de strings. O comando “strings” pode ser configurado para funcionar ao contrário, de forma que a opção menos d seja o comportamento padrão. Se este for o caso em seu sistema, você pode retornar todos os dados usando o seguinte comando: strings -a yourfilename

type = “código”>

Saída de formatação

Você pode obter o texto na saída para exibir o nome do arquivo ao lado de cada linha de texto. Para fazer isso, execute um dos seguintes comandos: strings -f yourfilename

type = “code”> ou strings –print-file-name yourfilename

A saída agora será parecida com isto: seu nome de arquivo: um pedaço de texto

ou seu nome de arquivo: outro pedaço de texto

Como parte da saída, você também pode exibir o deslocamento de onde o texto aparece em um arquivo. Para fazer isso, execute o seguinte comando: strings -o yourfilename

type = “code”> A saída será parecida com isto: 16573 your17024 text

type = “code”> O deslocamento é, na verdade, o deslocamento octal, embora dependendo de como as strings foram compiladas para o seu sistema, poderia facilmente ser o deslocamento hexadecimal ou decimal também. Uma maneira mais precisa de obter o deslocamento desejado é usar os seguintes comandos: strings -td yourfilename
strings -para o seu nome de arquivo
strings -ésimo nome do arquivo

O menos t significa retornar o deslocamento, e o caractere que segue determina o tipo de deslocamento (ou seja, d = decimal, o = octal, h = hex). Por padrão, o comando strings imprime cada nova string em uma nova linha, mas você pode definir o delimitador de sua escolha. Por exemplo, para usar um símbolo de barra vertical (“|”) como delimitador, execute o seguinte comando: strings -s “|” seu nome de arquivo

type = “código”>

Ajuste o limite da corda

O comando strings, por padrão, procura uma string de quatro caracteres imprimíveis em uma linha. Você pode ajustar o padrão para que ele retorne apenas uma string com oito caracteres imprimíveis ou 12 caracteres imprimíveis. Ajustando esse limite, você pode personalizar a saída para obter o melhor resultado possível. Ao procurar uma string muito longa, você corre o risco de omitir um texto útil, mas, ao torná-lo muito curto, pode terminar com muito mais lixo retornado. Para ajustar o limite da string, execute o seguinte comando: strings -n 8 yourfilename

type = “code”> No exemplo acima, alterei o limite para 8. Você pode substituir 8 pelo número de sua escolha. Você também pode usar o seguinte comando para fazer a mesma coisa: strings –bytes = 8 yourfilename

type = “código”>

Incluir espaço em branco

Por padrão, o comando de strings inclui um espaço em branco, como uma tabulação ou espaço, como um caractere imprimível. Portanto, se você tiver uma string que diz “o gato sentou no tapete”, o comando strings retornará o texto inteiro. Novos caracteres de linha e retornos de carro não são considerados caracteres imprimíveis por padrão. Para fazer com que as strings reconheçam novos caracteres de linha e retornos de carro como caracteres imprimíveis, execute as strings da seguinte maneira: strings -w yourfilename

type = “código”>

Mudar a codificação

Existem cinco opções de codificação disponíveis para uso com strings:

  • s = byte de 7 bits (usado para ASCII, ISO 8859)
  • S = byte de 8 bits
  • b = 16 bits bigendian
  • l = 16 bits littleendian

O padrão é um byte de 7 bits. Para alterar a codificação, execute o seguinte comando: strings -es yourfilename
strings –encoding = s yourfilename

No comando acima, especifiquei o padrão “s”, que significa byte de 7 bits. Substitua o “s” pela letra de codificação de sua escolha.

Alterar o nome da descrição do arquivo binário

Você pode alterar o comportamento das strings para que elas usem uma biblioteca de descritores de arquivos binários diferente da fornecida para o seu sistema. Essa opção é para os especialistas. Se você tiver outra biblioteca para usar, poderá fazê-lo executando o seguinte comando de strings: strings -T bfdname

type = “código”>

Opções de leitura de um arquivo

Se for usar as mesmas opções todas as vezes, não será necessário especificar todas as opções sempre que executar o comando, porque isso leva tempo. O que você pode fazer é criar um arquivo de texto usando o nano e especificar as opções dentro desse arquivo. Para experimentar em um terminal, execute o seguinte comando: nano stringsopts

type = “code”> No arquivo, digite o seguinte texto: -f -o -n 3 -s “|”

type = “code”> Salve o arquivo pressionando CTRL + O e saia pressionando CTRL + X. Para executar os comandos de strings com essas opções, execute o seguinte comando: strings @stringsopts yourfilename

type = “code”> As opções serão lidas no arquivo stringsopts, e você deverá ver o nome do arquivo antes de cada string, com o deslocamento e o “|” como um separador.

Conseguindo ajuda

Se você quiser ler mais sobre strings, execute o seguinte comando para obter ajuda. strings –help

type = “code”> Como alternativa, leia a página de manual: man strings

type = “código”>

Descubra qual versão do Strings você está executando

Para encontrar a versão das strings que você está executando, execute um dos seguintes comandos: strings -v
strings -V
strings –version