专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
今天看啥  ›  专栏  ›  看雪学苑

Windows PE 文件签名的解析与验证

看雪学苑  · 公众号  · 互联网安全  · 2024-09-27 17:59

主要观点总结

本文分享了关于签名研究的内容,包括导出签名数据、解析证书、验证证书、解析证书中的关键信息、计算Authenticode、解析内嵌证书以及RSA公钥解密等步骤。同时,介绍了如何使用pe-sign工具提取和验证签名信息,并提供了相关的OpenSSL命令和Python代码示例。此外,还讨论了如何导入系统内置的根证书,并解析了Authenticode_PE.docx中的Authenticode计算步骤。

关键观点总结

关键观点1: 导出签名数据

PE格式可参考MSDN,签名证书在Certificate Table中,通过Optional Header的Data Directories找到Security Directory的文件偏移,可提取签名数据。

关键观点2: 解析证书

使用openssl解析导出的证书,如果是PEM格式,需要调整参数以正确解析。

关键观点3: 验证证书

使用PKCS7_verify函数或openssl命令验证证书的有效性,需要准备证书内容、签名者证书、受信任证书存储等。

关键观点4: 解析证书中的关键信息

提取证书中的签名时间、Authenticode等信息,使用pe-sign工具提取和解析。

关键观点5: 计算Authenticode

按照Authenticode_PE.docx中的步骤计算Authenticode,使用pe-sign工具进行计算和验证。

关键观点6: 解析内嵌证书

识别内嵌证书的偏移位置,并提取和解析内嵌证书。

关键观点7: RSA公钥解密

使用在线工具或openssl命令进行RSA公钥解密。

关键观点8: 导入系统根证书

通过枚举系统根证书并导出为PEM格式,方便后续处理。


文章预览

本文分享的是开发该工具之前做的一些签名研究内容。 一 导出签名数据 具体的 PE 格式可以参考MSDN(https://learn.microsoft.com/en-us/windows/win32/debug/pe-format)。 签名证书的位置在 Certificate Table 里(也称为 Security Directory): 可以从 Optional Header 的 Data Directories 里找到 Security Directory 的文件偏移: 如图表示,ProcessHacker.exe 文件的签名数据在 0x1A0400 位置,长度 0x3A20。 导航到这个偏移位置即可看到这里就是签名数据: 参考MSDN, 签名数据的结构如下: typedef struct _WIN_CERTIFICATE { DWORD dwLength; WORD wRevision; WORD wCertificateType; BYTE bCertificate[ANYSIZE_ARRAY]; } WIN_CERTIFICATE, *LPWIN_CERTIFICATE; 所以,bCertificate 是实际的证书内容,wCertificateType 表示签名证书类型,根据这个字段可知支持三种证书类型:PKCS #1、PKCS #7、X509,我看到过的文件都是使用 PKCS #7 签名。 找到 Security ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览