【问题标题】:How can I validate digital signatures for Microsoft's Portable Executable format in portable code? [closed]如何在可移植代码中验证 Microsoft 的可移植可执行格式的数字签名? [关闭]
【发布时间】:2011-09-24 17:15:43
【问题描述】:

我正在寻找可以帮助我使用 C++ 在非 Windows 平台上验证 Windows PE 文件(.exe、.dll、.cab、.etc)的数字签名的示例代码(或库)。我正在寻找一种独立于平台的方法。

谢谢!

【问题讨论】:

  • +1 稍微修改了标题以表示您的意思是数字签名而不是文件签名。 (例如 MZ、“PE\0\0”等)

标签: c++ validation cross-platform digital-signature portable-executable


【解决方案1】:

您可以查看 WINE 的 WinVerifyTrust implementation 以获得完整的程序化方式。

实际上,这里有一个很好的链接How to verify executable digital signatures under Linux?,它抱怨 WINE 的实现(早在 2008 年),因此,只要您有类似于 OpenSSL 的东西,它就会以一种非常“便携”的方式解释该过程在您的平台上。

【讨论】:

    【解决方案2】:

    对此没有一般性的答案,尤其是因为您尚未指定要将其移植到多远。带有开源库的 x86 上的 Linux 会更容易,在 MIPS32 或 Arduino 上运行的 uCos 几乎是不可能的..

    首先,您显然必须能够读取和解析 PE 格式本身,特别是您必须能够获取各个部分的内容并对它们进行哈希处理,例如 .text、.data 等。它是如何组合在一起的,看这里:

    http://msdn.microsoft.com/en-us/magazine/cc301805.aspx http://msdn.microsoft.com/en-us/magazine/ms809762.aspx

    现在您希望它是可移植的,因此您可以使用自己的 PE 阅读器/受限编写器,或者查看一些已经这样做的开源项目。试试 ReactOS 或 Mono。 或者如果你喜欢运行 python,试试这个http://code.google.com/p/pefile/

    其次,当您处理加密、数字签名和 X.509 证书时,您几乎需要一个成熟的可移植加密库来执行签名、证书链验证等。如果您对 GPL 感到满意,请尝试 OpenSSL 或 CyaSSL,如果您想要 BSD 许可证,请尝试 Botan。

    Authenticode 签名的精确格式、签名过程和验证过程如下所述: http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx (Authenticode_PE.docx)

    将所有内容整合在一起需要相当多的代码。

    【讨论】:

    • OpenSSL 不是一个成熟的加密库——仅 SSL。另一方面,CryptoPP 是一个成熟的加密库——如果这实际上是 PE 使用的格式,他们确实有一个 section on X.509 certificates。 (CryptoPP 的好处在于它也是公共领域 :)
    • Billy:上次我检查了 OpenSSL has cryptoX509 certificate handling 就好了。
    • @sehe:嗯.. 它比我想象的要多。 (也就是说,它仍然比 Crpyto++ 中可用的少得多,而且 Crypto++ 有更好的许可证)
    • 您可以使用 GNU binutils 中的“bfd”库来解析 Windows PE 格式。 (虽然 Simon 借用 Wine 的建议可能是最好的整体建议。)
    【解决方案3】:

    这个问题相当老了,但我为那些仍然面临同样问题的人提供了答案。

    您可以使用osslsigncode tool 在 Linux 或其他 *nix 系统上验证 MS Authenticode 签名。然而,该工具仅验证签名本身,并不检查证书吊销、时间戳有效性等,尽管您可以从签名中提取数据并手动执行。

    【讨论】:

      【解决方案4】:

      Microsoft Authenticode 当然不是什么大秘密,您可以download technical specs and more 了解 Authenticode 的工作原理。您还可以下载有关Windows PE file format 的技术信息。由于您没有明确说明您想要 Linux、Mac 或智能手机的天气,我无法为您提供适当的解决方案。但是,根据我在上面为您提供的信息以及OpenSSL,您应该能够创建自己的程序以使用您选择的语言和操作系统来执行此操作。

      【讨论】:

        猜你喜欢
        • 2014-09-19
        • 2021-07-25
        • 1970-01-01
        • 2015-08-05
        • 2013-09-26
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        相关资源
        最近更新 更多