Como visualizar e editar arquivos binários usando xxd
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
.
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.
Podemos então salvar o arquivo normalmente com o comando VIM:
:file modified.studio3
:w
Comentários