Недавно мне пришлось столкнуться с той же проблемой. Linux -> Windows, режим ASCII. Я закончил писать программу на Python, которая позволяет восстанавливать переданные двоичные файлы ASCII. Это байтовый брутфорсер, и вот как это работает:
- Откройте поврежденный архив как поток байтов.
- Найти все вхождения 0d, за которым следует 0a (ASCII 13, ASCII 10).
- Удалите все вхождения 0d, а затем 0a и сохраните адреса байтов.
- Переберите каждый из адресов, чтобы восстановить число 0d, если они должны были быть в двоичном файле, восстановите и попробуйте открыть (в моем случае я имел дело с архивами bz2, и алгоритм контрольной суммы CRC проверял целостность несжатые данные и сопоставить их с жестко закодированными в архив).
Число возможных действительных пар байтов 0d 0a в двоичном файле не будет очень большим; вероятность того, что двоичный файл имеет действительную пару 0d 0a, довольно мала. Время восстановления bz2-архива с помощью этого метода bruteforce составляет менее 10 секунд для файлов размером менее 100 КБ. Я не проверял это с другими типами файлов, но это возможно.
Я не собираюсь вставлять код здесь, так как этот вопрос не имеет отношения к программированию, и это было своего рода соревновательной задачей, и я не думаю, что мне удобно показывать исходники публично, но если вам это нужно, пожалуйста, дай мне знать.
Ура и счастливого Рождества всем! :)