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

时间:2018-08-28 22:29:00

标签: c# .net

我正在尝试以编程方式验证this question from 2014中所述的代码签名证书。遵循建议后,我仍然无法找到一致的工作解决方案来确定我的.exe何时被篡改(即哈希不再匹配)

WinVerifyTrust中的wintrust.dll方法是最准确的,但是在我的可执行文件被混淆/ VM处理后,我似乎得到了误报。在这种情况下,即使.exe进行了有效签名和篡改,我仍得到(int)2148204800的结果。我也不想使用Windows API调用,因为我希望代码尽可能地可移植。

其他方法,例如X509Certificate.CreateFromSignedFile().Verify()和Powershell方法当然不会验证exe的哈希,因此返回true。

在过去的4年中,是否有任何新方法可以验证.exe的哈希值,最好是在纯.NET中?我对一个仅验证哈希而不是整个证书(如果可能)的解决方案感到满意。

1 个答案:

答案 0 :(得分:0)

如果从Mono.Security作为Nuget软件包提取它们,它们将具有一个不错的AuthenticodeDeformatter类,该类将验证代码签名证书:

var authenticode = new AuthenticodeDeformatter(Filename);
authenticode.IsTrusted(); //Should return False if tampered with.