0

私は、ユーザーのシステムにインストールした後、サード パーティ企業の特定の DLL が改ざんされていないかどうかを判断する任務を負っています。私はこれまでデジタル署名に関連することをしたことがありません。WinVerifyTrust を使用して自分のシステムでテストをセットアップしようとしています。

{
    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 にリンクしたので、Microsoft の「Software Publisher Trust Provider」を使用していると推測します。これは推奨されていますか、それとももっと良いものがありますか? 分析している製品のソフトウェア発行者に固有のものを使用する必要がありますか?
  2. SoftPub.h には GUID 入力値が含まれていますが、出力エラー コードが提供されていないようです。応答コード リストを追跡するための助けをいただければ幸いです。

前もって感謝します。

編集:以来、このライブラリは winerror.h によって提供されるエラー コードを使用することがわかりました。0x57 は「ERROR_INVALID_PARAMETER」なので、何が不満なのかを調べています。また、ポリシー GUID を WINTRUST_ACTION_GENERIC_VERIFY_V2 に切り替えてみましたが、エラー TRUST_E_SUBJECT_FORM_UNKNOWN が返されました。どちらのエラー コードも、最終的な問題が何であるかを特に明らかにするものではありません。

編集 2:問題の dll で Microsoft の SignTool.exe も実行し、次の出力を得ました。

SignTool Error: A certificate chain processed, but terminated in a root
        certificate which is not trusted by the trust provider.

Number of errors: 1

そのため、使用している信頼プロバイダーを変更する必要があるようです。ソフトウェアの製造元と話し合った結果、別のアプローチを採用することになり、このタスクは取り下げられました。

4

1 に答える 1

0

MSDNによると、設定する必要があるようです

dwStateAction = WTD_STATEACTION_VERIFY;

また、設定してみます

wtfi.hFile = NULL;

またはファイルハンドル設定を与えるとき

wtfi.pcwszFilePath = NULL;

(あなたが hFile を提供しているかどうかは私にはよくわかりません。また、hFile と pcwszFilePath の両方を有効な値に設定することはありません。)

確認すべきもう 1 つのポイント: Windows 8 または Windows Server 2012 用にコンパイルする場合は、構造体メンバーpSignatureSettingsがあり、それを初期化する必要があります。cbStructが含まれないように設定するpSignatureSettingsか、適切に初期化するように注意してくださいpSignatureSettings

于 2015-06-11T15:10:35.610 に答える