在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::DataDirectory
是 IMAGE_DATA_DIRECTORY
结构的数组。通过 IMAGE_DIRECTORY_ENTRY_SECURITY
对其进行索引(未记录但在 winnt.h 中声明)以定位安全目录的条目。
IMAGE_DATA_DIRECTORY::VirtualAddress
包含签名的 文件偏移量 (不是 RVA),IMAGE_DATA_DIRECTORY::Size
包含签名的大小。
参考文献:
如问题标题所述。但是,我使用的是 "trick",我在运行时使用的可执行文件之后存储额外数据(参见 here)。
签署我的可执行文件似乎会破坏此 'trick' 但是,所以我的问题是签名存储在 exe (PE) 文件中的什么位置?
我正在使用来自微软的signtool
来签署我的可执行文件。
已签名的 PE 文件的格式由 Microsoft 记录:
Windows Authenticode Portable Executable Signature Format[此link下载一个WORD文档]
嵌入式数字签名总是附加到可执行文件的末尾,无论您是否附加了自定义数据。附加数据包含在签名的哈希中。
签名的位置和大小保存在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
包含签名的大小。
参考文献: