在windows中对exe文件进行代码签名时,数字签名存储在哪里?

Where is the digital signature stored when code signing a exe file in windows?

如问题标题所述。但是,我使用的是 "trick",我在运行时使用的可执行文件之后存储额外数据(参见 here)。

签署我的可执行文件似乎会破坏此 'trick' 但是,所以我的问题是签名存储在 exe (PE) 文件中的什么位置?

我正在使用来自微软的signtool来签署我的可执行文件。

已签名的 PE 文件的格式由 Microsoft 记录:

Windows Authenticode Portable Executable Signature Format[此link下载一个WORD文档]

嵌入式数字签名总是附加到可执行文件的末尾,无论您是否附加了自定义数据。附加数据包含在签名的哈希中。

签名的位置和大小保存在PE头的安全目录中。提取该信息是这样的:

  • 找到并读取 PE 文件的 IMAGE_OPTIONAL_HEADER
  • IMAGE_OPTIONAL_HEADER::DataDirectoryIMAGE_DATA_DIRECTORY 结构的数组。通过 IMAGE_DIRECTORY_ENTRY_SECURITY 对其进行索引(未记录但在 winnt.h 中声明)以定位安全目录的条目。
  • IMAGE_DATA_DIRECTORY::VirtualAddress 包含签名的 文件偏移量 (不是 RVA),IMAGE_DATA_DIRECTORY::Size 包含签名的大小。

参考文献: