
Alguns arquivos foram carregados no modo errado para o FTP (via linha de comando). Acredito que tenho alguns arquivos binários que foram carregados no modo TEXT e agora não consigo abri-los.
Não tenho acesso aos arquivos originais. Posso recuperar isso de alguma forma? Existe alguma ferramenta que me permita obter os arquivos no formato correto?
Responder1
Recentemente tive que enfrentar o mesmo problema. Linux -> Windows, modo ASCII. Terminei de escrever um programa em Python que permite a recuperação de binários transferidos em ASCII. É um byte bruteforcer e funciona assim:
- Abra o arquivo danificado como fluxo de bytes.
- Encontre todas as ocorrências de 0d seguidas de 0a (ASCII 13, ASCII 10).
- Remova todas as ocorrências de 0d seguidas de 0a e armazene os endereços de bytes.
- Percorra cada um dos endereços para restaurar um número de 0d's, caso eles deveriam estar lá no binário, restaure e tente abrir (no meu caso, eu estava lidando com arquivos bz2 e tive um algoritmo de soma de verificação CRC para verificar a integridade de os dados descompactados e combine-os com aqueles codificados no arquivo).
O número de possíveis pares de bytes 0d 0a válidos em um binário não será muito alto; a probabilidade de um binário ter um par 0d 0a válido é bastante baixa. O tempo que um arquivo bz2 leva para ser corrigido com este método de força bruta é inferior a 10 segundos para arquivos com menos de 100 KB. Não verifiquei com outros tipos de arquivos, mas é possível.
Não vou colar o código aqui, pois esta questão não está relacionada à programação, e esta foi uma espécie de tarefa de competição e não acho que me sinta confortável em tornar as fontes públicas, mas se você precisar, por favor avise.
Felicidades e Feliz Natal a todos! :)
Responder2
Saber se é possível desfazer a destruição requer conhecer os sistemas operacionais envolvidos. As consequências dependem da combinação de sistemas operacionais que você usa no servidor e no cliente.
O pior problema é o caractere de fim de linha. O Windows usa um retorno de carro (valor ASCII 13) seguido por um avanço de linha (valor ASCII 10), enquanto o Linux usa apenas avanço de linha.
A transferência FTP em modo texto traduz isso. O modo binário não. É aí que entra a destruição.
Se a transferência fosse do Windows para o Linux, seria impossível determinar se um LF era originalmente um LF ou uma combinação de CR-LF. À medida que os dados são perdidos, desfazer a destruição é quase impossível.
Responder3
Conforme observado por outros, os dados estão corrompidos e potencialmente irrecuperáveis.
No entanto, 0x0D 0x0A não é uma sequência de bytes particularmente comum na maioria dos formatos de arquivo binário [carece de fontes!], então vale a pena tentar substituí-los para ver se isso corrige o arquivo.
Outilitário fixgzfaz exatamente isso. Apesar do nome, não possui nada específico para arquivos .gzip e pode ser usado em qualquer arquivo.
Boa sorte!