é possível inverter o xxd para obter o arquivo original do arquivo binário


2

eu tenho usado xxd para criar uma representação hexa de um arquivo (qualquer arquivo como .jpg, .docx, .zip etc), assim, ..

$ xxd -p original_file.zip > hexa_format.txt

e reverter

$ xxd -r -p hexa_format.txt > original_file.zip

Se alguém achar que esse não é o jeito certo, por favor corrija-me. de qualquer forma esta não é a minha pergunta. Agora eu tenho que convertê-los em binário em vez de hexa. então o comando é assim, se estiver correto.

$ xxd -p -b original_file.zip > binary_format.txt

minha pergunta é ,
como eu reverter de volta para o arquivo original do arquivo binário (binary_format.txt) criado a partir do comando acima. o man page do xxd diz que não pode ser feito (na última linha).

-b | -bits
              Switch to bits (binary digits) dump, rather than hexdump.   This
              option  writes octets as eight digits "1"s and "0"s instead of a
              normal hexadecimal dump. Each line is preceded by a line  number
              in  hexadecimal and followed by an ascii (or ebcdic) representa‐
              tion. The command line switches -r, -p, -i do not work with this
              mode.

se isso não puder ser feito, existe algum outro comando que possa fazê-lo. como canalizar vários comamnds assim.


xxd não produz arquivos binários. Produz representações textuais de arquivos. Por favor, leia a página do manual. O formato binário mencionado acima é apenas os bytes do arquivo escritos em 1 e 0.
Allen

Respostas:


0

Você terá que escrever seu próprio binário para a função hexadecimal ...

cut -f2-8 -d' ' infile | tr -d '\n' | tr ' ' '\n' | while read l; 
do 
  echo -n    $(bin_to_hex($l)) >> outfile
  (( ++n )) 
  (( n % 60 == 0)) && echo  "" >> outfile 
done

Isso deve exibir o mesmo formato -p que pode então ser executado através -r. Se você ler a página do manual para xxd você vai ler que não há -r para -b. Diz isso no trecho que você incluiu na sua pergunta.


Devo colocar essas linhas dentro de um arquivo e depois executá-lo como um .sh..?
arvindh

Isso não recuperará o texto exato. Basta adicionar enter em cada 60º símbolo!
Romeo Ninov

Você pode colocá-lo em um arquivo ou na linha de comando. Isso produzirá o mesmo formato que -p: 60 valores hexadecimais por linha.
Allen

Eu vejo, então você reescreve o codificador
Romeo Ninov

Terminal diz bash: substituição de comando: linha 18: erro de sintaxe perto de token inesperado $l' bash: command substitution: line 18: bin_to_hex ($ l)) '
arvindh

0

Você altera a estrutura do arquivo, não é fácil fazer isso. Talvez algo assim possa ajudar (mas você perderá personagens de nova linha:

awk '{printf $8}' binary_format.txt >out_file

calhas terminais de volta isso: awk: run time error: not enough arguments passed to printf("...%&'") FILENAME="bin_jpg.txt" FNR=59 NR=59. Meu uso é mais ou menos como recuperar o arquivo original,
arvindh

tente executar desta forma: awk '{printf "% s" $ 8}' binary_format.txt & gt; out_file
Romeo Ninov

agora o erro é awk: run time error: not enough arguments passed to printf("%s......") FILENAME="bin_jpg.txt" FNR=1 NR=1.
arvindh

'{printf "% s", $ 8} "E atualize sua versão do awk, parece que você é muito velho
Romeo Ninov

Por que você estaria interessado apenas no oitavo campo?
Allen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.