主要观点总结
本文分享了关于签名研究的内容,包括导出签名数据、解析证书、验证证书、解析证书中的关键信息、计算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
………………………………