XVDTool est un utilitaire C # Command-Line pour manipuler les packages XVD XVD / XVC XVD. Il peut imprimer des informations détaillées sur les en-têtes de package, démissionner, remanier, en / décrypter et vérifier l'intégrité des données d'un package, il peut également convertir les fichiers XVD déchiffrés en VHD ou extraire le système de fichiers lui-même.
Jusqu'à présent, il n'a été testé qu'avec des packages Crypted (qui utilisent une autre clé de distribution hors ligne 256 bits (ODK) aux packages de vente au détail), car la clé de détail est encore inconnue. Cela rend actuellement l'outil inutile pour 90% des personnes , mais les développeurs examinent comment le fonctionnement des fichiers XVD trouvera une cartographie détaillée des structures XVD et des méthodes presque complètes pour les manipuler.
Cependant, aucune touche de chiffrement n'est fournie avec cet outil , vous devrez les trouver vous-même. Les hachages pour les touches de développement sont fournis ci-dessous. Si vous avez un kit de développement Xbox One ou un framework GamingServices (exclusif) installé, vous pouvez utiliser DurangokeyExtracteur pour extraire les clés à partir de là.
Un outil pour extraire des fichiers du XBFS (Système de fichiers de démarrage Xbox) est également inclus à l'intérieur de la NAND Xbox One, basé sur le travail original de Nandone de Tuxuser avec quelques petits ajouts. Merci Kebob d'avoir fourni OpenXVD.
Usage : xvdtool.exe [parameters] [filename]
Parameters:
-h (-help) - print xvdtool usage
-i (-info) - print info about package
-wi (-writeinfo) - write info about package to [filename].txt
-o (-output) <output-path> - specify output filename
-m (-mount) - mount package
-um (-unmount) - unmount package
-mp (-mountpoint) - Mount point for package (e.g. "X:")
-lk (-listkeys) - List known keys including their hashes / availability
-signfile <path-to-file> - Path to xvd sign key (RSA)
-odkfile <path-to-file> - Path to Offline Distribution key
-cikfile <path-to-file> - Path to Content Instance key
-sk (-signkey) <key-name> - Name of xvd sign key to use
-odk (-odkid) <id> - Id of Offline Distribution key to use (uint)
-cik (-cikguid) <GUID> - Guid of Content Instance key to use
-nd (-nodatahash) - disable data hash checking, speeds up -l and -f
-ne (-noextract) - disable data (embedded XVD/user data) extraction, speeds up -l and -f
-eu (-decrypt) - decrypt output xvd
-ee (-encrypt) - encrypt output xvd
XVDs will have a new CIK generated (if CIK in XVD header is empty), which will be encrypted with the ODK and stored in the XVD header
-hd (-removehash) - remove hash tree/data integrity from package
-he (-addhash) - add hash tree/data integrity to package
-md (-removemdu) - remove mutable data (MDU) from package
-r (-rehash) - fix data integrity hashes inside package
-rs (-resign) - sign package using the private key from rsa3_key.bin
-xe (-extractembedded) <output-file> - extract embedded XVD from package
-xu (-extractuserdata) <output-file> - extract user data from package
-xv (-extractvhd) <output-vhd> - extracts filesystem from XVD into a VHD file
-xi (-extractimage) <output-file> - extract raw filesystem image
-xf (-extractfiles) <output-folder> - extract files from XVD filesystem
The next two commands will write info about each package found to [filename].txt
also extracts embedded XVD and user data to [filename].exvd.bin / [filename].userdata.bin
-l (-filelist) <path-to-file-list> - use each XVD specified in the list
-f (-folder) <path-to-folder> - scan folder for XVD files
To mount a package in Windows you'll have to decrypt it and remove the hash tables & mutable data first (-eu -hd -md)
Pour décrypter les packages non XVC, vous aurez besoin de l'ODK correct. Le Devkit ODK est "largement connu" et un hachage est fourni ci-dessous, mais comme mentionné ci-dessus, la clé de détail est actuellement inconnue.
Les packages XVC de décrétage sont une question différente, les packages XVC utilisent une clé d'instance de contenu (CIK) qui semble être stocké quelque part en dehors du package, mais où et comment il est stocké est actuellement inconnu. Si vous avez le CIK désobfuscié correct pour un package donné, vous devriez pouvoir l'utiliser pour décrypter le package.
Les packages XVC signés de Devkit / Test utilisent un CIK statique qui est également "largement connu" (hachage fourni ci-dessous).
Pour utiliser pleinement cet outil, vous aurez besoin des fichiers suivants, qui ne sont pas inclus . L'outil fonctionnera bien sans eux, mais certaines fonctions pourraient ne pas fonctionner.
Vous pouvez utiliser l'outil inclus "DurangokeyExtractor" pour extraire ces clés du cadre Microsoft.GamingServices disponible sur Windows 10. Vérifiez simplement certains fichiers DLL / SYS / EXE - vous pourriez les trouver.
[16 byte encryption key GUID][32 byte CIK] MD5: C9E58F4E1DC611E110A849648DADCC9B
SHA256: 855CCA97C85558AE8E5FF87D8EEDB44AE6B8510601EB71423178B80EF1A7FF7F
[32 byte ODK] MD5: A2BCFA87F6F83A560BD5739586A5D516
SHA256: CA37132DFB4B811506AE4DC45F45970FED8FE5E58C1BACB259F1B96145B0EBC6
RSAFULLPRIVATEBLOB Struct MD5: 2DC371F46B67E29FFCC514C5B134BF73
SHA256: 8E2B60377006D87EE850334C42FC200081386A838C65D96D1EA52032AA9628C5
Pour d'autres clés connues et leurs hachages, utilisez le commutateur -List CMDLine -listkeys . Pour choisir une clé spécifique, utilisez les commutateurs CMDline suivants:
-sk (-signkey) <key-name> - Name of xvd sign key to use
-odk (-odkid) <id> - Id of Offline Distribution key to use (uint)
-cik (-cikguid) <GUID> - Guid of Content Instance key to use
Pour le montage des fichiers XVD / XVC, vous avez besoin de DLL du composant GamingServices. Téléchargez et installez-le via le Microsoft Store et vous devriez être prêt à partir.
XVDTool créera des dossiers Configuration / Keys au premier démarrage - Global et Local vers l'application.
Dossier de configuration globale:
C:Users<username>AppDataLocalxvdtool/home/<username>/.config/xvdtool < username>/.config/xvdtool/Users/<username>/.config/xvdtoolLe dossier de configuration local est le répertoire actuel de l'exécutable.
À l'intérieur de ces dossiers, vous pouvez stocker vos clés pour être automatiquement.
<config dir>/XvdSigningKey/<config dir>/Cik/<config dir>/Odk/ De plus, vous pouvez fournir des clés à partir de emplacements de système de fichiers arbitraires via les commutateurs CMDLINE respectifs: -signfile, -odkfile, -cikfile
Pour CIK, il n'est pas important de savoir comment les clés sont nommées si elles ont la structure binaire de [16 byte encryption key GUID][32 byte CIK] . Les touches de signature XVD devraient avoir un identifiant distinct afin que vous puissiez vous référer via le commutateur CMDLine -sk (-signkey) . L'ODK doit être nommé soit par Odkindex ( <index>.odk ) ou par son identifiant: RedOdk.odk, StandardOdk.odk etc. Pour des informations détaillées à jour, reportez-vous à: LibXboxOne/Keys/
Les packages XVD sont un format de fichier sécurisé utilisé par la Xbox One pour stocker les données, un analogue des packages STFS de la Xbox 360. Les fichiers XVD sont généralement utilisés pour stocker des images / données système tandis que les XVC (une variante légèrement modifiée de XVD) sont utilisées pour stocker les données de jeu.
Pour une explication plus détaillée des fichiers XVD, voir xvd_info.md
git clone https://github.com/emoose/xvdtool
cd xvdtool
dotnet build -c Release
Remarque: si vous souhaitez construire en tant que débogage, omettez-vous -c Release ou approvisionnement -c Debug à la place.
XVDTool a été testé sur Windows et MacOS, mais il devrait fonctionner sur tous les systèmes pris en charge par .NET Core.
Il n'y a pas d'aide donnée pour cet outil en plus de cette lecture, elle est également très expérimentale et très susceptible de vous exploser. Si vous rencontrez des bogues, veuillez soumettre une description de ce qui est arrivé au tracker du problème.
Si vous voulez vous aider avec le développement, n'hésitez pas, faites simplement une fourche de ce dépôt, apportez vos modifications dans une nouvelle branche de cette fourche, puis soumettez une demande de traction de cette branche à la branche principale de ce référentiel.