正如问题标题所述。但是,我使用了一个“技巧”,在运行时使用的可执行文件之后存储额外的数据(参见here)。然而,对我的可执行文件签名似乎打破了这个“把戏”,所以我的问题是,在exe(PE)文件中存储的签名在哪里?我正在使用微软的signtool来签署我的可执行文件。
signtool
b91juud31#
嵌入的数字签名始终附加到可执行文件的末尾,无论是否附加了自定义数据。附加的数据包含在签名的散列中。签名的位置和大小存储在PE头的安全目录中。提取这些信息是这样的:
IMAGE_OPTIONAL_HEADER
IMAGE_OPTIONAL_HEADER::DataDirectory
IMAGE_DATA_DIRECTORY
IMAGE_DIRECTORY_ENTRY_SECURITY
ImageDirectoryEntryToDataEx()
IMAGE_DATA_DIRECTORY::VirtualAddress
IMAGE_DATA_DIRECTORY::Size
参考文献:
eyh26e7m2#
Microsoft记录了已签名PE文件的格式:Windows Authenticode Portable Executable Signature Format[此链接下载WORD文档]
2条答案
按热度按时间b91juud31#
嵌入的数字签名始终附加到可执行文件的末尾,无论是否附加了自定义数据。附加的数据包含在签名的散列中。
签名的位置和大小存储在PE头的安全目录中。提取这些信息是这样的:
IMAGE_OPTIONAL_HEADER
。IMAGE_OPTIONAL_HEADER::DataDirectory
是IMAGE_DATA_DIRECTORY
结构的阵列。索引为IMAGE_DIRECTORY_ENTRY_SECURITY
。您也可以使用dbghlp APIImageDirectoryEntryToDataEx()
。IMAGE_DATA_DIRECTORY::VirtualAddress
包含签名的 file offset(不是RVA),IMAGE_DATA_DIRECTORY::Size
包含签名的大小。参考文献:
eyh26e7m2#
Microsoft记录了已签名PE文件的格式:
Windows Authenticode Portable Executable Signature Format[此链接下载WORD文档]