AppxSignature.p7x的结构是什么?

Dim*_*ima 8 windows authenticode appx win-universal-app

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

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

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

Sim*_*ier 5

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

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

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

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


Ben*_*199 5

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