带WTD_HASH_ONLY_FLAG时WinVerifyTrust返回TRUST_E_NO_SIGNATURE的原因
WinVerifyTrust带WTD_HASH_ONLY_FLAG返回TRUST_E_NO_SIGNATURE的原因解析
现象总结
- 对字节被修改的文件调用不带
WTD_HASH_ONLY_FLAG的WinVerifyTrust,返回预期错误码0x80096010(TRUST_E_BAD_DIGEST) - 对同一文件调用带
WTD_HASH_ONLY_FLAG的WinVerifyTrust,返回错误码0x800B0100(TRUST_E_NO_SIGNATURE) - 使用
signtool verify验证该文件,返回预期的0x80096010(TRUST_E_BAD_DIGEST)
复现方式
运行WinVerifyTrust的PInvoke示例代码,设置WinTrustDataProvFlags ProvFlags = WinTrustDataProvFlags.HashOnlyFlag后执行验证。
疑问解答
即使文件存在常规数字签名,带WTD_HASH_ONLY_FLAG的WinVerifyTrust仍返回TRUST_E_NO_SIGNATURE的原因是:该验证模式仅支持验证专门用WTD_HASH_ONLY_FLAG签名生成的文件。常规签名的文件不符合该模式的验证要求,因此会被判定为无有效签名(暂无官方文档明确说明,该结论来自第三方项目代码注释)。
内容的提问来源于stack exchange,提问作者Farseer
相关产品推荐
相关产品推荐

