PE 文件中的 DOS 存根

DOS stub in a PE file

最近,我使用十六进制编辑器分析了一些 Windows 可执行文件。 PE header 从地址 0x100 开始,因此在 PE 映像实际开始之前有 256 字节的数据。前 256 字节:

我知道文件结构如下

所以我知道前 128 个字节是做什么用的。我的问题是:接下来的 128 个字节 (0x80 - 0xFF) 有什么用? (PE 图像从它们之后的 0x100 处开始。)

就是所谓的无证"Rich header"。它是由 Microsoft 链接器插入的弱加密数据块,指示使用了哪些 Microsoft 工具来制作可执行文件。它包括链接的目标文件的版本信息,因此包括有关使用了哪些编译器、汇编器和其他工具的信息。

要解码 Rich header 搜索 Rich 标记,然后获取后面的 32 位加密密钥。然后从 Rich 标记向后工作,将密钥与存储在那里的 32 位值进行异或,直到找到解码的 DanS 标记。在这两个标记之间将是一个 32 位值对的列表。该对的第一个值标识使用的 Microsoft 工具,第二个值指示使用该工具创建了多少链接对象文件。 tool id 值的高 16 位部分表示它是什么类型的工具,低 16 位部分标识工具的构建版本。