以编程方式验证已签名的 dll 的C++

Programmatically verify signed dll's C++

本文关键字:dll C++ 编程 方式 验证      更新时间:2023-10-16

我有一个签名的dll,希望在使用它之前验证它的签名。我的应用程序是用C++编写的。如何以编程方式获取dll的签名?

您可以使用WinVerifyTrust函数
Dlls和PE几乎相同,只是头部有2到3个字节的差异
这里有一个完整的代码示例(也适用于dll)。

MSDN推荐的方法是运行SignTool,它是CryptoAPI-的一部分

SignTool返回用于说明签名检查结果的命令行文本。此外,SignTool为成功执行返回一个退出代码,为零,为失败执行返回一,为完成并带有警告的执行返回两。

有关详细信息,请参阅使用SignTool验证文件签名。

其中一个选项是CAPICOM库,它可以从Microsoft以32位可重新分发的形式提供。验证码可以简单到:

CComPtr<Capicom::ISignedCode> pSignedCode;
ATLENSURE_SUCCEEDED(pSignedCode.CoCreateInstance(__uuidof(Capicom::SignedCode)));
ATLENSURE_SUCCEEDED(pSignedCode->put_FileName(CComBSTR(pszPath)));
HRESULT nVerifyResult = pSignedCode->Verify(ATL_VARIANT_FALSE);

您还可以轻松获得附加信息,如签名人、证书等。

如果您不想使用CAPICOM,MSDN建议使用上面代码片段中使用的SignedCode类的替代选项。