Восстановление поврежденных файлов, загруженных в неправильном режиме FTP

Восстановление поврежденных файлов, загруженных в неправильном режиме FTP

Некоторые файлы были загружены в неправильном режиме на FTP (через командную строку). Я полагаю, что у меня есть некоторые двоичные файлы, которые были загружены в режиме TEXT, и теперь я не могу их открыть.

У меня нет доступа к исходным файлам, могу ли я как-то восстановиться? Есть ли какой-то инструмент, который позволит мне получить файлы в правильном формате?

решение1

Недавно мне пришлось столкнуться с той же проблемой. Linux -> Windows, режим ASCII. Я закончил писать программу на Python, которая позволяет восстанавливать переданные ASCII-бинарные файлы. Это байтовый брутфорсер, и вот как он работает:

  1. Открыть поврежденный архив как поток байтов.
  2. Найдите все вхождения 0d, за которыми следует 0a (ASCII 13, ASCII 10).
  3. Удалите все вхождения 0d, за которыми следует 0a, и сохраните адреса байтов.
  4. Пройдитесь по каждому из адресов, чтобы восстановить несколько нулей, если они должны были быть в двоичном файле, восстановите и попробуйте открыть (в моем случае я имел дело с архивами bz2, и алгоритм контрольной суммы CRC проверял целостность несжатых данных и сопоставлял их с данными, жестко закодированными в архиве).

Число возможных допустимых пар байтов 0d 0a в двоичном файле не будет очень большим; вероятность того, что двоичный файл будет иметь допустимую пару 0d 0a, довольно мала. Время, необходимое архиву bz2 для исправления с помощью этого метода bruteforce, составляет менее 10 секунд для файлов размером менее 100 Кб. Я не проверял это с другими типами файлов, но это возможно.

Я не буду приводить здесь код, поскольку этот вопрос не связан с программированием, а это было своего рода конкурсное задание, и я не думаю, что мне будет комфортно выкладывать исходники в открытый доступ, но если вам это нужно, пожалуйста, дайте мне знать.

Всем удачи и счастливого Рождества! :)

решение2

Чтобы знать, можно ли отменить разрушение, необходимо знать задействованные операционные системы. Последствия зависят от того, какую комбинацию операционных систем вы используете на сервере и клиенте.

Самая большая проблема — символ конца строки. Windows использует возврат каретки (значение ASCII 13), за которым следует перевод строки (значение ASCII 10), тогда как Linux использует только перевод строки.

Текстовый режим FTP-передачи переводит это. Двоичный режим — нет. Вот где происходит разрушение.

Если бы перенос происходил из Windows в Linux, было бы невозможно определить, был ли LF изначально LF или комбинацией CR-LF. Поскольку данные теряются, отмена уничтожения практически невозможна.

решение3

Как отметили другие, данные повреждены и потенциально не подлежат восстановлению.

Однако 0x0D 0x0A — не слишком распространённая последовательность байтов в большинстве двоичных форматов файлов [нужна ссылка!], поэтому стоит попробовать заменить их и посмотреть, исправит ли это файл.

Theутилита fixgzделает именно это. Несмотря на свое название, он не имеет ничего специфичного для файлов .gzip и может использоваться с любым файлом.

Удачи!

Связанный контент