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

4

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


将dll文件读入作为一个文件,注意签名的开始位置(可以通过位置或特定字符/字符集标记开头),将所有字符读入缓冲区直到签名结束,将其与已经加载到程序中的签名进行比较,完成。 - xQuare
3个回答

6

谢谢您的回复。VerifyEmbeddedSignature(LPCWSTR pwszSourceFile)期望得到什么?DLL的名称吗? - Ruthg
2
一个DLL文件是以PE(可移植可执行)格式存在的,没有任何区别。 - MSalters

0

其中一个选项是CAPICOM库,它可以从微软作为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 类的替代选项


0

MSDN 推荐使用 CryptoAPI 的一部分 SignTool 运行 -

SignTool 返回命令行文本,指示签名检查结果。此外,对于成功执行,SignTool 返回零退出代码;对于失败执行,返回 1 退出代码;对于带有警告的执行,返回 2 退出代码。

详细信息请参见 使用 SignTool 验证文件签名


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接