Я читал, что ZIP-файлы начинаются со следующих байтов:
50 4B 03 04
Ссылка: http://www.garykessler.net/library/file_sigs.html
Вопрос: Существует ли определенная последовательность байтов, указывающая на то, что ZIP-файл защищен паролем?
Я читал, что ZIP-файлы начинаются со следующих байтов:
50 4B 03 04
Ссылка: http://www.garykessler.net/library/file_sigs.html
Вопрос: Существует ли определенная последовательность байтов, указывающая на то, что ZIP-файл защищен паролем?
Неправда, что ZIP-файлы должны начинаться с
50 4B 03 04
Записи в zip-файлах начинаются с 50 4B 03 04... ..и часто чистые zip-файлы начинаются с zip-записи как первой вещи в файле. Но нет необходимости, чтобы zip-файлы начинались с этих байтов. Все файлы, начинающиеся с этих байтов, вероятно являются zip-файлами, но не все zip-файлы начинаются с этих байтов.
Например, вы можете создать самораспаковывающийся архив, представляющий собой PE-COFF-файл, обычный EXE-файл, в котором на самом деле есть подпись для файла, а именно 4D 5A .... Затем, позже в exe-файле, вы можете хранить zip-записи, начинающиеся с 50 4B 03 04.... Файл является как .exe, так и .zip.
Самораспаковывающийся архив — не единственный класс zip-файлов, который не начинается с 50 4B 03 04. Таким образом вы можете «скрыть» произвольные данные в zip-файле. WinZip и другие инструменты не должны иметь проблем с чтением zip-файла, отформатированного таким образом.
Если вы найдете подпись 50 4B 03 04 в файле, либо в начале файла, либо где-то еще, вы можете просмотреть следующие несколько байтов, чтобы определить, зашифрована ли эта конкретная запись. Обычно это выглядит примерно так:
50 4B 03 04 14 00 01 00 08 00 ...
Первые четыре байта являются входной подписью. Следующие два байта — это «версия, необходимая для извлечения». В данном случае это 0x0014, что равно 20. Согласно спецификации pkware, это означает, что для извлечения записи требуется версия 2.0 спецификации pkzip. (Последняя «функция» zip, используемая записью, описана в версии 2.0 спецификации). Вы можете найти там более высокие числа, если в zip-файле используются более продвинутые функции. Для шифрования AES требуется версия 5.1 спецификации, поэтому в этом заголовке вы должны найти 0x0033. (Не все zip-инструменты учитывают это).
Следующие 2 байта представляют битовый флаг общего назначения (в спецификации он называется «битовым флагом», хотя это битовое поле), в данном случае 0x0001. У него установлен бит 0, что указывает на то, что запись зашифрована.
Другие биты в этом битовом флаге имеют значение и также могут быть установлены. Например, бит 6 указывает на то, что использовалось сильное шифрование — либо AES, либо другое более сильное шифрование. Бит 11 говорит, что запись использует кодировку UTF-8 для имени файла и комментария.
Вся эта информация доступна в спецификации PKWare AppNote.txt.
Это базовые файлы в zip-архиве, защищенные паролем. Вы можете иметь ряд защищенных паролем и незащищенных паролем файлов в архиве (например, файл readme, а затем его содержимое).
Если вы перейдете по ссылкам, описывающим ZIP-файлы, в URL-адресе, на который вы ссылаетесь, вы обнаружите, что вот этот обсуждает бит, который указывает, зашифрован ли файл в ZIP-архиве или нет. Кажется, что каждый файл в архиве может быть независимо зашифрован или нет.