当前位置: 首页 > news >正文

XGP存档提取器:逆向工程微软游戏保存系统的技术实现

XGP存档提取器:逆向工程微软游戏保存系统的技术实现

【免费下载链接】XGP-save-extractorPython script to extract savefiles out of Xbox Game Pass for PC games项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor

XGP存档提取器是一个Python脚本,用于从Xbox Game Pass for PC游戏中提取和备份存档文件。该项目解决了微软商店版游戏存档难以访问和迁移的技术难题,通过逆向工程微软的通用游戏保存系统(wgs),实现了跨平台存档转换的自动化流程。

微软游戏保存系统架构解析

微软的Xbox Game Pass for PC版本游戏使用了一套专有的存档管理系统,与传统的Steam或Epic Games版本存在显著差异。核心存档数据存储在%LOCALAPPDATA%\Packages\目录下,每个游戏都有独特的包名格式,如DeveloperOrPublisherName.GameName_RandomID

容器化存储结构

XGP存档采用多层容器化设计,主要包含以下组件:

  1. 容器索引文件(containers.index):记录所有存档容器的元数据信息
  2. 容器目录结构:每个容器对应一个GUID命名的文件夹
  3. 文件映射机制:通过GUID系统管理实际存档文件
def find_user_containers(pkg_name: str) -> List[Tuple[int | str, Path]]: wgs_dir = packages_root / pkg_name / "SystemAppData/wgs" for entry in wgs_dir.iterdir(): if not entry.is_dir(): continue if entry.name == "t": continue if "backup" in entry.name: has_backups = True continue if len(entry.name.split("_")) == 2: valid_user_dirs.append(entry)

二进制格式解析

微软wgs系统使用特定的二进制格式存储存档数据,包含UTF-16编码的字符串、FILETIME时间戳和GUID标识符:

def read_utf16_str(f, str_len=None) -> str: if not str_len: str_len = struct.unpack("<i", f.read(4))[0] return f.read(str_len * 2).decode("utf-16").rstrip("\0") def read_filetime(f) -> datetime: filetime = struct.unpack("<Q", f.read(8))[0] filetime_seconds = filetime / 10_000_000 return filetime_epoch + timedelta(seconds=filetime_seconds)

多游戏兼容性处理框架

XGP存档提取器实现了模块化的处理器架构,支持多种游戏存档格式。项目采用基于JSON的配置系统定义不同游戏的处理器规则:

处理器类型分类

处理器类型描述适用游戏示例
1c1f1容器1文件,容器名即文件名Atomic Heart, Hi-Fi RUSH
1cnf1容器多文件,容器包含所有存档Chained Echoes, Hades
1cnf-folder容器代表文件夹结构Persona 5 Royal, Ninja Gaiden Sigma
特殊处理器游戏特定的复杂处理逻辑Starfield, Control, Lies of P

配置驱动的处理器系统

{ "name": "Starfield", "package": "BethesdaSoftworks.ProjectGold_3275kfvn8vcwc", "handler": "starfield" }

每个处理器实现特定的文件映射和转换逻辑,例如Starfield处理器需要将多个容器文件拼接为标准的SFS格式:

def get_save_paths(supported_games, store_pkg_name, containers, temp_dir): handler_name = supported_games[store_pkg_name]["handler"] if handler_name == "starfield": # Starfield特定处理逻辑 for container in containers: is_new_format = "toc" in [f["name"] for f in container["files"]] # 处理新旧格式兼容性

逆向工程实现细节

容器索引解析算法

项目通过解析containers.index文件获取完整的存档结构信息。该文件包含容器数量、包显示名称、商店包名、创建时间戳以及每个容器的详细信息:

def read_user_containers(user_wgs_dir: Path): containers_idx_path = containers_dir / "containers.index" with containers_idx_path.open("rb") as f: f.read(4) # 未知头部 container_count = struct.unpack("<i", f.read(4))[0] pkg_display_name = read_utf16_str(f) store_pkg_name = read_utf16_str(f).split("!")[0] creation_date = read_filetime(f)

GUID文件映射机制

微软系统使用GUID作为文件标识符,容器内文件通过双重GUID验证确保数据一致性:

file_guid = uuid.UUID(bytes_le=cf.read(16)) file_guid_2 = uuid.UUID(bytes_le=cf.read(16)) if file_guid == file_guid_2: file_path = container_path / file_guid.hex.upper() else: # 处理GUID不匹配的异常情况 file_1_exists = file_guid_1_path.is_file() file_2_exists = file_guid_2_path.is_file()

跨平台存档转换策略

文件路径标准化

不同游戏平台使用不同的存档路径约定,XGP存档提取器实现了智能路径转换:

游戏XGP格式Steam/Epic格式转换规则
Lies of P数字前缀+容器名去除数字前缀+.sav过滤前导数字
Palworld连字符分隔斜杠目录结构+.sav"-"替换为"/"
Forza Horizon 5容器名.文件名容器名.文件名点号连接
Coral IslandBackup前缀Backup/目录结构前缀转目录

临时文件处理系统

某些游戏需要生成中间文件才能创建兼容的存档格式。项目使用临时目录管理系统处理这些特殊情况:

temp_dir = tempfile.TemporaryDirectory(ignore_cleanup_errors=True) temp_container_disp_name_path = Path(temp_dir.name) / f"{container['name']}_--containerDisplayName.chunk"

错误处理与同步检测

云同步状态监控

Xbox云存档同步过程中可能产生不完整的存档文件。项目实现了同步状态检测机制:

def print_sync_warning(title: str): print(f" !! {title} !!") print(" Xbox cloud save syncing might not be complete, try again later.") print(" Extracted saves for this game might be corrupted!")

容器完整性验证

系统会检查容器文件的完整性,包括文件存在性验证和GUID一致性检查:

if not container_file_path.is_file(): print_sync_warning(f'Missing container "{container_name}"') continue

用户数据隔离与多账户支持

Xbox用户标识解析

项目支持多用户环境,通过解析Xbox应用的用户配置文件识别不同账户:

def get_xbox_user_name(user_id: int) -> str | None: xbox_app_package = "Microsoft.XboxApp_8wekyb3d8bbwe" live_gamer_path = packages_root / xbox_app_package / "LocalState/XboxLiveGamer.xml"

用户目录自动发现

系统自动识别当前用户对应的存档目录,支持多用户同时使用:

user_id_hex, title_id_hex = valid_user_dir.name.split("_", 1) user_id = int(user_id_hex, 16) user_name = get_xbox_user_name(user_id)

性能优化与批量处理

增量式存档发现

项目采用惰性发现机制,只在需要时扫描游戏目录:

def discover_games(supported_games: Dict[str, Any]) -> List[str]: found_games = [] for pkg_name in supported_games.keys(): pkg_path = packages_root / pkg_name if pkg_path.exists(): found_games.append(pkg_name) return found_games

并行处理架构

虽然当前实现是顺序处理,但架构设计支持未来的并行化扩展。每个游戏的处理完全独立,可以轻松实现多线程处理。

扩展性与维护性设计

模块化处理器接口

新的游戏支持只需在games.json中添加配置并实现对应的处理器函数:

def get_save_paths(games, store_pkg_name, containers, temp_dir): handler_name = games[store_pkg_name]["handler"] handler_args = games[store_pkg_name].get("handler_args") or {} if handler_name == "custom-handler": # 自定义处理器实现 return custom_processor(containers, handler_args)

向后兼容性保证

项目维护了详细的兼容性列表,包括已验证工作和已知不兼容的游戏:

状态游戏数量处理策略
确认工作30+完全支持
未确认15+需要测试
不兼容10+格式差异无法转换

实际应用场景与技术价值

存档迁移工作流

  1. 自动发现:扫描系统已安装的XGP游戏
  2. 格式识别:根据游戏包名匹配处理器
  3. 数据提取:解析wgs容器结构
  4. 格式转换:应用游戏特定的转换规则
  5. 打包输出:生成ZIP格式的兼容存档

开发者贡献流程

项目提供了标准化的新游戏支持请求模板,包含详细的存档收集指南和测试要求。社区开发者可以通过分析游戏存档结构,实现新的处理器模块。

技术研究价值

XGP存档提取器的实现揭示了微软游戏保存系统的内部工作机制,为游戏存档格式研究、跨平台数据迁移和游戏保存系统逆向工程提供了宝贵的技术参考。

该项目展示了如何通过系统化的逆向工程方法,破解专有文件格式,实现用户数据的自主控制权,是数字权利管理领域的重要技术实践。

【免费下载链接】XGP-save-extractorPython script to extract savefiles out of Xbox Game Pass for PC games项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.zskr.cn/news/1313478.html

相关文章:

  • 在OpenClaw中配置Taotoken作为你的AI Agent核心提供商
  • 今日算法(依旧二叉树)
  • 如何用VR-Reversal将3D VR视频高效转换为普通2D格式:完整实用指南
  • 2025-2026年国内劳保鞋厂家推荐:五家排行产品专业评测解决工地施工致足部受伤 - 品牌推荐
  • ComfyUI-VideoHelperSuite:AI视频工作流的专业解决方案
  • 校招-美团大模型岗位怎么准备:别只做智能问答 Demo,高频业务系统和数据链路才是主线
  • 掌握MCP/GraphRAG/AgentDevOps/RaaS四大趋势,让你的AI Agent真正“能干活”!收藏这份工程师指南
  • NotebookLM思维导图生成正在淘汰传统XMind?一线知识工程师紧急预警的4个不可逆趋势
  • 2026年亲测必备:三大类10款免费降AI工具 高效降AI率不花一分钱 - 降AI实验室
  • 2026年第二季度,温州家长如何为孩子选择一所“硬核”九年一贯制私立初中? - 2026年企业推荐榜
  • 2026届毕业生推荐的六大AI辅助写作工具推荐
  • 63 Nginx解决跨域问题的具体实现
  • 2025-2026年国内北京定制游旅行社推荐:五家排行产品专业评测,解决深度游致体验差 - 品牌推荐
  • 告别BOM错误!手把手教你用Access搭建OrCAD CIS元器件数据库(附Excel模板)
  • 私有化包管理器chitu:从原理到实践,构建企业级软件分发体系
  • 2025-2026年全球十大游戏鼠标品牌推荐:十款排行产品专业评测解决电竞场景致延迟痛点 - 品牌推荐
  • 手把手解决:VirtualBox中Ubuntu磁盘爆满“Low Disk Space”及动态扩容全攻略
  • 基于strands-agents构建智能体工作流引擎:从原理到实践
  • 【AutoSar_UDS服务】0x31服务_例程控制:从协议解析到复杂诊断场景实战
  • 基于MCP协议构建安全AI支付工具:从原理到实践
  • Go语言秘钥管理:K8s Secret
  • MCPAQL/spec:构建多智能体强化学习标准化评估基准
  • 南通沙发翻新换皮靠谱商家推荐|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、覆盖区域与联系方式 - 卓信营销
  • 从零实现2048游戏:核心算法、状态管理与面向对象设计实践
  • 现代前端工程化实践:ESLint、Prettier与Git Hooks自动化配置指南
  • 5分钟掌握SECS4Net:.NET开发者的半导体设备通信终极指南
  • 2025-2026年璀璨时代楼盘电话查询:购房前请核实预售许可与合同条款 - 品牌推荐
  • Laravel集成GPT:AI赋能PHP开发,提升效率与智能化水平
  • 2025-2026年中国流量仪表厂家排名榜推荐:十大专业评测高温蒸汽防误差累积案例 - 品牌推荐
  • 2026年5月十大游戏鼠标品牌推荐:十大排名产品评测夜战防手疲劳 - 品牌推荐