首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinVerifyTrust只在使用文件时才起作用,而不是内存blob。

WinVerifyTrust只在使用文件时才起作用,而不是内存blob。
EN

Stack Overflow用户
提问于 2020-06-26 11:56:35
回答 1查看 310关注 0票数 1

我正在尝试使用WinVerifyTrust函数来验证msi的签名。

虽然这适用于文件系统上的文件,但我无法让它使用内存blob。

我的示例的这个基础显示了这个问题,这是来自微软的示例程序。

代码语言:javascript
复制
BOOL VerifyEmbeddedSignature(LPCWSTR pwszSourceFile)
{
   std::basic_ifstream<BYTE> file(pwszSourceFile, std::ios::binary);
  std::vector<BYTE> data((std::istreambuf_iterator<BYTE>(file)),std::istreambuf_iterator<BYTE>());

  LONG lStatus;

  /*
  // this works
  WINTRUST_FILE_INFO FileData;
  memset(&FileData, 0, sizeof(FileData));
  FileData.cbStruct = sizeof(WINTRUST_FILE_INFO);
  FileData.pcwszFilePath = pwszSourceFile;
  FileData.hFile = NULL;
  FileData.pgKnownSubject = NULL;
  */
  WINTRUST_BLOB_INFO FileData{};
  memset(&FileData, 0, sizeof(FileData));
  FileData.cbStruct = sizeof(WINTRUST_BLOB_INFO);
  FileData.gSubject = WIN_TRUST_SUBJTYPE_RAW_FILE;
  FileData.cbMemObject = static_cast<DWORD>(data.size());
  FileData.pbMemObject = data.data();

  GUID WVTPolicyGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2;
  WINTRUST_DATA WinTrustData;
  memset(&WinTrustData, 0, sizeof(WinTrustData));
  WinTrustData.cbStruct = sizeof(WinTrustData);
  WinTrustData.pPolicyCallbackData = NULL;
  WinTrustData.pSIPClientData = NULL;
  WinTrustData.dwUIChoice = WTD_UI_NONE;
  WinTrustData.fdwRevocationChecks = WTD_REVOKE_NONE;
  //WinTrustData.dwUnionChoice = WTD_CHOICE_FILE; -- works
  WinTrustData.dwUnionChoice = WTD_CHOICE_BLOB;
  WinTrustData.dwStateAction = WTD_STATEACTION_VERIFY;
  WinTrustData.hWVTStateData = NULL;
  WinTrustData.pwszURLReference = NULL;
  WinTrustData.dwUIContext = 0;
  WinTrustData.pBlob = &FileData;
  //WinTrustData.pFile = &FileData; -- works

  lStatus = WinVerifyTrust(
    NULL,
    &WVTPolicyGUID,
    &WinTrustData);

  WinTrustData.dwStateAction = WTD_STATEACTION_CLOSE;
  WinVerifyTrust(
    NULL,
    &WVTPolicyGUID,
    &WinTrustData);

  return lStatus == ERROR_SUCCESS;
}

在上面的示例中,使用WINTRUST_FILE_INFO工作,但WINTRUST_BLOB_INFO不工作。内存blob的错误始终是TRUST_E_PROVIDER_UNKNOWN

我假设问题可能是WIN_TRUST_SUBJTYPE_RAW_FILE主题类型,但我不知道我应该为msi文件使用哪种类型。我想知道是否可以用msi文件的内存块进行符号检查。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-08 01:19:51

WIN_TRUST_SUBJTYPE_RAW_FILE不是合适的主题GUID。函数CryptSIPRetrieveSubjectGuid可以根据指定文件中的头信息检索GUID。

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

https://stackoverflow.com/questions/62594233

复制
相关文章

相似问题

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