c# - 在 Windows 应用程序上验证代码签名证书

标签 c# .net

我正在尝试以编程方式验证代码签名证书,如 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/

相关文章:

c# - 将传真连接到网站

c# - 如何在使用await async期间运行sql查询

c# - 构建 : error MSB4062 Microsoft. Build.Tasks.ResolveComReference 时出现 .NET Core 错误

c# - MimeKit:如何通过 MessageId 删除电子邮件?

c# - 如何判断一个网址是不是内网网址?

c# - 在 Azure 中运行时使用自定义范围时 DefaultAzureCredential().GetTokenAsync 失败

c# - 更新 ASP.NET C# 项目中的修改代码

c# - ASP.NET Core : hosting. 未加载 json url

C# 与非托管 dll 数据结构互操作

c# - 创建一个 IList<T> 的 Item<U>?