我正在尝试以编程方式验证代码签名证书,如 this question from 2014 中所述.遵循建议后,我仍然无法找到一致的工作解决方案来确定我的 .exe 何时被篡改(即哈希不再匹配)
wintrust.dll
中的 WinVerifyTrust
方法是最准确的,但是在我的可执行文件被混淆/VM 后,我似乎得到了误报。在这种情况下,即使 .exe 已有效签名且未被篡改,我也会得到 (int)2148204800 的结果。我也不喜欢使用 Windows API 调用,因为我希望代码尽可能具有可移植性。
X509Certificate.CreateFromSignedFile().Verify()
等其他方法和 Powershell 方法当然不会验证 exe 的哈希值,因此返回 true。
在过去 4 年中是否出现了任何新方法来验证 .exe 的哈希值,最好是在纯 .NET 中?我对一个只验证散列而不是整个证书(如果可能的话)的解决方案感到满意。
最佳答案
如果您从 Mono.Security 中提取一个 Nuget 包,他们有一个很好的 AuthenticodeDeformatter
类可以验证代码签名证书:
var authenticode = new AuthenticodeDeformatter(Filename);
authenticode.IsTrusted(); //Should return False if tampered with.
关于c# - 在 Windows 应用程序上验证代码签名证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52067029/