PE Authenticode 证书表¶
inspect_pe_certificates / inspect-pe-certificates 用于回答以下问题:所选的本地 PE32/PE32+ 映像是否声明了 IMAGE_DIRECTORY_ENTRY_SECURITY 表,该表存储了哪些 WIN_CERTIFICATE 条目,以及这些条目携带了哪些 PKCS#7 签名者和 X.509 字段。它在不执行文件的情况下读取文件,并且不需要 Windows SDK、目录文件或反汇编器。
CLI 会相对于调用者的工作目录解析相对路径。MCP 和公布的输入模式要求绝对文件系统路径,并保留该精确选择:
观察结果¶
内联的 Evidence 结果包含产物路径、SHA-256 和字节长度。table 是文件偏移处的安全目录,当该目录不存在或为零时为 null。每个 entries[] 项报告 WIN_CERTIFICATE 长度、修订版本、类型以及负载的 SHA-256。
类型 2 的条目可能会在 dwLength 中计入其零对齐填充。PE 条目所有者只接受解析后的 ContentInfo 之后到下一个八字节边界的确切间隙;多余数据或非零的计入填充将导致失败。条目范围保留所有声明的字节,包括计入的填充。CMS 负载范围和哈希排除计入的填充。
对于 WIN_CERTIFICATE 类型 2(PKCS#7 signedData),pkcs7 包含摘要算法 OID、嵌入的 X.509 序列号/颁发者/主题/有效期字段,以及签名者标识符事实。通过主题密钥标识符标识的签名者会将该值报告为 subject_key_identifier_hex。其他证书类型保持 pkcs7 为 null。
缺少表是对该目录的观察性缺失。这并不能证明该映像在每种目录或覆盖层意义上都是未签名的。
限制与失败¶
所选文件默认限制为 64 MiB(最大 512 MiB)。默认最多检查八个 WIN_CERTIFICATE 条目。格式错误的 PE 头、截断的证书条目,以及结构上不是 signedData 的 PKCS#7 都会失败,且不会部分成功。安全目录以少于八个头字节(包括零)结束时被视为截断的 WIN_CERTIFICATE,并以相同方式失败。SignedData 必须包含至少一个 SignerInfo,且每个 SignerInfo 必须携带非空的签名值。每个嵌入的 X.509 证书必须包含 subjectPublicKeyInfo 和 signatureValue。解码后的证书名称文本、序列号、有效期拼写和主题密钥标识符共享每个 PKCS#7 负载 64 KiB 的预算。不支持的证书名称编码(包括 GeneralString)会明确失败。TeletexString (T.61) 值使用 OpenSSL 使用的 ISO-8859-1 兼容映射进行渲染;这不是完整的 T.61 解码器,因此只要使用该映射,结果就包含一个限制说明。RFC 5280 保留 TeletexString 以保持向后兼容,并将其字符集描述为类似 ASCII 的拉丁字符并附带附加字符。
结构化 CMS 读取器接受确定长度和 BER 不定长度用于构造值,包括外层 ContentInfo 序列。原始值必须具有确定长度。嵌入的 X.509 证书和签名属性也必须使用确定长度编码,这是其 DER 规范所要求的。这是一个有界的结构子集:它不实现每种 BER 字符串形式,也不验证 DER 规范编码,并且不验证签名。
此工作流不验证签名、证书链、时间戳,也不验证 Authenticode 摘要对映像字节的覆盖。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea