我正在寻找可以帮助我在使用C ++的非Windows平台上验证Windows PE文件(.exe,.dll,.cab,.etc)的数字签名的示例代码(或库)。我正在寻找一种独立于平台的方法。
谢谢!
答案 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签名。但是,该工具只是验证签名本身,并不检查证书撤销,时间戳有效性等,但您可以从签名中提取数据并手动执行。