AppxSignature.p7x 的结构是什么?
What is the structure of AppxSignature.p7x?
通用 Windows 应用程序位于 .appx 文件中,它只是一堆文件和元数据的压缩包。大多数元数据文件在 Microsoft 网站上都有详细记录,并且解析起来很简单 and/or 重新生成。然而 AppxSignature.p7x 仍然是个谜。
从这个图表 (source):
AppxSignature.p7x 应具有 AppxBlockMap.xml 的哈希值、内容和目录哈希值以及签名。但是我找不到 AppxSignature.p7x 文件本身的任何文档。理想情况下,我想使用替代工具来生成和验证此签名,例如openssl/gnutls 或类似的。实际用途是在 Linux 上更新和重新打包应用程序,并为 Windows 商店准备 .appxupload 文件。
正如您 link 在博客 post 中所述,AppxBlockMap.xml 文件存储包中每个文件的加密块散列。当使用 authenticode 对包进行签名时,此文件将通过数字签名进行验证和保护。
因此,在 windows 上,您有两个工具:
- MakeAppx.exe 同时创建包(.zip 格式)和块映射文件。这很重要,因为块映射中的内容与 .zip 文件位密切相关,您不能只使用任何压缩工具来执行此步骤,您必须使用一些 ZIP API 编写 zip/app 包创建程序.
- SignTool.exe 使用 "standard" 验证码将签名添加到包中。
使用 Windows API 您可以使用
Packaging API and you can do the same as SignTool using The SignerSign function.
恕我直言,没有记录整个 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. You will notice this file https://github.com/facebook/fb-util-for-appx/blob/master/PrivateHeaders/APPX/Sign.h 声明应该将什么用作签名输入。我不知道他们从哪里得到这些信息。
P7X 格式只是 0x504B4358(“PKCX”)后跟 DER 格式的 PKCS #7 数据。 DER 由 ASN.1 描述。
通用 Windows 应用程序位于 .appx 文件中,它只是一堆文件和元数据的压缩包。大多数元数据文件在 Microsoft 网站上都有详细记录,并且解析起来很简单 and/or 重新生成。然而 AppxSignature.p7x 仍然是个谜。
从这个图表 (source):
AppxSignature.p7x 应具有 AppxBlockMap.xml 的哈希值、内容和目录哈希值以及签名。但是我找不到 AppxSignature.p7x 文件本身的任何文档。理想情况下,我想使用替代工具来生成和验证此签名,例如openssl/gnutls 或类似的。实际用途是在 Linux 上更新和重新打包应用程序,并为 Windows 商店准备 .appxupload 文件。
正如您 link 在博客 post 中所述,AppxBlockMap.xml 文件存储包中每个文件的加密块散列。当使用 authenticode 对包进行签名时,此文件将通过数字签名进行验证和保护。
因此,在 windows 上,您有两个工具:
- MakeAppx.exe 同时创建包(.zip 格式)和块映射文件。这很重要,因为块映射中的内容与 .zip 文件位密切相关,您不能只使用任何压缩工具来执行此步骤,您必须使用一些 ZIP API 编写 zip/app 包创建程序.
- SignTool.exe 使用 "standard" 验证码将签名添加到包中。
使用 Windows API 您可以使用 Packaging API and you can do the same as SignTool using The SignerSign function.
恕我直言,没有记录整个 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. You will notice this file https://github.com/facebook/fb-util-for-appx/blob/master/PrivateHeaders/APPX/Sign.h 声明应该将什么用作签名输入。我不知道他们从哪里得到这些信息。
P7X 格式只是 0x504B4358(“PKCX”)后跟 DER 格式的 PKCS #7 数据。 DER 由 ASN.1 描述。