2016-07-28 27 views
2

ユニバーサルWindowsアプリは.appxファイルに含まれています。これは単にファイルとメタデータの束のジッパーです。ほとんどのメタデータファイルは、マイクロソフトのWebサイトで広く文書化されており、解析や再生を行うのは簡単ではありません。しかし、AppxSignature.p7xは謎のままです。この図(source)からAppxSignature.p7xの構造は何ですか?

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/ Windows上でSignerSign APIを使用するはずです(これはsigntoolの下にあります)。しかし、ここで "fb-util-for-appx"と呼ばれるものを実行するオープンソースツールがあります:https://github.com/facebook/fb-util-for-appx –

+0

@SimonMourierこれはgodsent stuffです!これは私が再実装するためのもののようなものです!これを回答として提出すれば、賞金はあなたに授与されます。なぜなら、そのすべてのソースコードはすべてのトリッキーを文書化するだけでなく、Linux上でappxパッケージを生成するための準備ツールです(さらにMacでも可能です)。非ウィンドウでのappxの作成は、私が最終的に行ったことです。 – Dima

答えて

1

:あなたは アプリパッケージに署名するためのSignToolを使用することができます.PFXファイルへlockMap.xmlファイルは、パッケージ内のすべてのファイルの暗号化ブロックハッシュを格納します。このファイルは、authenticodeを使用してパッケージに署名したときに検証され、デジタル署名で保護されます。

ので、Windowsでは、2つのツールがあります。

  • MakeAppx.exeパッケージ(.zipファイル形式)と同じ時間のブロックマップファイルを作成します。これは重要です。ブロックマップの内容は.zipファイルのビットにぴったり一致しているため、このステップのジッパーツールだけではできません。いくつかのZIP APIを使用してzip/appパッケージの作成をプログラムする必要があります。
  • SignTool.exe "標準"認証コードを使用してパッケージに署名を追加します。あなたが Packaging APIを使用してMakeAppxと同じ操作を行うことができますし、The SignerSign functionを使用してのSignToolと同じ操作を行うことができ、WindowsのAPIで

MakeAppx全体のプロセスはIMHOには書かれていませんが、ブロックマップスキーマは実際にはここに記述されています。比較的理解しやすいPackage block map schema referenceです。 Windows Authenticode Portable Executable Signature Format

をしかし、それはPEのためだけだ(.dllファイル、.exeファイルなど)のファイル(それが.cabファイルに署名することも可能です注意してください)、およびIドン:

PE文書のAuthenticode署名がここに文書化されています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について、 MakeCertが作成した.pvkファイルと.cerのファイルを変換するHow to create an app package signing certificate

使用Pvk2Pfxユーティリティを参照してくださいWiki

WDKからPvk2Pfx.exeツールを使用している.PFXを作成するための正しい方法を参照してくださいあなたがにリンクのブログ記事、AppxBで説明したように

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

私はすでに署名証明書(.pfx)を持っています。どのデータがハッシュされているか、どのように保存されているのか、SignToolを使わずにAppxSignature.p7xを作成する方法について質問しています。 – Dima

関連する問題