Última atualização:
Como ler, alterar e salvar arquivos binários e representações hexadecimais
Como ler, alterar e salvar arquivos binários e representações hexadecimais

Como visualizar e editar arquivos binários usando xxd

Nawarian
Nawarian C

Recentemente eu resolvi aprender um pouco mais sobre engenharia reversa de arquivos na intenção de converter um arquivo do tipo studio3 para cwprj. Eu ainda não cheguei lá, mas já aprendi diferentes truques interessantes e vim compartilhar um essencial contigo!

Neste artigo eu vou te dar uma dica rápida: como converter um arquivo binário em um dump hexadecimal, e como transformar este dump hexadecimal em binário novamente.

Conteúdos do post

Como transformar um arquivo binário em texto hexadecimal usando xxd

Vamos supor um arquivo em formato binário. No meu caso, venho utilizando um arquivo do tipo .studio3, mas você provavelmente já viu diversos exemplos por aí: .bin, .dat, .spr, .save ou o famoso .wad do jogo DOOM.

Para converter este arquivo em hexadecimal, podemos utilizar o programa xxd da seguinte maneira:

$ xxd empty.studio3

00000000: 7369 6c68 6f75 6574 7465 3035 3b00 0000
00000010: 1425 0000 0000 0000 1100 0000 0000 0000
00000020: e815 0000 0000 0000 a0a6 0000 0000 0000
00000030: 8801 0000 0000 0000 3200 0000 0000 0000
00000040: 3600 0000 0000 0000 0400 0000 0000 0000
00000050: 0400 0000 0000 0000 a706 0000 0000 0000
00000060: 5e00 0000 0000 0000 5e00 0000 0000 0000
00000070: 0000 0000 0000 0000 5e00 0000 0000 0000
....

Note que o comando acima irá lançar a visualização hexadecimal do arquivo diretamente na tela. Isto é útil para fazer uma exploração inicial e se familiarizar com o formato do arquivo.

Para facilitar a exploração você pode utilizar o comando less que lhe permite navegar melhor:

$ xxd empty.studio3 | less

Para armazenar o arquivo com o conteúdo hexadecimal você pode oferecer um segundo parâmetro ao comando xxd que recebe o nome do arquivo-destino. O exemplo a seguir converte o arquivo empty.studio3 em hexadecimal e armazena seu conteúdo no arquivo empty.dump.

$ xxd empty.studio3 empty.dump

Como converter um dump em hexadecimal para binário

Visualizar um arquivo binário em formato hexadecimal é utilíssimo! Mas quando buscamos fazer a engenharia reversa de um arquivo, é importante ser capaz de alterar seu conteúdo e visualizar como o software se comporta!

O comando xxd nos permite transformar um dump em hexadecimal de volta para o formato binário!

Para converter o dump para binário novamente basta executar o comando xxd com a opção -r (reverse). Assim:

$ xxd -r empty.dump empty.studio3

Desta forma o arquivo empty.studio3 passa a ter o conteúdo do arquivo empty.dump porém em formato binário.

Como converter um binário em hexadecimal e abrir imediatamente no VIM

Pra encurtar o ciclo de feedback ainda mais, podemos abrir o dump diretamente no VIM da seguinte maneira:

$ xxd empty.studio3 | vim -

A linha acima vai abrir o programa vim já com o conteúdo em hexadecimal do binário empty.studio3.

A partir daqui você pode alterar o arquivo da forma como quiser. E para salvar num arquivo, basta rodar o comando VIM :file nomedoarquivo.extensao.

Arquivo binário aberto como hexadecimal no VIM: xxd empty.studio3 | vim -.
Arquivo binário aberto como hexadecimal no VIM: xxd empty.studio3 | vim -.

Eu escrevi um artigo bacana sobre como começar a trabalhar com o VIM aqui no Codamos. Dá uma passada lá se estiver apanhando deste editor!

Como salvar o arquivo hexadecimal do VIM diretamente para binário

Nós podemos obter o conteúdo do buffer atual do VIM e enviá-lo diretamente à linha de comando para executar o xxd -r.

Suponhamos que nós abrimos o arquivo hexadecimal diretamente no VIM como no exemplo a seguir:

$ xxd empty.studio3 | vim -

Pronto, agora com o VIM aberto e visualizando o conteúdo hexadecimal do arquivo, nós podemos transformar este conteúdo em binário com o seguinte comando VIM:

:%!xxd -r

O seu editor agora irá mostrar uma porção de caracteres estranhos, porque está em modo binário.

Hexadecimal transformado em binário após executar o comando :%!xxd -r no VIM.
Hexadecimal transformado em binário após executar o comando :%!xxd -r no VIM.

Podemos então salvar o arquivo normalmente com o comando VIM:

:file modified.studio3
:w
Alterando o arquivo de saída com o comando :file modified.studio3.
Alterando o arquivo de saída com o comando :file modified.studio3.

Comentários