+++
title = "把 Xbox One 的《荒野大镖客 2》存档转换到 PC"
date = 2026-09-11T21:00:00+08:00
description = "从 Xbox Connected Storage 下载 RDR2 剧情存档，并在本地转换为 Windows PC 存档的完整实践。"
author = "hupose"
categories = ["tech"]
tags = ["Xbox", "RDR2", "存档转换", "Rust"]
url = "/rdr2-xbox-save-to-pc/"
+++

这件事最麻烦的地方不是“复制文件”，而是 Xbox One 不提供直接导出云存档的入口，导出的文件还套着与 PC 版不同的游戏层加密。经过真实存档对照后，我把下载、检查和转换整理成了一套可复现流程，并做成了一个 **Windows/macOS 原生 GUI 工具**：

- 源码与安全说明：[hupose/rdr2-xbox-save-converter](https://github.com/hupose/rdr2-xbox-save-converter)
- 可执行文件：[GitHub Releases](https://github.com/hupose/rdr2-xbox-save-converter/releases)

> 只支持剧情模式存档，不支持 Red Dead Online。操作前备份 Xbox 下载结果和整个 PC `Profiles` 目录。

## 整体流程

1. 在 Windows 上用 [LukeDevsE/xbcsmgrrev](https://github.com/LukeDevsE/xbcsmgrrev) 通过微软设备码授权，下载 Xbox Connected Storage；
2. 保留每个槽位的 `Save Game Data` 和 `Save Game Header`，按原目录结构打成 ZIP；
3. 从公开资料自行取得 Xbox 与 PC 两把游戏层 AES-256 key，填入本机配置；
4. 用转换器检查、转换并做完整性验证；
5. 把结果放进 RDR2 PC 版 Profile，先关闭云同步测试，成功后另存一个新槽位。

## 第一步：用 xbcsmgrrev 下载 Xbox 云存档

下载工具使用 [LukeDevsE/xbcsmgrrev](https://github.com/LukeDevsE/xbcsmgrrev)。它不是 Rockstar 或 Microsoft 官方工具，建议先阅读其源码，只从项目自己的 Release 下载。

### 安全登录原则

`xbcsmgrrev` 使用微软的设备码登录流程。正确情况下，程序给出短设备码和微软登录地址，你在浏览器的微软官方域名中登录并确认授权；**不要把微软用户名、密码或验证码输入第三方程序窗口**。这样第三方程序拿到的是授权令牌，而不是你的密码。

为了降低风险，建议使用完后：

1. 退出工具；
2. 删除它在本机保存的 refresh token/缓存；
3. 到微软账户的应用权限页面撤销此次授权；
4. 不分享下载日志，因为其中可能包含账号标识、容器名或令牌。

### 下载操作

1. 在一台 Windows 电脑上解压并运行 `xbcsmgrrev`；
2. 按界面提示选择登录，在浏览器打开它给出的微软设备登录网址；
3. 核对浏览器地址确实属于微软官方域名，输入设备码并授权 Xbox 账号；
4. 在游戏列表中找到 RDR2，枚举 Connected Storage 的容器；
5. 每个顶层容器分别下载到一个新的空目录，不要只挑看起来最新的单个文件；
6. 确认槽位目录里同时存在 `Save Game Data` 和 `Save Game Header`；
7. 把所有 `SRDR...` 槽位目录放在同一个目录下，再打成 ZIP。不要改槽位名或内部文件名。

转换器会递归查找 ZIP 中的槽位，所以外层多一层导出目录没有关系。缺少 header/data、路径异常、重复槽位或结构不一致时会直接拒绝转换。

## 第二步：准备本地 key 配置

转换需要两把 Rockstar 游戏层 AES-256 key。为避免在新仓库和 Release 里再次分发可能引发投诉的密钥，项目**没有内置、复制或下载 key**，只告诉用户原始公开资料的位置：

- Xbox key：在 [2013 年 GTA V Xbox 360 Save Block Editor 源码帖](https://community.wemod.com/t/gta-v-save-block-editor-0-0-3-x360-source/2899)中查找 `GTAV=`；
- PC key：在 [HTOS 的 `rstar_crypt.py`](https://github.com/hzhreal/HTOS/blob/31fca60508251e591afe261b927d73c76a7b3503/data/crypto/rstar_crypt.py) 中查找 `PC_KEY`。

这里不展示密钥正文。你取得的每一项都应是 64 个十六进制字符（32 字节）。在 GUI 中点击“创建空白配置模板”，填成：

```toml
xbox_save_key = "这里填 64 个十六进制字符"
pc_save_key = "这里填 64 个十六进制字符"
```

配置只放本机，不要提交到 GitHub、Issue、聊天、截图或网盘。程序还支持把 `rdr2-converter.toml` 放在可执行文件旁的便携模式。

## 第三步：转换与验证

1. 从 Release 下载与你系统相符的 ZIP，并对照 `SHA256SUMS.txt`；
2. 解压运行 GUI，选择由 `xbcsmgrrev` 结果制作的 ZIP；
3. 选择 key 配置，先点“检查存档”；
4. 选择一个**尚不存在**的输出目录；
5. 点“转换并严格验证”。

成功后会得到 `SRDR30000` 等文件以及 `conversion_manifest.json`。输出目录必须不存在，是为了避免误覆盖原文件；转换会先写入临时目录，全部验证成功后再原子改名。

本工具不是简单地“换个文件头”。它会：

- 检查 Xbox atom header 的版本、长度、标题与时间戳；
- 用 Xbox key 解密，并确认主体是合法的 `RSAV` v3；
- 检查 9 个固定块 ID、动态块边界、`CODE/S000…S008` 标签和 `ENDS`；
- 验证恰好 10 个 `CHKS` 记录及 seeded JOOAT 校验；
- 将原文用 Xbox key 回加密并逐字节对照；
- 用 PC key 加密同一 RSAV 主体，创建 PC header 与校验和；
- 再从最终 PC 文件解密、回加密，确认内容完全一致。

我用实际下载的 13 个 Xbox One 槽位做过端到端测试，Rust 版本输出与此前逐槽验证过的转换结果 SHA-256 完全一致。因为旧存档与新存档可能采用不同的合法块尺寸，验证器读取文件自己的动态布局，不把某一版 PC 存档尺寸硬编码成唯一答案。

## 第四步：导入 PC 版

RDR2 PC 存档一般位于：

```text
%USERPROFILE%\Documents\Rockstar Games\Red Dead Redemption 2\Profiles\<Profile ID>
```

建议这样做：

1. 退出游戏与 Rockstar Games Launcher；
2. 完整备份 `Profiles`；
3. 暂时关闭 Launcher 云存档；
4. 复制转换后的 `SRDR...` 文件，不复制 manifest；
5. 启动游戏，优先加载最新的手动存档；
6. 成功进入后立刻另存到一个新的 PC 手动槽位；
7. 退出游戏，再恢复云同步；遇到云端/本地冲突时选刚生成的新本地存档。

Xbox 与 PC 的成就、在线角色、平台账号状态不会随剧情存档一起迁移。个别版本差异或 DLC 状态仍可能令游戏拒绝某个槽位，所以务必保留原始备份。

## 工具为什么不需要你的账号

账号登录只发生在 Windows 上的 `xbcsmgrrev` 下载阶段。转换器本身不登录 Xbox、不包含 HTTP 客户端、不上传存档，也不会把 key 写入日志或 manifest。源码公开，核心转换逻辑在 `src/lib.rs`，GUI 只是本地文件选择界面。

这套方案把两个风险面分开：下载工具只负责取得你有权访问的 Connected Storage；转换器只处理本地 ZIP。即使如此，第三方工具仍然需要你自行评估，设备码授权用完即撤销是比较稳妥的做法。

## 免责声明

项目与 Rockstar Games、Take-Two Interactive、Microsoft、Xbox 及 `xbcsmgrrev` 作者无隶属关系。请只转换自己有权访问的剧情存档；游戏更新后格式可能变化，任何操作都应以备份为前提。
