2016-07-28 457 views
2

通用Windows應用程序位於.appx文件中,該文件只是一堆文件和元數據的zip文件。大多數元數據文件都廣泛記錄在Microsoft網站上,並且對於解析和/或重新生成微不足道。然而AppxSignature.p7x仍然是一個謎。AppxSignature.p7x的結構是什麼?

從這個圖(source): enter image description here

AppxSignature.p7x應該有AppxBlockMap.xml,內容&目錄散列的散列和簽名。但是我找不到任何AppxSignature.p7x文件本身的文檔。理想情況下,我想使用替代工具來生成和驗證此簽名,例如openssl/gnutls或類似的。對此的實際使用是更新和重新打包Linux上的應用程序,併爲Windows應用商店準備.appxupload文件。

+0

signtool如何準確地與APPX文件一起工作沒有記錄(僅記錄PE格式文件:http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/ authenticode_pe.docx),因爲你應該在Windows上使用SignerSign API(這正是signtool所涵蓋的)。然而,有一個開源工具,應該做你想在這裏所謂的「fb-util-for-appx」:https://github.com/facebook/fb-util-for-appx –

+0

@SimonMourier這是godsent的東西!這就像我之後重新實施的一樣!如果你提交這個答案作爲答案,我會獎勵你,因爲所有的源代碼不僅記錄了所有的詭計,而且它是一個現成的工具,可以在linux上生成appx包(甚至是mac)。在非Windows上製作appx是我最終所追求的。 – Dima

回答

1

正如在博客中鏈接到的AppxB lockMap.xml文件爲包中的每個文件存儲加密塊散列。當使用authenticode對包進行簽名時,此文件將通過數字簽名進行驗證和保護。

因此,在Windows上,你有兩個工具:

  • MakeAppx.exe創建包(.zip格式),並在同一時間的塊映射文件。這一點很重要,因爲塊地圖中的內容與.zip文件位密切相關,所以您不能只使用此步驟的任何壓縮工具,您必須使用某些ZIP API編寫zip/app包創建程序。
  • SignTool.exe使用「標準」authenticode添加簽名到包。

使用Windows API,您可以使用 Packaging API一樣做MakeAppx,並且可以使用The SignerSign function一樣做SignTool。

整個MakeAppx過程沒有記錄在恕我直言,但實際上在這裏描述了塊圖模式:Package block map schema reference這是比較容易理解。

的PE文件的驗證碼簽名記錄在這裏: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,它聲明瞭什麼應該用作簽名的輸入。我不知道他們從哪裏得到這些信息。

0

這是一個PKCS#12(.pfx)文件,應該加密並簽名。關於PKCS 12,請參閱Wiki

正確的方法來創建.PFX使用來自WDK Pvk2Pfx.exe工具,見How to create an app package signing certificate

使用Pvk2Pfx實用程序將.pvk和.CER文件 MakeCert創建轉換對,您可以使用SignTool使用.pfx文件簽署 的應用程序包:

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

我已經有一個簽名證書(.pfx),我在問什麼數據被哈希,如何存儲,以及如何簽名以創建AppxSignature.p7x而不使用SignTool。 – Dima