首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinVerifyTrust错误码处理

WinVerifyTrust错误码处理
EN

Stack Overflow用户
提问于 2015-06-10 19:18:19
回答 1查看 2.2K关注 0票数 0

我的任务是确定某个第三方公司的特定DLL是否在用户系统上安装后被篡改。我以前从没做过任何与数字签名有关的事。我正在尝试使用WinVerifyTrust在我自己的系统上设置一个测试。

代码语言:javascript
复制
{
    WINTRUST_FILE_INFO wtfi;
    wtfi.cbStruct = sizeof(WINTRUST_FILE_INFO);
    wtfi.pcwszFilePath = TEXT("*****.dll");
    //wtfi.hFile = DllHandle;
    wtfi.pgKnownSubject = NULL;

    GUID wtvPolicyGUID = DRIVER_ACTION_VERIFY;

    WINTRUST_DATA wtd;
    wtd.cbStruct = sizeof(WINTRUST_DATA);
    wtd.pPolicyCallbackData = NULL;
    wtd.pSIPClientData = NULL;
    wtd.dwUIChoice = WTD_UI_NONE;
    wtd.fdwRevocationChecks = WTD_REVOKE_NONE;
    wtd.dwUnionChoice = WTD_CHOICE_FILE;
    wtd.pFile = &wtfi;
    wtd.dwStateAction = WTD_STATEACTION_IGNORE;
    wtd.pwszURLReference = NULL;
    wtd.dwProvFlags = WTD_REVOCATION_CHECK_NONE;
    //wtd.pSignatureSettings = NULL;            // Win8 and Server2012 only?

    LONG result = WinVerifyTrust( NULL, &wtvPolicyGUID, &wtd);
    debugf(TEXT("Validation result: 0x%08x"), result);
}

这是返回0x57。根据我从MSDN收集到的信息,错误来自提供的信任提供程序。我不知道信任提供者是什么,也不知道它能返回什么错误消息。

  1. 我用WinTrust.dll和WinTrust.lib链接过,所以我推测这意味着我使用的是微软的“软件出版商信任提供商”。这是推荐的,还是有更好的?您是否应该使用您正在分析的软件发行者提供的特定产品?
  2. H包含GUID输入值,但似乎没有提供输出错误代码。任何帮助跟踪他们的响应代码列表是非常感谢的。

提前谢谢。

编辑:我发现这个库使用winerror.h提供的错误代码。0x57是"ERROR_INVALID_PARAMETER",所以我正在回顾它可能抱怨的内容。我还尝试将策略GUID切换到WINTRUST_ACTION_GENERIC_VERIFY_V2,这将返回错误TRUST_E_SUBJECT_FORM_UNKNOWN。这两种错误代码都没有特别说明最终问题是什么。

编辑2:我还在所讨论的dll上运行了微软的SignTool.exe,并获得了以下输出:

代码语言:javascript
复制
SignTool Error: A certificate chain processed, but terminated in a root
        certificate which is not trusted by the trust provider.

Number of errors: 1

因此,我似乎需要改变我正在使用的信任提供者。在与软件制造商讨论之后,这项任务被放弃,转而采用另一种方法。

EN

回答 1

Stack Overflow用户

发布于 2015-06-11 15:10:35

根据MSDN的说法,你应该设置

代码语言:javascript
复制
dwStateAction = WTD_STATEACTION_VERIFY;

我也会试着设置

代码语言:javascript
复制
wtfi.hFile = NULL;

或在授予文件句柄设置时

代码语言:javascript
复制
wtfi.pcwszFilePath = NULL;

(我不太清楚你是否提供hFile。)并且我不会同时将hFile和pcwszFilePath设置为有效值。)

另一点需要检查:如果您正在为Windows8或Windows 2012进行编译,您将拥有结构成员pSignatureSettings,并需要对其进行初始化。注意设置cbStruct,以便不包括pSignatureSettings,或者正确初始化pSignatureSettings

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30765385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档