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

iszxjhcz  于 2023-08-07  发布在  Windows
关注(0)|答案(2)|浏览(176)

正如问题标题所述。但是,我使用了一个“技巧”,在运行时使用的可执行文件之后存储额外的数据(参见here)。
然而,对我的可执行文件签名似乎打破了这个“把戏”,所以我的问题是,在exe(PE)文件中存储的签名在哪里?
我正在使用微软的signtool来签署我的可执行文件。

b91juud3

b91juud31#

嵌入的数字签名始终附加到可执行文件的末尾,无论是否附加了自定义数据。附加的数据包含在签名的散列中。
签名的位置和大小存储在PE头的安全目录中。提取这些信息是这样的:

  • 找到并读取PE文件的IMAGE_OPTIONAL_HEADER
  • IMAGE_OPTIONAL_HEADER::DataDirectoryIMAGE_DATA_DIRECTORY结构的阵列。索引为IMAGE_DIRECTORY_ENTRY_SECURITY。您也可以使用dbghlp API ImageDirectoryEntryToDataEx()
  • IMAGE_DATA_DIRECTORY::VirtualAddress包含签名的 file offset(不是RVA),IMAGE_DATA_DIRECTORY::Size包含签名的大小。

参考文献:

eyh26e7m

eyh26e7m2#

Microsoft记录了已签名PE文件的格式:
Windows Authenticode Portable Executable Signature Format[此链接下载WORD文档]

相关问题