2016-07-28 455 views
2

通用Windows应用程序位于.appx文件中,该文件只是一堆文件和元数据的zip文件。大多数元数据文件都广泛记录在Microsoft网站上,并且对于解析和/或重新生成微不足道。然而AppxSignature.p7x仍然是一个谜。AppxSignature.p7x的结构是什么?

从这个图(source): enter image description here

AppxSignature.p7x应该有AppxBlockMap.xml,内容&目录散列的散列和签名。但是我找不到任何AppxSignature.p7x文件本身的文档。理想情况下,我想使用替代工具来生成和验证此签名,例如openssl/gnutls或类似的。对此的实际使用是更新和重新打包Linux上的应用程序,并为Windows应用商店准备.appxupload文件。

+0

signtool如何准确地与APPX文件一起工作没有记录(仅记录PE格式文件:http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/ authenticode_pe.docx),因为你应该在Windows上使用SignerSign API(这正是signtool所涵盖的)。然而,有一个开源工具,应该做你想在这里所谓的“fb-util-for-appx”:https://github.com/facebook/fb-util-for-appx –

+0

@SimonMourier这是godsent的东西!这就像我之后重新实施的一样!如果你提交这个答案作为答案,我会奖励你,因为所有的源代码不仅记录了所有的诡计,而且它是一个现成的工具,可以在linux上生成appx包(甚至是mac)。在非Windows上制作appx是我最终所追求的。 – Dima

回答

1

正如在博客中链接到的AppxB lockMap.xml文件为包中的每个文件存储加密块散列。当使用authenticode对包进行签名时,此文件将通过数字签名进行验证和保护。

因此,在Windows上,你有两个工具:

  • MakeAppx.exe创建包(.zip格式),并在同一时间的块映射文件。这一点很重要,因为块地图中的内容与.zip文件位密切相关,所以您不能只使用此步骤的任何压缩工具,您必须使用某些ZIP API编写zip/app包创建程序。
  • SignTool.exe使用“标准”authenticode添加签名到包。

使用Windows API,您可以使用 Packaging API一样做MakeAppx,并且可以使用The SignerSign function一样做SignTool。

整个MakeAppx过程没有记录在恕我直言,但实际上在这里描述了块图模式:Package block map schema reference这是比较容易理解。

的PE文件的验证码签名记录在这里:Windows Authenticode Portable Executable Signature Format

但它仅适用于PE(.DLL,.EXE等)的文件(请注意,也有可能签署.cab文件),和我不不认为SignerSign如何构建AppxSignature.p7x。不过,这里有一个开源工具可以在这里使用:https://github.com/facebook/fb-util-for-appx。你会注意到这个文件https://github.com/facebook/fb-util-for-appx/blob/master/PrivateHeaders/APPX/Sign.h,它声明了什么应该用作签名的输入。我不知道他们从哪里得到这些信息。

0

这是一个PKCS#12(.pfx)文件,应该加密并签名。关于PKCS 12,请参阅Wiki

正确的方法来创建.PFX使用来自WDK Pvk2Pfx.exe工具,见How to create an app package signing certificate

使用Pvk2Pfx实用程序将.pvk和.CER文件 MakeCert创建转换对,您可以使用SignTool使用.pfx文件签署 的应用程序包:

Pvk2Pfx /pvk MyKey.pvk /pi pvkPassword /spc MyKey.cer /pfx MyKey.pfx [/po pfxPassword] 
+0

我已经有一个签名证书(.pfx),我在问什么数据被哈希,如何存储,以及如何签名以创建AppxSignature.p7x而不使用SignTool。 – Dima