C#:如何检测authenticode签名文件的篡改

我正在尝试编写一个C#程序来validationexe的数字签名。 exe是用authenticode证书签名的,我想检测篡改。

我已经能够创建一个SignedCms实例,如下所述: 从.NET中的Authenticode签名文件中获取时间戳

我假设SignedCms.CheckSignature可以做到这一点,但是这个方法永远不会引发exception……即使不是当我修改exe的某些部分时……

我假设您已经浏览了.NET Framework文档并且没有找到您需要的内容。 StackOverflow问题的答案有一个链接,描述如何使用本机Windows CryptQueryObject函数来validation签名。 所以剩下的就是检查PInvoke.NET以了解如何将该function引入.NET 。

你可以只是shell到signtool.exe /verify ,并检查结果?

我最近写了一个简单的应用程序,使用相同的方法签署可执行文件,它的工作原理很棒。

在MSDN上的Signtool