如何在便携式代码中验证Microsoft的可移植可执行格式的数字签名?

时间:2011-06-28 22:19:21

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

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

谢谢!

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:5)

对此没有一般性的答案,特别是因为您没有指定要移植多远。带有开源库的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)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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