Dieses Tool dient dazu Xbox One XVC & XVD Container zu extrahieren und liefert detaillierte Informationen aus dem XVD Header ( Signierung, Hashing, Ver - Entschlüsselung). Zudem kann es die Datenintegrität der Container vergleichen und einige entschlüsselte XVD Container ins VHD Format umwandeln. Zur Zeit ist die ganze Geschichte an XVD Files getestet worden, die mit einem Dev Kit verschlüsselt worden sind. Der Retail, 256-bit original
Entschlüsselungskey, ist zur Zeit unbekannt. Mann geht von Beobachtungen, von älteren Systemfiles aus, das dieser im Verschlüsselten Teil des Xbox One Nands, innerhalb eines KeyVaults (sp_s.cfg) gespeichert ist.
Die Ver- und Entschlüsselung des KeyVaults, wird von einer Hardware Einheit innerhalb der CPU geregelt, die sich PSP (Platform Security Processor) nennt. So wie es momentan aussieht, enthält dieser PSP verschiedene Schlüssel, die für jede Konsole natürlich verschieden sind. Daher wird wohl nur ein direkter Angriff auf das HostOS und/oder SystemOS helfen, um Zugang zum PSP (Platform Security Processor) zu bekommen, um die Keys für seine Konsole direkt abzugreifen, da wohl nur das OS direkten Zugriff auf den PSP hat. Bis also ein Weg gefunden worden ist, um an seine eigenen Konsolen Keys zu bekommen, wird dieses Tool wohl für den Großteil der Xbox One User uninteressant sein. Für Entwickler, Hacker selber, kann das Tool aber wichtige Dienste in der Analyse der XVD Container leisten. Wie dem auch sei, in dem Tool werden keine (Ent)Verschlüsselungskeys mitgeliefert.
Wie wird das Tool benutzt
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
-nd (-nodatahash) - disable data hash checking, speeds up -l and -f
-nn (-nonatives) - disable importing native windows functions (ncrypt etc)
note that signature verification/resigning won't work with this!
-eu (-decrypt) = decrypt output xvd
-ee (-encrypt) [keyid] = encrypt output xvd
(optional keyid param for XVCs to choose which key inside cik_keys.bin to use)
XVDs will have a new CIK generated, which will be encrypted with the odk_key.bin and stored in the XVD header
-hd (-removehash) - remove hash tree/data integrity from package
-he (-addhash) - add hash tree/data integrity to 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, doesn't seem to work properly with XVC packages yet (also removes NTFS compression from output VHD so Windows can mount it, use -nn to disable)
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
Note that to mount an XVD/XVC in Windows you'll have to decrypt it and remove the hash tables
Entschlüsseln von nicht XVC Containern.
Zum entschlüsseln von "
nicht XVC Containern", wird der Origin Decryption Key benötigt. Diesen sollte man als odk_key.bin abspeichern und in den gleichen Ordner speichern, wie das XVD Tool selber. Da wir in diesem Fall aber noch nicht unseren eigenen Key haben, müssen wir uns deshalb in der Zwischenzeit, mit dem Origin Decryption Key, aus einem Dev Kit begnügen, der nämlich bekannt ist.
Entschlüsseln von XVC Containern.
Das Entschlüsseln von XVC Containern selber, ist eine etwas andere Geschichte. XVC Container selber nutzen eine
CIK (keiner weiß noch nicht genau, was genau dahinter steckt), die außerhalb des XVC Container liegt (Im Gegensatz zu anderen nicht XVC Containern, haben diese die
CIK, direkt verschlüsselt im Container, welche mit dem Origin Decryption Key, entschlüsselt wird). XVC Container die mit einem Dev/Test- Kit signiert worden sind, benutzen eine statische
CIK, welche bekannt ist. Diese sollte als cik_key.bin abgespeichert werden. Retail Container wiederum, haben die
CIK in verschlüsselte Form, entweder auf der Spiele Disk liegen, oder bekommen sie innerhalb eines Spieles, das von Xbox Live bezogen worden ist.
Benötigte Files. (werden von uns nicht zur Verfügung gestellt. Das uploaden ins Forum ist verboten)
Damit man das Tool in vollem Funktionsumfang benutzen kann, werden einige Files benötigt, welche nicht enthalten sind. Zur Sicherheit sind noch jeweils die MD5-Prüfsumme bei den benötigten Files angegeben, damit Ihr sicher gehen könnt, das Ihr keine Grütze auf dem Rechner habt. Also damit wir uns richtig verstehen, Ihr müsst Euch selber darum kümmern, wie Ihr an die Files kommt.
- cik_keys.bin (CIK Key für die Entschlüsselung, sollte vom Dev Kit, für die SDK Tools verwendet werden ), format: [16 byte encryption key GUID][32
byte CIK]
md5sum: C9E58F4E1DC611E110A849648DADCC9B
- odk_key.bin (werden auch in Verbindung mit den SDK Tools verwendet), format: [32 byte ODK]
md5sum: A2BCFA87F6F83A560BD5739586A5D516
- rsa3_key.bin (RSA Key wird von den SDK Tools verwendet, um die Container zu signieren), format: RSAFULLPRIVATEBLOB struct
md5sum: 2DC371F46B67E29FFCC514C5B134BF73
Diese aufgelisteten Files, sollten in das gleiche Verzeichnis gespeichert werden, wie das XVD Tool selber. (Das XVD Tool schaut trotzdem in alle angeschlossenen Laufwerke im System nach den Files, so das man die Exe vom Programm, auch an einem anderen Ort ablegen könnte, ohne das man extra noch die Keys zum entsprechenden Ort kopieren müsste).
Quellcode des Programm in C#.
Im übrigen müssen die Sourcen (Quellen) natürlich mit einem Compiler, z. B. Visual Studio C# Express (kostenlos), oder andere übersetzt werden, damit man eine entsprechende ausführbare Datei enthält, die man auf dem (Windows) PC starten kann.
Update 22.03.2019
Emoose hat eine neue Version seines Tools released.
Die Neuerungen sind der nachfolgenden Changelog zu entnehmen:
Update 13.08.2020
Emoose hat eine neue Version veröffentlicht die einige Fixes, adds & changes beinhaltet.
Nachfolgend das Changelog:
## [0.52] - 2020-08-10
### Added
- General: Start using CHANGELOG.md
- XBFSTool: Add printing of certificate info via -c switch
- XVDTool: AddMutableData function, -addmdu cmdline switch
- XVDTool: For XVC decryption, iterate through all loaded CIKs to find a matching one
- XVDTool: Support supplying mountpoint to xvd mounting (-mp / -mountpoint)
- XvdStructs: Add new XvdHeader fields -> resilient data
- XvdStructs: Skip signature verification on console-signed xvds
- XvdFilesystem: Implement XvdFilesystem operations via XvdFilesystemStream
- XvdFilesystem: Utilize DiscUtils for vhd conversion
- XvdFile: Print filesystem info
- XvdFile: Add Add/RemoveMutableData function & -addmdu/-removemdu tool option
- XvdFile: Move data-removal logic from RemoveHashTree into seperate RemoveData function
- XvdFile: Allow fetching dataUnit from hashtables during CryptSectionXts
### Changed
- General: Bump to netcoreapp3.1 / netstandard2.1
- XvdFile: Move duplicated "get hash entry offset" code to its own function
- XvdFile: Remove unneeded copy constructors for structs
- XVDTool: Make changes so that Save() is only called once in the session
### Fixed
- XvdFile: Add fixups for XvdUpdateSegments
- XvdMath: Fix InBlockOffset calculation
- XvdFile: Improve VerifyXvcHash & fix AddHashTree
- XvdFile: Print UpdateSegments/RegionSpecifiers as table, fix reading RegionSpecifiers
- XVDTool: Fix AppDirs path creation for Linux
s as table, fix reading RegionSpecifiers
- XVDTool: Fix AppDirs path creation for Linux
Update 12.09.2020
Emoose hat eine neue Version veröffentlicht die einige Fixes, adds & changes beinhaltet.
[b]Nachfolgend das Changelog:[/b]
## [0.53] - 2020-09-11
### Fixed
- XVDTool: OverflowError on "-xf" / extract files for big files
Quelle: github.com