0

0

C# 读取游戏存档文件 C#如何解析特定游戏的存档数据

煙雲

煙雲

发布时间:2026-02-14 12:44:02

|

347人浏览过

|

来源于php中文网

原创

存档文件通常是二进制格式;少数为json或xml但常加密或混淆,需用十六进制编辑器查看前几十字节判断:若开头为{或[且字段名可读,则可能是json。

c# 读取游戏存档文件 c#如何解析特定游戏的存档数据

存档文件是二进制还是 JSON?先看清楚再动手

绝大多数单机游戏存档不是标准文本,直接用 File.ReadAllText 读出来一堆乱码,说明它大概率是二进制格式。少数新游戏(比如《Stardew Valley》后期版本、《RimWorld》部分存档)会用 XML 或 JSON,但通常带加密或混淆——别急着写解析逻辑,先用十六进制编辑器(如 HxD、010 Editor)打开一个存档文件,观察前几十字节:

  • 开头是 {[,且能大致看清字段名 → 可能是 JSON,试试 JsonSerializer.Deserialize
  • 开头是 <?xml <savegame> → XML,用 <code>XDocument.Load
  • 开头像 PK\x03\x04 → ZIP 压缩包,解压后再看内部文件
  • 全是不可读字符,长度不规则 → 大概率是自定义二进制结构,需要逆向或查社区文档

用 BinaryReader 解析二进制存档时字节序和对齐很关键

很多游戏(尤其是 Unity 引擎打包的)在 Windows 上用小端序(BitConverter.IsLittleEndian == true),但存档可能被其他平台生成,或开发者手动调用了 BigEndianBitConverter 类。更麻烦的是结构体对齐:C# 的 [StructLayout(LayoutKind.Sequential, Pack = 1)] 能强制按字节对齐,但如果你漏了 Pack = 1BinaryReader.ReadSingle() 后面紧跟一个 int,实际读出来的值可能错位。

  • 务必确认目标游戏的官方引擎/工具链文档里是否注明字节序(常见于 Unity 的 BinaryFormatter 替代方案说明)
  • 用已知数值反推:比如你记得角色等级是 42,用十六进制编辑器找到附近字节,看它是 2A 00 00 00(小端)还是 00 00 00 2A(大端)
  • 读结构体前先读长度头(常见 int 表示后续数据块长度),避免越界读取导致整个解析崩掉

Unity 游戏存档常藏在 PlayerPrefs 或 LiteDB 里,别只盯着 .sav 文件

很多 Unity 游戏根本不用独立存档文件,而是把关键数据塞进注册表(Windows)、NSUserDefaults(macOS/iOS)或本地 SQLite 数据库。桌面版常见路径:%APPDATA%\prefs(其实是二进制 plist 或自定义格式),或者 %LOCALAPPDATA%\SavedGames\ 下的 .db 文件(可能是 LiteDB、SQLite 或加密的二进制 blob)。

What-the-Diff
What-the-Diff

检查请求差异,自动生成更改描述

下载
  • 先查进程内存:用 Cheat Engine 搜已知数值(如金币数),再看它存在哪块内存区域,导出后比对文件内容
  • 运行游戏时用 Process Monitor 监控文件读写,过滤 ReadFile 操作,重点看非 .sav 扩展名的文件
  • LiteDB 的魔数是 LDB\x00,SQLite 是 SQLite format 3\x00,用十六进制编辑器一眼可识别

解析失败时优先检查 CRC 校验和版本号字段

几乎所有商业游戏存档都会在头部放校验值(CRC32、Adler32 或简单异或)和版本号(int 或字符串)。你读出来的数据看似结构正确,但角色血量总是 0 或负数,大概率是版本不匹配导致字段偏移错乱,或者校验失败后游戏主动填了默认值(而你没跳过校验直接解析)。

  • 先定位头部固定位置的版本字段(比如偏移 0x04 处的 int),对比你手头的文档或社区贴出的版本号是否一致
  • CRC 字段常在末尾,长度 4 或 8 字节;如果校验失败,别硬解析,先确认你用的密钥或初始值是否正确(有些游戏用固定 seed 如 0xDEADBEEF)
  • 某些游戏(如《Terraria》)存档里有明文标识符如 Terraria Save File V2,但后面紧跟着加密块 —— 别被明文骗了,得先解密再解析

真正麻烦的从来不是读取本身,而是搞清那个“看似随机”的 4 字节到底代表版本、校验、还是加密 salt —— 这部分没文档时,只能靠多组存档做差分分析。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

437

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

318

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1927

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2103

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1121

2024.11.28

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

416

2023.07.18

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

76

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9.4万人学习

C 教程
C 教程

共75课时 | 4.7万人学习

C++教程
C++教程

共115课时 | 17.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号