emoose/xvdtool

GitHub: emoose/xvdtool

xvdtool 是一个用于解析、解密、重签名和提取 Xbox One XVD/XVC 安全包文件的跨平台命令行工具,帮助研究人员深入了解和分析 Xbox One 系统镜像与游戏数据的内部结构。

Stars: 171 | Forks: 33

# xvdtool [![GitHub Workflow - Build](https://img.shields.io/github/actions/workflow/status/emoose/xvdtool/build.yml?branch=master)](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, 云资产清单, 加解密, 开发工具, 数据哈希, 数据完整性, 文件操纵, 文件系统提取, 文件系统解析, 游戏主机安全, 游戏机自制, 逆向工程