【问题标题】:C#: How to detect tampering of authenticode signed fileC#:如何检测验证码签名文件的篡改
【发布时间】:2011-11-29 04:19:01
【问题描述】:

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

我已经能够创建一个 SignedCms 实例,如下所述:Get timestamp from Authenticode Signed files in .NET

我认为 SignedCms.CheckSignature 可以解决问题,但这种方法永远不会引发异常...即使在我修改 exe 的某些位时也不会...

【问题讨论】:

    标签: c# .net authenticode signtool


    【解决方案1】:

    我假设您已经搜索了 .NET Framework 文档,但没有找到您需要的内容。 this StackOverflow question 的答案有一个链接,该链接描述了如何使用本机 Windows CryptQueryObject 函数来验证签名。所以剩下的就是查看PInvoke.NET to see how to bring that function into .NET

    【讨论】:

    • David Pope:所以黑客需要做的就是覆盖 CryptQueryObject ?大声笑 - 默默无闻的安全不起作用。
    【解决方案2】:

    您能直接转至signtool.exe /verify,然后检查结果吗?

    我最近编写了一个简单的应用程序,它使用相同的方法对可执行文件进行签名,效果很好。

    Signtool on MSDN

    【讨论】:

    • 对可执行文件进行签名是没有意义的,我可以删除您的签名代码,或者更改签名密钥。使用 ilasm + ildasm ...为了使其正常工作,您需要在操作系统上安装受信任的根证书,并让操作系统验证密钥 - 密钥本身由受信任的机构签名,就像 SSL 一样。
    • 我们使用公共可信证书签名并验证信任链。
    猜你喜欢
    • 2019-09-07
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2021-12-07
    相关资源
    最近更新 更多