1

После головоломки в головоломках.SE, который включал скрытый файл, добавленный к gif, у меня есть вопрос относительно добавленных файлов .rar.

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

Я могу создать такой файл, как это:

$ cat myimg.jpg myhidden.rar > myimg.jpg

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

Что меня удивило, так это то, что я действительно могу открыть скрытый файл! Это:

$ sudo apt-get install unrar
$ unrar e myimg.jpg

и извлечет файлы из содержимого myhidden.rar

И мой вопрос: как это возможно? Моя первая мысль по этому поводу состояла в том, что когда я пытаюсь открыть свой файл, заголовок .rar не находится вверху (вместо этого странный формат, который rar ... parser не должен распознавать), но каким-то образом утилита управляет найти фактический файл rar и открыть его. Я заметил, что это работает как в Ubuntu, так и в Windows с WinRAR.

Что мне не хватает? Это работает и с другими форматами? (конкретно: .zip, .7z, .tar.gz).

1 ответ1

2

Это также работает с .zip

По сути, начало «ZIP-файла» - это известный заголовок (который начинается с "PK").

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

Например, Info-Zip содержит исполняемые файлы с именем «unzipsfx.exe». Существуют различные версии файла (например, версия 5.12 для DOS, версия 5.12 для OS/2, версия 5.12 для Win32). Вы можете создать «самораспаковывающийся zip-файл», который представляет собой исполняемый файл, который может извлекать сам, создав новый файл, который начинается с версии этого «unzipsfx.exe», а затем добавив ZIP-файл в конец этого Поэтому, если бы я добавил вариант OS/2 (с помощью « copy/b unzipsfx.exe+myfile.zip myfile.exe »), я мог бы легко извлечь его с помощью OS/2. Хотя я не мог запустить файл (для эффективного извлечения сжатых данных) с компьютера под управлением MS-DOS (поскольку MS-DOS не запускает программное обеспечение OS/2), я все же мог использовать PKUNZIP для MS-DOS.

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

Отредактируйте, чтобы добавить это разъяснение поведения unrar в примере сценария: unrar не обрабатывает JPG и игнорирует JPG, потому что он полностью понимает структуру файла JPG. Он просто игнорирует неинтересные байты (которые являются файлами JPG), пока не найдет то, что хочет: байты, которые начинают выглядеть как архив "RAR". Большинство файлов .rar имеют архив RAR, начинающийся с первого байта, но это не является абсолютным требованием для архива RAR. Поскольку официальное программное обеспечение RAR поддерживает создание самораспаковывающихся файлов (для различных операционных систем), я уверен, что RAR также поддерживает возможности, аналогичные способам обработки файлов ZIP.

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