4

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

4

3 回答 3

6

您可以使用WinVerifyTrust 功能
除了头部有 2 到 3 个字节的差异外,DLL 和 PE 几乎相同。
完整的代码示例在这里(也适用于 dll)。

于 2012-08-26T07:41:11.143 回答
0

MSDN 推荐的方法是运行属于 CryptoAPI 的 SignTool -

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

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

于 2012-08-26T07:46:07.457 回答
0

选项之一是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

于 2012-08-26T07:50:09.843 回答