CAB文件如何成为PE文件?

3
OSR在其博客上发布了一篇与微软有关的问答交流,主题是Windows 10驱动程序签名要求与早期Windows版本的变化。Microsoft项目经理詹姆斯·默里在一份声明中表示:新的驱动程序签名程序表明您必须构建一个CAB文件进行上传签名,并使用EV Cert对该CAB文件进行签名。为什么是CAB文件(而不是像ZIP存档这样的常见文件)?如何构建CAB文件?是否有特定的流程或工具可用?CAB被选择是因为CAB本身是PE文件。这在某种程度上简化了签名过程,因为signtool.exe具有“本地”支持。如果我们选择了ZIP存档(请注意,我们仍然希望向那个方向发展),我们将需要提供单独的签名机制。类似于HLK studio的东西,一个具有签名ZIP或OPCs功能的小工具。这让我很吃惊。我知道很多有关PE/COFF的细节,但从未认为CAB文件适合其中。它似乎也不是关于包含CAB的自解压可执行文件的问题。我不得不在十六进制编辑器中打开一个CAB文件才能看到它,但不知何故,我无法看出该声明在什么意义上是正确的。有人能提供有关CAB文件为什么是PE文件的详细信息吗?
1个回答

5

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

例如,CAB文件结构以字符'M'、'S'、'C'、'F'开头,以识别其为Microsoft Cabinet文件 - 而PE文件结构通常以可执行MS-DOS stub开始。

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

我认为Murray先生知道signtool实用程序可以处理PE文件和CAB文件,并认为这是因为CAB文件是PE文件的特例,但实际上该工具只是原生支持这两种格式。


我想知道如果一个PE文件的前提是以MZZM开头,而CAB文件的前提是MSCF,那么如何创建一个多语言文件。但是你可能在上一段的解释中是正确的。 - undefined
1
@0xC0000022L:我对PE文件定义的理解是,在偏移0x3c处必须有PE\0\0;在偏移0处有一个"DOS Stub"的空间,但不清楚这个空间是否必须是一个有效的MZ风格的DOS可执行文件,以使PE文件符合规范...这也是为什么我在那里加了一个怀疑的may的原因之一! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接