emoose/xvdtool
GitHub: emoose/xvdtool
xvdtool 是一个用于解析、解密、重签名和提取 Xbox One XVD/XVC 安全包文件的跨平台命令行工具,帮助研究人员深入了解和分析 Xbox One 系统镜像与游戏数据的内部结构。
Stars: 171 | Forks: 33
# xvdtool
[](https://github.com/emoose/xvdtool/actions?query=workflow%3Abuild)
⚠️ 不提供对泄露文件或受版权保护的源代码的支持,相关 Issue 或 Pull Request 将在不作进一步评论的情况下被关闭。 ⚠️
xvdtool 是一个用于处理 Xbox One XVD/XVC 包的 C# 命令行工具。它可以打印有关包头部的详细信息、重新签名、重新计算哈希值、对包数据进行加/解密和验证数据完整性,还可以将解密后的 XVD 文件转换为 VHD 或直接提取文件系统。
到目前为止,它仅使用开发者加密的包(其使用与零售版包不同的 256 位 **Offline Distribution Key (ODK)**)进行过测试,因为零售版的密钥目前仍是未知的。**目前这使得该工具对 90% 的人来说毫无用处**,但对于想要研究 XVD 文件工作原理的开发者来说,这里提供了 XVD 结构的详细映射以及几乎完整的操作方法。
但是,**本工具不提供任何加密密钥**,您需要自行寻找。开发者密钥的哈希值已在下方提供。
如果您安装了 Xbox One 开发套件或 GamingServices 框架(Windows 10 专有),您可以使用 DurangoKeyExtractor 从中提取密钥。
本工具还包含一个用于从 Xbox One NAND 中的 XBFS (Xbox Boot File System) 提取文件的工具,它是基于 tuxuser 的原始 [NANDOne](https://github.com/tuxuser/NANDOne) 工作并进行了一些小修改而来的。
感谢 Kebob 提供 [OpenXvd](https://github.com/Kebob/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) - 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 xvd sign key (RSA)
-odkfile - Path to Offline Distribution key
-cikfile - Path to Content Instance key
-sk (-signkey) - Name of xvd sign key to use
-odk (-odkid) - Id of Offline Distribution key to use (uint)
-cik (-cikguid) - 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) - extract embedded XVD from package
-xu (-extractuserdata) - extract user data from package
-xv (-extractvhd) - extracts filesystem from XVD into a VHD file
-xi (-extractimage) - extract raw filesystem image
-xf (-extractfiles) - 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) - use each XVD specified in the list
-f (-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)
```
要解密非 XVC 包,您需要正确的 ODK。开发套件的 ODK 是“广为人知的”,其哈希值已在下方提供,但如上所述,零售版密钥目前未知。
解密 XVC 包则是另一回事,XVC 包使用的是 **Content Instance Key (CIK)**,它似乎存储在包之外的某个地方,但其存储的位置和方式目前尚不清楚。如果您拥有某个包正确的、经过反混淆的 CIK,您应该可以使用它来解密该包。
开发套件/测试签名的 XVC 包使用的是一个静态 CIK,该密钥同样也是“广为人知的”(哈希值已在下方提供)。
## 所需文件
为了充分利用此工具,您需要以下**未随附在其中的**文件。没有这些文件工具也能正常运行,但某些功能可能无法使用。
您可以使用随附的工具“DurangoKeyExtractor”从 Windows 10 提供的 Microsoft.GamingServices 框架中提取这些密钥。
只需检查一些 DLL / SYS / EXE 文件 - 您可能会找到它们。
- 33ec8436-5a0e-4f0d-b1ce-3f29c3955039.cik:用于 XVC 加密的 CIK 密钥。
第一项应该是 SDK 工具/开发套件所使用的密钥。
格式:`[16 byte encryption key GUID][32 byte CIK]`
```
MD5: C9E58F4E1DC611E110A849648DADCC9B
SHA256: 855CCA97C85558AE8E5FF87D8EEDB44AE6B8510601EB71423178B80EF1A7FF7F
```
- RedOdk.odk:SDK 工具/开发套件所使用的 ODK 密钥
格式:`[32 byte ODK]`
```
MD5: A2BCFA87F6F83A560BD5739586A5D516
SHA256: CA37132DFB4B811506AE4DC45F45970FED8FE5E58C1BACB259F1B96145B0EBC6
```
- RedXvdPrivateKey.rsa:SDK 工具用于验证/签名包的 RSA 私钥。
格式:`RSAFULLPRIVATEBLOB` 结构体
```
MD5: 2DC371F46B67E29FFCC514C5B134BF73
SHA256: 8E2B60377006D87EE850334C42FC200081386A838C65D96D1EA52032AA9628C5
```
有关其他已知密钥及其哈希值,请使用 `-listkeys` 命令行开关。
要选择特定的密钥,请使用以下命令行开关:
```
-sk (-signkey) - Name of xvd sign key to use
-odk (-odkid) - Id of Offline Distribution key to use (uint)
-cik (-cikguid) - Guid of Content Instance key to use
```
### 挂载 XVD
要挂载 XVD/XVC 文件,您需要 [GamingServices](https://www.microsoft.com/en-us/p/gaming-services/9mwpm2cqnlhn?activetab=pivot:overviewtab) 组件中的 DLL。
通过 Microsoft Store 下载并安装它即可正常使用。
## 存储密钥的可能位置
XVDTool 首次启动时将创建全局和应用程序本地的配置/密钥文件夹。
全局配置文件夹:
* Windows: `C:\Users\\AppData\Local\xvdtool`
* Linux: `/home//.config/xvdtool`
* Mac OS X: `/Users//.config/xvdtool`
本地配置文件夹是可执行文件所在的当前目录。
您可以将密钥存储在这些文件夹中以便自动加载。
* XVD 签名密钥:`/XvdSigningKey/`
* Content Instance 密钥:`/Cik/`
* Offline distribution 密钥:`/Odk/`
此外,您可以通过相应的命令行开关:`-signfile, -odkfile, -cikfile`,从文件系统中的任意位置提供密钥。
### 命名密钥
对于 CIK,只要其具有 `[16 byte encryption key GUID][32 byte CIK]` 的二进制结构,名称并不重要。
XVD 签名密钥应具有明确的标识符,以便您可以通过 `-sk (-signkey)` 命令行开关来引用它们。
ODK 的命名需要通过 OdkIndex(`.odk`)或其标识符来指定:`RedOdk.odk, StandardOdk.odk 等等`。
有关最新的详细信息,请参阅:`LibXboxOne/Keys/`
## 什么是 XVD?
XVD 包是 Xbox One 用于存储数据的一种安全文件格式,类似于 Xbox 360 的 STFS 包。XVD 文件通常用于存储系统映像/数据,而 XVC(XVD 的一个稍微修改过的变体)则用于存储游戏数据。
有关 XVD 文件的更详细说明,请参见 xvd_info.md
## 使用的第三方库
* BouncyCastle (https://www.bouncycastle.org/csharp/)
* NDesk.Options (http://www.ndesk.org/Options)
* DiscUtils (https://github.com/DiscUtils/DiscUtils)
## 从源代码构建
### 要求
- [.NET 7.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) - 为方便起见,请选择 x64 安装程序
### 构建
- 安装 SDK 后,打开一个新的 PowerShell 窗口
- 克隆仓库
```
git clone https://github.com/emoose/xvdtool
```
- 进入目录
```
cd xvdtool
```
- 构建
```
dotnet build -c Release
```
注意:如果您想要构建 DEBUG 版本,请省略 `-c Release` 或改用 `-c Debug`。
## 帮助 / 支持
xvdtool 已在 Windows 和 MacOS 上进行了测试,但它应该能在 .NET Core 支持的所有系统上运行。
除了本 README 之外,本工具不提供其他任何帮助信息,而且它目前仍处于**非常**实验性的阶段,**非常**容易出问题。如果您确实遇到了任何错误,请将发生的情况描述提交到 Issue 追踪器。
如果您愿意协助开发,非常欢迎。只需 Fork 本仓库,在您 Fork 出去的仓库的新分支中进行修改,然后从该分支向本仓库的 master 分支提交 Pull Request 即可。
标签:DurangoKeyExtractor, HTTP工具, NAND提取, ODK密钥, SOC Prime, VHD转换, XBFS, Xbox One, XVC文件, XVD文件, Zenmap, 云资产清单, 加解密, 开发工具, 数据哈希, 数据完整性, 文件操纵, 文件系统提取, 文件系统解析, 游戏主机安全, 游戏机自制, 逆向工程