Como edito um arquivo BINÁRIO?

1. Como edito um arquivo BINÁRIO?

Carlos Eduardo
cebaldocchi

(usa Ubuntu)

Enviado em 28/06/2019 - 00:26h

Oi pessoal.

Tenho um arquivo .DAT que desejo editá-lo.
Com o Linux e o comando HEXDUMP eu consegui a seguinte saída:

#hexdump arquivo.dat

0000000 34c6 67ba 0a0d 277e 2b88 d85f 96a4 a1e5
0000010 21c0 6527 bd1e c184 fab8 7d1c a554 4118
0000020 f97b 51e1 3fc3 e159 eb59 1ab7 7804 6cad
0000030 311c 8ed4 fecd 917f 72dc 3658 f7a7 aeac
0000040 7213 3658 f7a7 aeac 7213 3658 f7a7 aeac
*
00000c9


Eu quero alterar esse arquivo dessa forma aí em cima.
Porém quando uso outro editor pra abrir o arquivo:
Testei o VIM, testei o GHEX, por algum motivo o arquivo abre de forma diferente e bem estranha... não abre da mesma forma que pelo HEXDUMP.

PS: quero editar o arquivo! O HEXDUMP não edita.


  


2. Re: Como edito um arquivo BINÁRIO?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/06/2019 - 08:38h

E costumo usar o bvi.


Quanto a diferença de forma, você se refere ao efeito de endianness?

Veja duas saídas diferentes do próprio hexdump, a primeira orientada a palavra de 16 bits (default), e a segunda orientada a bytes (e com os caracteres ASCII correspondentes, se imprimíveis).
$ head -c 16 /bin/bash | hexdump
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010

$ head -c 16 /bin/bash | hexdump -C
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010


A aparente troca de ordem entre os pares de bytes 0x7f e 0x45, 0x4c e 0x46, 0x02 e 0x01, e assim por diante se deve ao fato de que nossos PCs com Intel utilizam representação little-endian para números compostos por mais de um byte, o que quer dizer que o byte menos significativo fica na posição mais baixa de memória, seguido pelo segundo byte menos significativo, e assim sucessivamente até o byte mais significativo, que vem por último, na posição de memória mais alta. Assim, se você tratar o par de bytes 0x7f e 0x45 como compondo um único número de 16 bits, de acordo com a representação nativa do processador, esse número será o número 0x457f.

Num processador diferente, que usasse representação big-endian (bytes mais significativos primeiro e menos significativos por último), o mesmo par de bytes poderia indicar algo diferente. O exemplo seguinte mostra como uma máquina com processador Sparc, que usa big-endian, mostraria a os mesmos dados (o Solaris não tem hexdump nativo, então eu usei o od com a opção -x, que produz saída parecida com a do formato padrão do hexdump). Note que ele mostra 0x7f45, em vez de 0x457f, como nossos PCs fazem.
$ head -c 16 /bin/bash | ssh maquina-com-solaris-sparc od -x
0000000 7f45 4c46 0201 0100 0000 0000 0000 0000
0000020



... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


3. Re: Como edito um arquivo BINÁRIO?

Carlos Eduardo
cebaldocchi

(usa Ubuntu)

Enviado em 28/06/2019 - 15:04h

Boa tarde caro colega.

Muito agradecido pela resposta. Na verdade não sabia que arquivos binários eram tão complexos assim.
Se você puder me dar um Norte sobre o que quero ou pretendo fazer me ajuda.

Tenho um arquivo .DAT formato Windows que quando tento abrir com um bloco de notas por exemplo (ou Leafpad) ele aparece um monte de caracteres estranhos e espaços em branco.

Esse arquivo é de um software do Windows.

Quando coloco esse arquivo dentro do diretório desse software e logo em seguida abro o software; é liberado a licença pra mim aparecendo o nome da minha empresa que vou deixar como exemplo aqui: ALPHA1.

Como eu tenho ao todo 4 arquivos dessa licença para o mesmo software cada uma com um nome diferente: ALPHA1, ALPHA2, ALPHA3 E ALPHA4.
Eu pensei em abrir esses 4 arquivos com algum programa binário e compará-los. Imagino que todos eles são exatamente iguais com exceção da parte referente ao nome.
Eu queria então encontrar a parte referente ao NOME e alterar.

Eu mais ou menos já consegui isso fazendo assim olha.
Rodei o HEXDUMP nos 4 arquivos que tenho e obtive o seguinte:





carlos@hkdesk-carlos:~$ hexdump certidao-pc-escritorio.dat
0000000 34c6 67ba 0a0d 277e 2b88 d85f 96a4 a1e5
0000010 21c0 6527 bd1e c184 fab8 7d1c a554 4118
0000020 f97b 51e1 3fc3 e159 eb59 1ab7 7804 6cad
0000030 311c 8ed4 fecd 917f 72dc 3658 f7a7 aeac
0000040 7213 3658 f7a7 aeac 7213 3658 f7a7 aeac
*
00000c9




carlos@hkdesk-carlos:~$ hexdump certidao-pc-escritorio2.dat
0000000 34c6 67ba 0a0d 277e 2b88 d85f 96a4 a1e5
0000010 3dc0 d6ce c072 ace6 351c cb38 9276 25de
0000020 733d 3bd3 b667 ab02 7212 3658 f7a7 aeac
0000030 7213 3658 f7a7 aeac 7213 3658 f7a7 aeac
*
00000c9




carlos@hkdesk-carlos:~$ hexdump certidao-antiga.dat
0000000 34c6 67ba 0a0d 277e 2b88 d85f 96a4 a1e5
0000010 bfc0 bee5 34dc c9cc 595e 6a57 fd7b b878
0000020 9c87 c0db 83b8 cc08 72a2 3658 f7a7 aeac
0000030 7213 3658 f7a7 aeac 7213 3658 f7a7 aeac
*
00000c9




carlos@hkdesk-carlos:~$ hexdump certidao-nova.dat
0000000 34c6 67ba 0a0d 277e 2b88 d85f 96a4 a1e5
0000010 bfc0 bee5 34dc c9cc 595e 6a77 fd7b b878
0000020 9c87 c0db 83b8 cc08 72a2 3658 f7a7 aeac
0000030 7213 3658 f7a7 aeac 7213 3658 f7a7 aeac
*
00000c9





Se você analisar os arquivos, eles tem diversas semelhanças em comum.
O que eu queria é encontrar a parte dele que altera o NOME que aparece dentro do meu programa.

PS: eu fiz uma tentativa de pegar um desses arquivos e alterar uma única letra/número... na verdade eu alterei apenas um único caractere em uma ÚNICA linha que NÃO SE REPETE em nenhum dos 4 arquivos e o arquivo de licença continuou funcionando e o NOME trocou como eu gostaria, mas ele apareceu uns caracteres esquisitos... Tem como eu achar onde a palavra "ALPHA" está nesses arquivos???








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts