以编程方式验证已签名的 dll 的C++
Programmatically verify signed dll's C++
我有一个签名的dll,希望在使用它之前验证它的签名。我的应用程序是用C++编写的。如何以编程方式获取dll的签名?
您可以使用WinVerifyTrust函数
Dlls和PE几乎相同,只是头部有2到3个字节的差异
这里有一个完整的代码示例(也适用于dll)。
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
类的替代选项。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL