WinVerifyTrust обработка кода ошибки

Мне было поручено определить, была ли подделана конкретная 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: Я также запустил Microsoft SignTool.exe на DLL, о которой идет речь, и получил следующий вывод:

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

Number of errors: 1

Похоже, мне нужно сменить поставщика доверия, которым я пользуюсь. После обсуждения с производителем программного обеспечения задача отбрасывается в пользу другого подхода.

0

Решение

В соответствии с MSDN кажется, что вы должны установить

dwStateAction = WTD_STATEACTION_VERIFY;

Также я бы попробовал установку

wtfi.hFile = NULL;

или при указании настройки дескриптора файла

wtfi.pcwszFilePath = NULL;

(Мне не совсем понятно, предоставляете ли вы hFile или нет. И я бы не стал устанавливать для hFile и pcwszFilePath допустимые значения.)

Еще один момент, который нужно проверить: если вы компилируете для Windows 8 или Windows Server 2012, у вас будет элемент struct pSignatureSettings и нужно будет его инициализировать. Позаботьтесь, чтобы установить cbStruct чтобы pSignatureSettings не входит или правильно инициализировать pSignatureSettings,

0

Другие решения


По вопросам рекламы [email protected]