Recuperando arquivos corrompidos enviados no modo FTP errado

Recuperando arquivos corrompidos enviados no modo FTP errado

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:

  1. Abra o arquivo danificado como fluxo de bytes.
  2. Encontre todas as ocorrências de 0d seguidas de 0a (ASCII 13, ASCII 10).
  3. Remova todas as ocorrências de 0d seguidas de 0a e armazene os endereços de bytes.
  4. 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!

informação relacionada