Como reverter o conteúdo do arquivo binário

5

Eu estava resolvendo um desafio em que encontrei um arquivo de dados sem extensão. O comando file mostra que é um arquivo de dados (application / octet-stream) . O comando hd mostra GNP. na última linha. Então, se eu inverter este arquivo, então eu vou pegar o arquivo de formato .PNG , eu procurei em todos os lugares, mas não encontrei solução como reverse conteúdo do arquivo binário. Por favor, sugira qualquer método.

    
por Debian_yadav 11.01.2018 / 18:44

5 respostas

4

Com xxd (de vim ) e tac (de GNU coreutils, também tail -r em alguns sistemas):

< file.gnp xxd -p -c1 | tac | xxd -p -r > file.png
    
por 11.01.2018 / 22:41
4

com perl :

<file.gnp perl -0777 -F -ape '$_=reverse@F' > file.png
  • -a : awk modo onde os registros são divididos em campos
  • -0777 -p : modo slurp, arquivo lido em um registro $_ , registro modificado impresso posteriormente.
  • -F : separador de campo vazio, portanto, os campos são bytes individuais
  • $_=reverse@F : registro de saída é a concatenação da lista de campos ( @F ) revertidos.
por 11.01.2018 / 22:46
2

Aqui está uma maneira de reverter um arquivo binário usando ksh93 . Deixei o código "solto" para facilitar a compreensão.

#!/bin/ksh93

typeset -b byte

redirect 3< image.gpj || exit 1

eof=$(3<#((EOF)))

read -r -u 3 -N 1 byte
printf "%B" byte > image.jpg
3<#((CUR - 1))

while (( $(3<#) > 0 ))
do
    read -r -u 3 -N 1 byte
    printf "%B" byte >> image.jpg
    3<#((CUR - 2))
done

read -r -u 3 -N 1 byte
printf "%B" byte >> image.jpg

redirect 3<&- || echo 'cannot close FD 3'

exit 0
    
por 12.01.2018 / 15:15
2

Em zsh (o único shell que pode lidar internamente com dados binários (a menos que você queira considerar a abordagem de codificação base64 do ksh93 )):

zmodload zsh/mapfile
(LC_ALL=C; printf %s ${(s::Oa)mapfile[file.gnp]} > file.png)
  • LC_ALL=C : caracteres são bytes
  • $mapfile[file.gnp] : conteúdo de file.gnp file
  • s:: : divide a string em seus constituintes de bytes
  • Oa : inverter O rder em a rray subscrito essa matriz
por 11.01.2018 / 22:36
0

Eu tentei o seguinte:

tac -rs '.' input.gnp > output.png

A idéia é forçar 'tac' usando qualquer caractere como separador. Eu tentei isso em um arquivo binário e parecia funcionar, mas qualquer confirmação seria apreciada.

A principal vantagem é que ele não carrega arquivos na memória.

    
por 16.04.2018 / 18:00