XVDTool es una utilidad de línea de comandos C# para manipular los paquetes XBox One XVD/XVC. Puede imprimir información detallada sobre encabezados de paquetes, renunciar, rehacer, ser/descifrar y verificar la integridad de datos de un paquete, también puede convertir archivos XVD descifrados a VHD o extraer el sistema de archivos en sí.
Hasta ahora, solo se ha probado con paquetes de desarrollo de desarrollo (que utilizan una clave de distribución fuera de línea de 256 bits (ODK) para los paquetes minoristas), ya que la clave minorista aún se desconoce. Actualmente, esto hace que la herramienta sea inútil para el 90% de las personas , pero los desarrolladores que buscan cómo el trabajo de los archivos XVD encontrará una asignación detallada de las estructuras XVD y métodos casi completos para manipularlas.
Sin embargo, no se proporcionan claves de cifrado con esta herramienta , tendrá que encontrarlas usted mismo. Los hash para las teclas de desarrollo se proporcionan a continuación. Si tiene un kit de desarrollo de Xbox One o un marco de GamingServices (Windows10-exclusivo) instalado, puede usar DurangokeyExtractor para extraer las teclas desde allí.
También se incluye una herramienta para extraer archivos del XBFS (sistema de archivos de arranque de Xbox) dentro de Xbox One Nand, basado en el trabajo original de Nandone de Tuxuser con algunas pequeñas adiciones. Gracias Kebob por proporcionar 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)
Para descifrar los paquetes no XVC, necesitará el ODK correcto. El Devkit ODK es "ampliamente conocido" y se proporciona un hash a continuación, pero como se mencionó anteriormente, la clave minorista es actualmente desconocida.
Decrytar los paquetes XVC es un asunto diferente, los paquetes XVC usan una clave de instancia de contenido (CIK) que parece almacenarse en algún lugar fuera del paquete, sin embargo, se desconoce actualmente dónde y cómo se almacena. Si tiene el CIK deobfuscado correcto para un paquete determinado, debería poder usarlo para descifrar el paquete.
Los paquetes XVC de DevKit/Test Signed usan un CIK estático que también es "ampliamente conocido" (hash que se proporciona a continuación).
Para hacer uso completo de esta herramienta, necesitará los siguientes archivos, que no están incluidos . La herramienta funcionará bien sin ellos, pero algunas funciones podrían no funcionar.
Puede usar la herramienta incluida "DurangokeyExtractor" para extraer estas teclas del marco de Microsoft.GamingServices disponible en Windows 10. Simplemente verifique algunos archivos DLL / SYS / EXE; puede encontrarlas.
[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
Para otras claves conocidas y sus hashes, use el interruptor cmdline -listkeys . Para elegir una clave específica, use los siguientes interruptores de cmdline:
-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
Para el montaje de archivos XVD/XVC, necesita DLLS del componente GamingServices. Descargue e instálelo a través de la tienda de Microsoft y debería estar listo para comenzar.
XVDTool creará carpetas de configuración/teclas en el primer inicio: global y local para la aplicación.
Carpeta de configuración global:
C:Users<username>AppDataLocalxvdtool/home/<username>/.config/xvdtool/Users/<username>/.config/xvdtoolLa carpeta de configuración local es el directorio actual del ejecutable.
Dentro de estas carpetas, puede almacenar sus teclas para que se aceleren.
<config dir>/XvdSigningKey/<config dir>/Cik/<config dir>/Odk/ Además, puede proporcionar claves de ubicaciones de sistema de archivos arbitrarios a través de los interruptores CMDLine respectivos: -signfile, -odkfile, -cikfile
Para CIK no es importante cómo se nombran las claves si tienen la estructura binaria de [16 byte encryption key GUID][32 byte CIK] . Las teclas de firma de XVD deben tener un identificador distinto para que pueda consultar ellas a través del interruptor cmdline -sk (-signkey) . ODK debe ser nombrado por OdKindex ( <index>.odk ) o por su identificador: RedOdk.odk, StandardOdk.odk etc. para obtener información detallada actualizada, consulte: LibXboxOne/Keys/
Los paquetes XVD son un formato de archivo seguro utilizado por Xbox One para almacenar datos, un análogo a los paquetes STFS de Xbox 360. Los archivos XVD generalmente se usan para almacenar imágenes/datos del sistema, mientras que los XVC (una variante ligeramente modificada de XVDS) se usan para almacenar datos del juego.
Para obtener una explicación más detallada de los archivos XVD, consulte XVD_INFO.MD
git clone https://github.com/emoose/xvdtool
cd xvdtool
dotnet build -c Release
Nota: Si desea construir como depuración, omitir -c Release o suministro -c Debug en su lugar.
XVDTool se ha probado en Windows y MacOS, pero debería funcionar en todos los sistemas admitidos por .NET Core.
No hay ayuda para esta herramienta además de este readme, actualmente también es muy experimental y es muy probable que explote en su cara. Si encuentra algún error, envíe una descripción de lo que sucedió con el rastreador de problemas.
Si desea ayudar con el desarrollo, siéntase libre, simplemente haga una bifurcación de este repositorio, realice sus cambios en una nueva rama de ese bifurcado y luego envíe una solicitud de extracción de esa rama a la rama maestra de este repositorio.