XVDTool é um utilitário de linha de comando C# para manipular pacotes Xbox One XVD/XVC. Ele pode imprimir informações detalhadas sobre cabeçalhos de pacotes, renunciar, re -hash, pt/descriptografar e verificar a integridade dos dados de um pacote, também pode converter arquivos XVD descriptografados para VHD ou extrair o próprio sistema de arquivos.
Até agora, ele só foi testado com pacotes de Cripts dev (que usam uma chave de distribuição offline (ODK) de 256 bits para pacotes de varejo), pois a chave de varejo ainda é desconhecida. Atualmente, isso torna a ferramenta inútil para 90% das pessoas , mas os desenvolvedores que analisam como os arquivos XVD funcionam encontrarão um mapeamento detalhado das estruturas XVD e métodos quase completos para manipulá-los.
No entanto, nenhuma chave de criptografia é fornecida com essa ferramenta , você terá que encontrá -las você mesmo. Hashes para as teclas de dev são fornecidos abaixo. Se você possui um kit de desenvolvimento do Xbox One ou uma estrutura de serviços GamingServices (Windows10-exclusiva) instalada, poderá usar o DurangokeyExtractor para extrair as chaves de lá.
Também está incluída uma ferramenta para extrair arquivos do XBFS (sistema de arquivo de inicialização do Xbox) dentro do Xbox One Nand, com base no trabalho Nandone original do Tuxuser com algumas pequenas adições. Obrigado Kebob por fornecer 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 descriptografar os pacotes não XVC, você precisará do ODK correto. O Devkit Odk é "amplamente conhecido" e os hashes são fornecidos abaixo, mas como mencionado acima da chave de varejo, atualmente é desconhecido.
Descriptografar os pacotes XVC é uma questão diferente, os pacotes XVC usam uma chave de instância de conteúdo (CIK) que parece estar armazenada em algum lugar fora do pacote, no entanto, onde e como ela é armazenada é atualmente desconhecida. Se você possui o CIK devuscado correto para um determinado pacote, poderá usá -lo para descriptografar o pacote.
Os pacotes XVC assinados pelo DevKit/TEST usam um CIK estático que também é "amplamente conhecido" (hash fornecido abaixo).
Para fazer pleno uso dessa ferramenta, você precisará dos seguintes arquivos, que não estão incluídos . A ferramenta funcionará bem sem eles, mas algumas funções podem não funcionar.
Você pode usar a ferramenta incluída "durangokeyextractor" para extrair essas teclas da estrutura Microsoft.GamingServices disponíveis no Windows 10. Basta verificar alguns arquivos DLL / SYS / EXE - você pode encontrá -los.
[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 outras chaves conhecidas e seus hashes, use o comutador cmdline -listkeys . Para escolher uma chave específica, use os seguintes interruptores 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 montagem de arquivos XVD/XVC, você precisa de DLLs do componente GamingServices. Faça o download e instale -o na Microsoft Store e você deve estar pronto.
O XVDTool criará pastas de configuração/chaves no primeiro início - global e local para o aplicativo.
Pasta de configuração global:
C:Users<username>AppDataLocalxvdtool/home/<username>/.config/xvdtool/Users/<username>/.config/xvdtoolA pasta de configuração local é o diretório atual do executável.
Dentro dessas pastas, você pode armazenar suas chaves para serem transportadas automaticamente.
<config dir>/XvdSigningKey/<config dir>/Cik/<config dir>/Odk/ Além disso, você pode fornecer chaves dos locais do sistema de arquivos arbitrários por meio dos respectivos interruptores cmdline: -signfile, -odkfile, -cikfile
Para o CIK, não é importante como as chaves são nomeadas se tiverem a estrutura binária de [16 byte encryption key GUID][32 byte CIK] . As teclas de assinatura XVD devem ter um identificador distinto, para que você possa consultar a Switch CMDLINE -sk (-signkey) . ODK precisa ser nomeado pelo ODKIndex ( <index>.odk ) ou por seu identificador: RedOdk.odk, StandardOdk.odk etc. Para obter informações detalhadas para atualizar, consulte: LibXboxOne/Keys/
Os pacotes XVD são um formato de arquivo seguro usado pelo Xbox One para armazenar dados, um análogo aos pacotes STFS do Xbox 360. Os arquivos XVD geralmente são usados para armazenar imagens/dados do sistema enquanto XVCs (uma variante ligeiramente modificada de XVDs) são usados para armazenar dados do jogo.
Para uma explicação mais detalhada dos arquivos XVD, consulte xvd_info.md
git clone https://github.com/emoose/xvdtool
cd xvdtool
dotnet build -c Release
NOTA: Se você deseja construir como depuração, omite -c Release ou suprimento -c Debug .
O XVDTool foi testado no Windows e MacOS, mas deve funcionar em todos os sistemas suportados pelo .NET Core.
Não há ajuda para essa ferramenta além deste readme, atualmente também é muito experimental e muito provável que exploda na sua cara. Se você encontrar algum bug, envie uma descrição do que aconteceu com o rastreador de problemas.
Se você quiser ajudar com o desenvolvimento, sinta -se livre, basta fazer um garfo deste repositório, faça suas alterações em uma nova filial desse garfo e envie uma solicitação de tração da filial para a filial principal deste repositório.