4

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

从此图(来源): 在此处输入图像描述

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

4

2 回答 2

3

如您链接到的博客文章中所述,AppxBlockMap.xml 文件存储包中每个文件的加密块哈希。当使用身份验证码对包进行签名时,此文件会通过数字签名进行验证和保护。

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

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

使用 Windows API,您可以使用 Packaging API执行与 MakeAppx 相同的操作,并且您可以使用SignerSign 函数执行与 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声明了应该用作签名输入的内容。我不知道他们从哪里得到这些信息。

于 2016-08-01T06:40:58.547 回答
0

P7X 格式只是 0x504B4358(“PKCX”),后跟 DER 格式的 PKCS #7 数据。DER 由 ASN.1 描述。

于 2021-12-22T15:00:13.260 回答