Recentemente tive que enfrentar o mesmo problema. Linux - > Windows, modo ASCII. Eu terminei de escrever um programa em Python que permite a recuperação de binários transferidos ASCII. É um bruteforcer byte, e aqui está como funciona:
- Abra o arquivo danificado como fluxo de bytes.
- Encontre todas as ocorrências de 0d seguidas por 0a (ASCII 13, ASCII 10).
- Remova todas as ocorrências de 0d seguidas por 0a e armazene os endereços de bytes.
- Percorra cada um dos endereços para restaurar um número de 0ds no caso de eles estarem lá no binário, restaurar e tentar abrir (no meu caso eu estava lidando com arquivos bz2, e tinha uma verificação de algoritmo de soma de verificação CRC a integridade dos dados não compactados e combiná-los com o codificado no arquivo).
O número de possíveis pares válidos de 0d 0a byte 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 corrigir esse método de força bruta é de menos de 10 segundos para arquivos com menos de 100kb. Eu não verifiquei com outros tipos de arquivos, mas é possível.
Eu não vou colar o código aqui, já que essa questão não é relacionada a programação, e isso era uma espécie de tarefa de competição e não acho que estou confortável em divulgar as fontes, mas se você precisar por favor me avise.
Felicidades e Feliz Natal a todos! :)