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

Jam*_*ith 18 c++ validation cross-platform digital-signature portable-executable

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

谢谢!

Sim*_*ier 11

您可以在WINE的WinVerifyTrust 实现中查看完整的编程方式.

实际上,这是一个很好的链接如何验证Linux下的可执行数字签名?抱怨WINE的实现(那是在2008年),因此,只要你的平台上有类似于OpenSSL的东西,就可以以一种非常"便携"的方式解释这个过程.


ker*_*ert 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)

它需要相当多的代码才能将所有内容组合在一起.

  • 比利:上次我检查过OpenSSL [has crypto](http://www.openssl.org/docs/crypto/crypto.html)和[X509证书处理](http://www.openssl.org/docs/crypto /x509.html#)就好了. (4认同)