如何验证Microsoft';可移植代码中的可移植可执行文件格式? >我正在寻找示例代码(或库),它可以帮助我使用C++在Windows平台上验证Windows PE文件(.exe,.dll,cabl,…)的数字签名。我正在寻找一种独立于平台的方法

如何验证Microsoft';可移植代码中的可移植可执行文件格式? >我正在寻找示例代码(或库),它可以帮助我使用C++在Windows平台上验证Windows PE文件(.exe,.dll,cabl,…)的数字签名。我正在寻找一种独立于平台的方法,c++,validation,cross-platform,digital-signature,portable-executable,C++,Validation,Cross Platform,Digital Signature,Portable Executable,谢谢 对此没有一般性的答案,尤其是您没有指定要将其移植到多远的位置。x86上的Linux和开源库将更加容易,在MIPS32或Arduino上运行uCos几乎是不可能的 首先,您显然必须能够读取和解析PE格式本身,尤其是您必须能够获取各个部分的内容并对其进行散列,如.text、.data等。要深入了解其组合方式,请参见此处: 现在您希望它是可移植的,所以您可以滚动您自己的PE reader/limited writer,或者查看一些已经这样做的开源项目。试试ReactOS或Mono。 或者,如

谢谢

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

首先,您显然必须能够读取和解析PE格式本身,尤其是您必须能够获取各个部分的内容并对其进行散列,如.text、.data等。要深入了解其组合方式,请参见此处:

现在您希望它是可移植的,所以您可以滚动您自己的PE reader/limited writer,或者查看一些已经这样做的开源项目。试试ReactOS或Mono。 或者,如果您乐于运行python,请尝试以下方法

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

Authenticode签名的精确格式、签名过程和验证过程描述如下: (Authenticode_PE.docx)

它需要相当多的代码才能将所有内容整合起来。

您可以在WINE's查看完整的编程方式


事实上,这里有一个很好的链接,它抱怨葡萄酒的实施(那是在2008年),因此,以一种相当“可移植”的方式解释了这个过程,如果您的平台中有类似于OpenSSL的内容。

Microsoft Authenticode肯定不是一个大秘密,您可以了解Authenticode的工作原理。您还可以下载有关的技术信息。由于您没有明确说明是否需要Linux、Mac或智能手机,因此我无法为您提供适当的解决方案。但是,有了我上面提供的信息,你应该能够用你选择的语言和操作系统创建自己的程序来完成这项工作。

这个问题已经很老了,但我的答案是针对那些仍然面临同样问题的人的


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

+1稍微修改了标题,表示您指的是数字签名,而不是文件签名。(例如,MZ,“PE\0\0”等)OpenSSL不是一个完整的加密库——仅限SSL,另一方面,是一个完整的加密库——它们确实有一个,如果这是PE使用的格式。(CryptoPP的优点是它也是公共域:)比利:上次我检查OpenSSL时,一切正常。@sehe:Hmm。。它比我想象的要多。(也就是说,它仍然比Crpyto++中可用的要少得多,而Crypto++有更好的许可证)您可以使用GNU binutils中的“bfd”库来解析Windows PE格式。(尽管西蒙关于借用葡萄酒的建议可能是最好的总体建议。)