3

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

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

3 ответа3

4

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

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

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

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

2

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

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

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

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

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

0

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

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

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

Удачи!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .