代码在Windows中签署exe文件时存储的数字签名在哪里?

时间:2017-12-05 04:32:44

标签: windows winapi code-signing portable-executable

如问题标题所述。但是,我正在使用“技巧”,我将在运行时使用的可执行文件之后存储额外数据(请参阅here)。

签署我的可执行文件似乎打破了这个'技巧',所以我的问题是签名存储在exe(PE)文件中的位置?

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

2 个答案:

答案 0 :(得分:6)

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

Windows Authenticode Portable Executable Signature Format

答案 1 :(得分:6)

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

签名的位置和大小存储在PE头的安全目录中。提取该信息的方式如下:

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

参考文献: