AppxSignature.p7x的结构是什么?

时间:2016-07-28 10:43:18

标签: windows win-universal-app authenticode appx

通用Windows应用程序位于.appx文件中,它只是一堆文件和元数据的压缩文件。大多数元数据文件都在Microsoft网站上进行了大量记录,并且很容易解析和/或重新生成。然而,AppxSignature.p7x仍然是一个谜。

从此图表(source): enter image description here

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

2 个答案:

答案 0 :(得分:2)

如您链接到的博客文章中所述,AppxBlockMap.xml文件为包中的每个文件存储加密块哈希。使用authenticode签名包时,将使用数字签名验证并保护此文件。

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

  • MakeAppx.exe 同时创建包(.zip格式)和块图文件 。这很重要,因为块图中的内容与.zip文件位紧密对应,您不能只使用任何压缩工具进行此步骤,您必须使用某些ZIP API编写zip / app包创建。
  • SignTool.exe ,使用“标准”authenticode将签名添加到包中。

使用Windows API,您可以使用相同的MakeAppx Packaging API您可以使用The SignerSign function与SignTool进行相同的操作。

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

PE文档的Authenticode签名在此处记录: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,它声明了应该用作签名的输入。我不知道他们从哪里得到这些信息。

答案 1 :(得分:0)

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

创建.pfx的正确方法是使用WDK中的Pvk2Pfx.exe工具,请参阅How to create an app package signing certificate

  

使用Pvk2Pfx实用程序转换.pvk和.cer文件   MakeCert创建为.pfx文件,您可以使用SignTool进行签名   应用包:

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