【问题标题】:What is the structure of AppxSignature.p7x?AppxSignature.p7x 的结构是什么?
【发布时间】:2016-12-02 17:01:13
【问题描述】:

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

从此图表 (source):

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

【问题讨论】:

  • 没有记录 signtool 如何与 APPX 文件一起工作(仅记录了 PE 格式文件:download.microsoft.com/download/9/c/5/…),因为您应该在 Windows 上使用 SignerSign API(这就是 signtool 所做的秘密)。但是有一个开源工具应该可以做你想做的事情,这里叫做“fb-util-for-appx”:github.com/facebook/fb-util-for-appx
  • @SimonMourier 这是天赐之物!这就像我要重新实现的那样!如果您将此作为答案提交,我将奖励您,因为所有源代码不仅记录了所有的诡计,而且它是在 linux(甚至 mac)上生成 appx 包的现成工具。在非 Windows 上制作 appx 是我最终追求的目标。

标签: windows win-universal-app authenticode appx


【解决方案1】:

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

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

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

使用 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,它声明了应该用作签名输入的内容。我不知道他们从哪里得到这些信息。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多