赛马娘简易数据解包
2023-8-20|2024-10-17
AlphaBoom
type
status
date
slug
summary
tags
category
icon
password
赛马娘支持DMM版本也意味着可以安装在电脑上,在电脑上获取本地数据是相对容易的。对于赛马娘这款游戏仅通过分析本地数据就可以获取到大量信息,如果不想每次都通过贴吧、Q群之类获取零散的信息,那么也可以考虑自己动手并且这并不需要有编程基础。
以下内容都是以游戏游玩内容为目地收集的信息,如果是想通过提取游戏资源进行二创的话,这里可能不会提供多少帮助,不过本篇文章内容并不多不妨阅读下。
关于数据源
为了获取数据,首先需要安装DMM版的赛马娘客户端,在确认所有游戏数据下载完毕后就可以进行本地数据分析了。赛马娘的游戏数据位置在如下路径:
C:\Users\{用户名}\AppData\LocalLow\Cygames\umamusume
其中重点内容如下:\dat
下是具体的游戏资源,例如图片、声音、模型等
\master
下包含一个数据库,这里包含了最丰富的数据,攻略站大部分的数据都来自该处
meta
是一个数据库文件,主要的功用是记录资源的存储路径,存储路径就是具体在\dat
下的位置信息
准备工具
- 数据库查看工具,能看Sqlite就可以。我用的是这个:https://sqlitebrowser.org/
- Unity数据查看工具。我用的是这个:AssetRipperAssetRipper • Updated Nov 20, 2024
master.mdb
在
\master
目录下找到master.mdb
文件之后使用数据库查看软件打开,可以发现其包含了大量的表格。关于各个表格的具体用途可以根据英文名称猜个大概,下面简单说些比较常用的表格信息:- skill_data:包含最主要的技能信息数据,例如发动条件及具体数值信息
- support_card_data:支援卡的数据,不过该表数据不像skill表那么直接,需要联合其他表查询
- text_data:包含游戏内所有的文本数据
- single_mode前缀:这些表是育成相关的数据,如果感兴趣可以通过这里查找
关于表中字段的具体含义,我这里给到一些链接参考,如果有兴趣可以查阅。其实要求不高仅通过英文名称来推测也是足够的。
- 赛马娘游戏内相关数值及技能整理 我在之前的文章有大致分析过技能表的关键字段
- GameTora上包含了非常详细的技能条件及数值信息,可以用于分析表中字段的含义
- 对照u-tools上技能和支援卡的信息
- 数据库的具体设计可以参考这个,也可查看该库其他Issue来查找有用的信息。这个作者看起来应该是弃坑了不过留下的Issue还是很有价值的。DB 設計と Supabase にてテーブル作成Updated Sep 15, 2022
- 最后也可以考虑参考具体代码实现,可以找到的代码库很多这里仅贴下我写的工具代码库作为示例notion_sync_umadbAlphaBoom • Updated Apr 29, 2024
这里补充一点,支援卡的连续事件获取的金技能是查不到的,这些事件获取的技能应该都是由服务端下发的。因为当我在游戏中点击查看支援卡事件获取技能时,都会发现发送了一个请求,并且服务端的返回结果中包含了技能id信息。
meta
meta文件虽然没有后缀名不过它是一个sqlite文件,通过数据库查看软件打开,之后主要关注以下内容:
- 有价值的信息在a表中
- n列是名称,名称可以方便定位特定资源信息
- g列和m列都可以用于确定资源类型
- h列的内容是文件路径和文件名
h列的内容是文件名,其中前两个字符是文件夹名称,按照这个规则在
\dat
下就可以找到对应的文件(有一点需要注意的是这些资源有部分是等待需要时才会下载的,所以如果发现记录位置在本地没有文件,那么可以先尝试在游戏中游玩过相关内容之后再看看有没有)。之后就可以使用Unity资源查看工具查看文件中的内容了(也可以选择直接导出具体的文件)。
由于目前已经有很多工具可以提取马娘的资源了,所以这里就不继续讨论具体资源对应关系,如果对此有兴趣可以参考的实现或直接使用这类工具。
UmaViewer
katboi01 • Updated Nov 20, 2024
额外补充
通过网络数据抓包获取信息
抓包可以使用,请求和响应的数据会保存在本地,抓包的文件可以在hakuraku线上解包查看(如果想了解怎么解压缩可以查看源码的实现),另外hakuraku上对比赛数据做了可视化处理,我的建议是直接使用这个线上站点就好。
Trainers-Legend-G
MinamiChiwa • Updated Nov 17, 2024
hakuraku
SSHZ-ORG • Updated Oct 21, 2024
获取特殊技能类型的数值信息
在技能表中有几个信息是比较重要却又比较难以理解的
- condition: 技能条件
- ability_type: 技能类型
- target_type: 目标类型
技能条件
虽然根据英文可以猜测部分,但是并不好理解。类型
数据在数据库中只是一个数值,如果不清楚这些数值的对应关系则无法理解。下半部分的内容会较难理解,可以先看下 赛马娘游戏内相关数值及技能整理 的技能部分的介绍。
另外技能类型除了简单的提高多少速度之外,还有一些是根据一些条件提供阶梯数值加成,这部分数据在表中是没有的,例如右侧小林历奇的固有。
关于这个数据的获取,需要通过
meta
数据库中查找Race/RaceMain/ast_race_paramdefine
,之后再通过工具打开对应的Unity资源文件,对应的脚本文件中包含了比赛相关的数值定义。对于该场景,可以先查找Skill部分再找到技能类型名称对应的数值就可以大致推测出结果了。查找技能类型数值对应的含义
以下内容需要有一点编程基础
数据库中很多类型数据只会记录成一个数字,虽然可以通过对照现有其他人整理好的数据来猜测这些数字可能对应的含义,不过如果能自己动手分辨会更安心一些,获取的方式就是反编译程序源码。
源码中包含类型定义的变量名称和数值,通过数据库获得的数值与之对比就可以得到这些类型对应的英文变量名,再通过这些英文就可以猜个七七八八。
反编译方式如下:
- 下载该工具Il2CppDumperPerfare • Updated Nov 20, 2024
- 其中可执行文件选择游戏安装目录的GameAssembly.dll
- metadata文件选择游戏安装目录的umamusume_Data\il2cpp_data\Metadata\global-metadata.dat
- 赛马娘做了防反编译,所以直接对GameAssembly.dll使用是不行的,可以通过运行时dump的方式获取原始的动态库,可用工具如下:
- win10可以使用KsDumperGEEKiDoS • Updated Nov 5, 2024
- win11可以使用(win10也可以用)KsDumper-11AlphaBoom • Updated Mar 19, 2023
- 也可以尝试在Android上抓(不过我印象中在雷神/夜神上尝试过是失败的,当然大概率是我没正确安装好magisk环境)Zygisk-Il2CppDumperPerfare • Updated Nov 20, 2024
使用KsDumper过程中有触发蓝屏风险,建议使用前先把在进行的任务都保存下。
KsDumper11的执行步骤是首次循环测试所有驱动看哪些可用,记录下可用的漏洞序号,之后直接使用记录的序号。不过在进行某些驱动测试时可能直接导致蓝屏,遇到这种情况之后再打开KsDumper11会卡在初始化过程,解决方案是把目录中生成的Scanning.txt删除掉,一般在遇到蓝屏之前应该会有几个可用的(记录在Providers.txt),所以经过这样处理之后就可以正常使用功能了。
写文章时发现在最新版的Win11上无法使用了,细则及解决方案看这里
8月20日测试了下在最新的win11系统用不了了,可能是更新某些补丁之后就不行了,上次成功运行是在4月末。
发现KDU有在持续更新,尝试将使用的kdu的版本更新下就可以了,我这边测试了下序号13的provider是OK的。另外由于KDU没有直接提供可执行文件所以需要自行编译下,最后将新编译好的kdu.exe和drv64.dll替换KsDumper11中Driver目录下对应的文件就好了。
- dump出的产物可以使用1.工具进行反编译,之后可以选择合适的工具查看代码
- 直接查看dump.cs文件
- 通过之类的工具查看ILSpyicsharpcode • Updated Nov 20, 2024
获取到源码之后,借助表列名提供的英文名称信息在源码中进行搜索就可以了。
最后仅以上步骤只能看到一些类或函数的定义,看不到具体的运行逻辑代码,如果有这样的需求可以尝试如下方式:
- Il2CppDumper的产物会提供ida和ghidra的脚本,如果对这些软件熟悉可以使用这两个软件之一通过静态分析来排查具体代码逻辑。
- 提供了游戏运行时的hook,可以修改该库并通过添加一些hook点来达成目的。Trainers-Legend-GMinamiChiwa • Updated Nov 17, 2024
- Twikoo