我正在为安装程序 DLL 编写一个函数,以验证系统上已安装的 EXE 文件的 Authenticode 签名。
该功能需要:
A) 验证签名是否有效。
B) 验证签名者是我们的组织。
因为它在安装程序中,并且因为它需要在较旧的 Win2k 安装上运行,所以我不想依赖 CAPICOM.dll,因为它可能不在目标系统上。
WinVerifyTrust API 非常适合解决 (A) 。
我需要找到一种方法来将已知证书(或其中的属性)与签署相关 EXE 的证书进行比较。
我正在为安装程序 DLL 编写一个函数,以验证系统上已安装的 EXE 文件的 Authenticode 签名。
该功能需要:
A) 验证签名是否有效。
B) 验证签名者是我们的组织。
因为它在安装程序中,并且因为它需要在较旧的 Win2k 安装上运行,所以我不想依赖 CAPICOM.dll,因为它可能不在目标系统上。
WinVerifyTrust API 非常适合解决 (A) 。
我需要找到一种方法来将已知证书(或其中的属性)与签署相关 EXE 的证书进行比较。
您应该使用CryptQueryObject。
这篇知识库文章演示了如何使用:如何从 Authenticode 签名的可执行文件中获取信息。
对于询问如何在没有 Windows-API 的情况下执行此操作的评论者,我不知道有任何库可以做到这一点,但格式记录在这里:Windows Authenticode Portable Executable Signature Format
如果签名有效,其证书链将包含您的证书。CertGetCertificateChain将获得该链。