Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows AppxSignature.p7x的结构是什么?_Windows_Win Universal App_Authenticode_Appx - Fatal编程技术网

Windows AppxSignature.p7x的结构是什么?

Windows AppxSignature.p7x的结构是什么?,windows,win-universal-app,authenticode,appx,Windows,Win Universal App,Authenticode,Appx,通用Windows应用程序位于.appx文件中,该文件只是一组文件和元数据的压缩包。大多数元数据文件在Microsoft网站上都有详细的文档记录,并且很难解析和/或重新生成。然而AppxSignature.p7x仍然是个谜 从这个图(): AppxSignature.p7x应该有AppxBlockMap.xml的散列、内容和目录散列以及签名。但是,我找不到AppxSignature.p7x文件本身的任何文档。理想情况下,我希望使用另一种工具来生成和验证此签名,例如openssl/gnutls或

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

从这个图():

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

这是一个PKCS#12(.pfx)文件,应该加密和签名。关于PKCS 12,请参见

创建.pfx的正确方法是使用WDK中的工具,请参见

使用Pvk2Pfx实用程序转换生成的.pvk和.cer文件 MakeCert已创建为.pfx文件,可与SignTool一起使用以进行签名 应用程序包:

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

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

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

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

整个MakeAppx过程没有在IMHO中记录,但实际上这里描述了区块图模式:这相对容易理解

PE文档的Authenticode签名记录在此处:


但它只适用于PE(.dll、.exe等)文件(注意,也可以对.CAB文件进行签名),我不认为SignerSign如何构建AppxSignature.p7x。但是,这里有一个开放源代码工具可以在这里执行此操作:。您会注意到这个文件声明了应该用作签名输入的内容。我不知道他们从哪里得到的信息

我已经有了一个签名证书(.pfx),我正在询问散列了哪些数据,如何存储这些数据,以及如何在不使用SignTool的情况下对其进行签名以创建AppxSignature.p7x。没有记录SignTool如何与APPX文件一起工作(只记录了PE格式的文件:),因为您应该在Windows上使用SignerSign API(这就是signtool所做的秘密)。然而,有一个开源工具,它应该做你想做的事情,叫做“fb util for appx”:@SimonMourier这是天赐之物!这就像我想要重新实现的一样!如果你将此作为答案提交,我将奖励你,因为所有这些源代码不仅记录了所有的骗局,而且是在linux(甚至mac)上生成appx包的现成工具.在非windows上制作appx是我最终追求的目标。