Como os utilitários .rar conseguem descompactar um arquivo compactado oculto (que na verdade é um conteúdo binário anexado a outro arquivo)?

1

Depois de um quebra-cabeça em quebra-cabeças.SE que envolveu um arquivo oculto anexado a um gif, tenho uma pergunta sobre os arquivos .rar anexados.

Por esta pergunta Eu entendo por que posso adicionar um conteúdo de arquivo .rar no final de qualquer formato de imagem conhecido, contanto que esse formato declare a duração de seus dados de alguma forma que qualquer leitor compatível carregaria apenas a quantidade necessária de bytes e não leria até o final do arquivo.

Eu posso gerar esse arquivo assim:

$ cat myimg.jpg myhidden.rar > myimg.jpg

O que funciona para qualquer um dos formatos mencionados e será aberto como uma imagem normal no visualizador de imagens.

O que me surpreendeu é que eu posso realmente abrir o arquivo oculto! Isto é:

$ sudo apt-get install unrar
$ unrar e myimg.jpg

e irá extrair os arquivos dentro do conteúdo de myhidden.rar

E minha pergunta é: como isso é possível? Meu primeiro pensamento no assunto seria que quando eu tento abrir meu arquivo, o cabeçalho .rar não é encontrado no topo (em vez disso, um formato estranho o rar ... parser, não deve reconhecer), mas de alguma forma o utilitário gerencia para encontrar o arquivo rar real e abri-lo. Eu notei que isso funciona tanto no Ubuntu quanto no Windows com o WinRAR.

O que estou perdendo? Isso funciona com outros formatos também? (concretamente: .zip, .7z, .tar.gz).

    
por Luis Masuelli 26.05.2016 / 22:56

1 resposta

2

Isso também funciona com o .zip

Basicamente, o início de um "arquivo ZIP" é um cabeçalho conhecido (que começa com "PK").

Um programa que sabe como lidar com arquivos ZIP pode procurar em qualquer arquivo por um cabeçalho conhecido e então tratar esse cabeçalho e todos os bytes posteriores como um arquivo ZIP.

Por exemplo, o Info-Zip contém arquivos executáveis chamados "unzipsfx.exe". Existem várias versões do arquivo (por exemplo, versão 5.12 para DOS, versão 5.12 para OS / 2, versão 5.12 para Win32). Você pode criar um "arquivo zip auto-extraível", que é um arquivo executável que é capaz de extrair a si mesmo, criando um novo arquivo que inicia com uma versão desse "unzipsfx.exe" e adicionando um arquivo ZIP ao final disso. Portanto, se eu adicionasse a variação do OS / 2 (com " copy/b unzipsfx.exe+myfile.zip myfile.exe "), poderia facilmente extraí-lo com o OS / 2. Embora eu não pudesse executar o arquivo (para extrair efetivamente os dados compactados) de um computador que executa o MS-DOS (porque o MS-DOS não executa o software OS / 2), ainda posso usar o PKUNZIP para MS-DOS.

Esses arquivos de extração automática são comuns o suficiente para que qualquer software descompactador popular seja capaz de lidar com essas variações dos arquivos. Eles simplesmente procuram pelo cabeçalho conhecido. Lembro-me distintamente de algum software (esqueço de que software) que se queixaria, mostrando uma mensagem de aviso, sobre os bytes extras no início do arquivo. No entanto, ainda funcionaria bem.

Edite, para adicionar esta clarificação do comportamento do unrar no cenário de amostra: o unrar não está processando o JPG e ignorando o JPG porque compreende completamente a estrutura de como é um arquivo JPG. É simplesmente ignorar os bytes desinteressantes (que por acaso são um arquivo JPG) até encontrar o que deseja: bytes que começam a se parecer com um arquivo "RAR". A maioria dos arquivos .rar tem um arquivo RAR que começa no primeiro byte, mas isso não é um requisito absoluto de um arquivo RAR. Como o software RAR oficial suporta a criação de arquivos de extração automática (para vários sistemas operacionais), tenho certeza de que o RAR também oferece suporte a recursos similares a como os arquivos ZIP são manipulados.

    
por 26.05.2016 / 23:16