
Algunos archivos se cargaron en el modo incorrecto al FTP (a través de la línea de comando). Creo que tengo algunos archivos binarios que se cargaron en modo TEXTO y ahora no puedo abrirlos.
No tengo acceso a los archivos originales, ¿puedo recuperarlos de alguna manera? ¿Existe alguna herramienta que me permita obtener los archivos en su formato correcto?
Respuesta1
Recientemente tuve que enfrentar el mismo problema. Linux -> Windows, modo ASCII. Terminé de escribir un programa en Python que permite la recuperación de archivos binarios transferidos en ASCII. Es un fuerza bruta de bytes y así es como funciona:
- Abra el archivo dañado como flujo de bytes.
- Encuentre todas las apariciones de 0d seguido de 0a (ASCII 13, ASCII 10).
- Elimine todas las apariciones de 0d seguido de 0a y almacene las direcciones de bytes.
- Recorra cada una de las direcciones para restaurar una cantidad de 0d en caso de que se supusiera que estuvieran allí en el binario, restaure e intente abrir (en mi caso estaba tratando con archivos bz2 y tenía un algoritmo de suma de verificación CRC que verificaba la integridad de los datos sin comprimir y compararlos con los codificados en el archivo).
El número de posibles pares de bytes 0d 0a válidos en un binario no será muy alto; la probabilidad de que un binario tenga un par 0d 0a válido es bastante baja. El tiempo que tarda un archivo bz2 en repararse con este método de fuerza bruta es de menos de 10 segundos para archivos de menos de 100 kb. No lo he comprobado con otro tipo de archivos, pero es posible.
No voy a pegar el código aquí, ya que esta pregunta no está relacionada con la programación, y fue una especie de tarea de competencia y no creo que me sienta cómodo haciendo públicas las fuentes, pero si lo necesita, por favor hágamelo saber.
¡Saludos y feliz Navidad a todos! :)
Respuesta2
Saber si es posible deshacer la destrucción requiere conocer los sistemas operativos involucrados. Las consecuencias dependen de la combinación de sistemas operativos que utilice en el servidor y el cliente.
El peor problema es el carácter de final de línea. Windows usa un retorno de carro (valor ASCII 13) seguido de un avance de línea (valor ASCII 10), mientras que Linux usa solo un avance de línea.
La transferencia FTP en modo texto traduce esto. El modo binario no. Ahí es donde entra la destrucción.
Si la transferencia fuera de Windows a Linux, sería imposible determinar si un LF era originalmente un LF o una combinación de CR-LF. A medida que se pierden datos, deshacer la destrucción es casi imposible.
Respuesta3
Como han señalado otros, los datos están dañados y son potencialmente irrecuperables.
Sin embargo, 0x0D 0x0A no es una secuencia de bytes particularmente común en la mayoría de los formatos de archivos binarios [¡cita requerida!], por lo que vale la pena intentar reemplazarlos para ver si eso arregla el archivo.
Elutilidad fixgzhace precisamente eso. A pesar de su nombre, no tiene nada específico para archivos .gzip y puede usarse en cualquier archivo.
¡Buena suerte!