2016-07-28 3 views
2

Les applications Windows universelles sont dans un fichier .appx, qui est simplement un fichier compressé d'un ensemble de fichiers et de métadonnées. La plupart des fichiers de métadonnées sont largement documentés sur le site Web de Microsoft et sont triviaux à analyser et/ou à régénérer. Cependant AppxSignature.p7x reste un mystère.Quelle est la structure de AppxSignature.p7x?

A partir de ce schéma (source): enter image description here

AppxSignature.p7x devrait avoir hash des hashes annuaire AppxBlockMap.xml, contenu &, et une signature. Cependant, je ne trouve aucune documentation sur le fichier AppxSignature.p7x lui-même. Idéalement, j'aimerais utiliser un outil alternatif pour produire et vérifier cette signature, par ex. openssl/gnutls ou similaire. Une utilisation pratique pour cela est de mettre à jour et reconditionner les applications sous Linux, et de préparer le fichier .appxupload pour le Windows Store.

+0

Le fonctionnement de signtool avec le fichier APPX n'est pas documenté (il est uniquement documenté pour les fichiers au format PE: http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/ authenticode_pe.docx), car vous êtes supposé utiliser l'API SignerSign sous Windows (c'est ce que connecte le signtool). Cependant, il existe un outil open source qui devrait faire ce que vous voulez ici appelé "fb-util-for-appx": https://github.com/facebook/fb-util-for-appx –

+0

@SimonMourier c'est un truc de dieu! C'est comme ce que j'étais après pour ré-implémenter! Si vous soumettez ceci comme une réponse, je vous accorderai la prime, car tout ce code source ne documente pas seulement tous les tricheries, mais c'est un outil prêt à générer des paquets appx sur Linux (et même sur Mac). Faire appx sur les non-fenêtres est ce que j'étais finalement après. – Dima

Répondre

1

Comme décrit dans le billet de blog vous un lien vers le AppxB Le fichier lockMap.xml stocke les hachages de blocs cryptographiques pour chaque fichier du package. Ce fichier est vérifié et sécurisé avec une signature numérique lorsque le paquet est signé en utilisant authenticode.

Ainsi, sur les fenêtres, vous disposez de deux outils:

  • MakeAppx.exe qui crée le paquet (format .zip) et le fichier blockmap en même temps. Ceci est important, car ce qui est dans la carte des blocs correspond étroitement aux bits du fichier .zip, vous ne pouvez pas utiliser d'outil de compression pour cette étape, vous devez programmer la création du paquet zip/app en utilisant une API ZIP.
  • SignTool.exe qui ajoute la signature au package à l'aide du code d'authentification "standard".

Avec l'API Windows, vous pouvez faire la même chose que MakeAppx en utilisant la Packaging API et vous pouvez faire la même chose que SignTool en utilisant The SignerSign function.

L'ensemble du processus MakeAppx n'est pas documenté à mon humble avis, mais le schéma de bloc est en fait décrit ici: Package block map schema reference qui est relativement facile à comprendre.

La signature Authenticode pour le document PE est documenté ici: Windows Authenticode Portable Executable Signature Format

Mais il est uniquement pour les fichiers PE (.dll, .exe, etc.) (notez qu'il est aussi possible de signer des fichiers .cab), et je ne Ne pensez pas à la façon dont SignerSign construit AppxSignature.p7x est documenté. Cependant, il existe un outil open source ici qui le fait ici: https://github.com/facebook/fb-util-for-appx. Vous remarquerez ce fichier https://github.com/facebook/fb-util-for-appx/blob/master/PrivateHeaders/APPX/Sign.h qui déclare ce qui devrait être utilisé comme entrée pour la signature. Je n'ai aucune idée d'où ils ont eu cette information.

0

Ceci est un fichier PKCS # 12 (.pfx) qui doit être crypté et signé. A propos de PKCS 12, voir Wiki

La bonne façon de créer .pfx est en utilisant l'outil Pvk2Pfx.exe du WDK, voir How to create an app package signing certificate

Utilisez l'utilitaire Pvk2pfx pour convertir les fichiers .pvk et .cer MakeCert créé dans un fichier .pfx que vous pouvez utiliser avec SignTool pour signer un paquet d'application:

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

J'ai déjà un certificat de signature (.pfx), je demande quelles données sont hachées, comment elles sont stockées et comment elles sont signées pour créer AppxSignature.p7x sans utiliser SignTool. – Dima