CAB 文件如何成为 PE 文件?

0xC*_*22L 3 cab code-signing portable-executable

OSR在其博客上发布了与 Microsoft 人员的问答环节。主题是与早期 Windows 版本相比,Windows 10 驱动程序签名要求的变化。

\n\n

微软项目经理 James Murray 在一份声明中表示(粗体部分):

\n\n
\n

Peter:新的驱动程序签名过程表明您必须构建一个 CAB 文件来上传进行签名,然后使用您的 EV 证书对该 CAB 文件进行签名。为什么是 CAB 文件(而不是 ZIP\n 存档等常见文件)?如何构建 CAB 文件?是否有特定的流程或工具可供使用?

\n\n

James: 选择CAB是因为CAB本身就是PE文件。这在一定程度上简化了签名过程,因为signtool.exe具有\xe2\x80\x9cnative\xe2\x80\x9d支持。如果\n我们选择了ZIP存档(注意,我们\xe2\x80\x99d仍然喜欢移动\n方向),我们将需要提供\n单独的签名机制。类似于 HLK studio,一个具有签名 ZIP 或 OPC 功能的小工具。

\n
\n\n

这让我很惊讶。我知道很多 PE/COFF 详细信息,但从来没有印象过 CAB 文件适合其中。它似乎也与包含 CAB 的自解压可执行文件无关。

\n\n

我必须在十六进制编辑器中打开一个 CAB 文件才能亲自查看它,但不知何故,我无法看出该声明在何种意义上是正确的。

\n\n

谁能提供有关 CAB 文件如何/为什么PE 文件的详细信息?

\n

psm*_*ars 5

一般来说,CAB 文件不是 PE 文件 - 它们具有完全不同的结构。

例如,CAB 文件结构以字符“M”、“S”、“C”、“F”开头,以将其标识为 Microsoft Cabinet 文件 - 而PE 文件的结构通常以可执行的 MS-DOS 存根开头。

可以创建同时具有这两种格式的文件:两种格式都允许一定程度的灵活性,包括保留区域,这可能允许同时满足两种格式的约束。但一般来说,cabinet 文件不是有效的 PE 文件。

我希望 Murray 先生知道该signtool实用程序可以处理 PE 文件和 CAB 文件,并认为这是因为 CAB 文件是 PE 文件的特殊情况,但实际上该工具仅对这两种格式具有本机支持。