2

我读过 ZIP 文件以以下字节开头:

50 4B 03 04

参考:http ://www.garykessler.net/library/file_sigs.html

问题:是否有特定的字节序列表明 ZIP 文件已受密码保护?

4

3 回答 3

10

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。

自解压档案不是唯一不以50 4B 03 04. 您可以通过这种方式在 zip 文件中“隐藏”任意数据。WinZip 和其他工具在读取以这种方式格式化的 zip 文件时应该没有问题。

如果您50 4B 03 04在文件中找到签名,无论是在文件开头还是其他地方,您都可以查看接下来的几个字节以确定该特定条目是否已加密。通常它看起来像这样:

50 4B 03 04 14 00 01 00 08 00 ... 

前四个字节是条目签名。接下来的两个字节是“需要提取的版本”。在这种情况下,它是 0x0014,即 20。根据 pkware 规范,这意味着需要 pkzip 规范的 2.0 版才能提取条目。(条目使用的最新 zip “功能”由规范的 v2.0 描述)。如果 zip 文件中使用了更高级的功能,您可以在此处找到更高的数字。AES 加密需要 v5.1 规范,因此您应该在该标头中找到 0x0033。(并非所有 zip 工具都尊重这一点)。

接下来的 2 个字节代表通用位标志(规范称其为“位标志”,即使它是一个位字段),在本例中为 0x0001。这设置了位 0,表示条目已加密。

该位标志中的其他位具有意义,也可以设置。例如,第 6 位表示使用了强加密 - AES 或其他一些更强的加密。第 11 位表示该条目对文件名和注释使用 UTF-8 编码。

所有这些信息都可以在PKWare AppNote.txt 规范中找到。

于 2009-09-29T22:08:52.130 回答
4

它是受密码保护的 zip 存档中的基础文件。您可以在存档中包含一系列受密码保护和不受密码保护的文件(例如,自述文件和内容)。

于 2009-09-28T23:40:39.377 回答
1

如果您按照您引用的 URL 中描述 ZIP 文件的链接进行操作,您会发现该链接讨论了指示 ZIP 存档中的文件是否已加密的位。似乎存档中的每个文件都可以独立加密或不加密。

于 2009-09-29T00:12:45.707 回答