悠久之树相关

2021-11-29 3,757 ℃

距离上一篇文章已经过了快两年了,原本是打算写一篇两年的总结,都已经码了一点字了,不过今天好友问能不能拆下这个游戏的数据,就随便摸了一下。许久没搞逆向了感觉像在做复健运动,但是没想到还是在一天之内摸完了,于是就干脆写篇文章记录一下,反正总结也没码完,就先发出来了。

游戏原本没打算入坑,尤其是开服后各种bug+维护,透露着一股暴死的气息,但是看到补偿后,还是把游戏下了下来,不过进入游戏后看到那复杂的养成,着实令人感到头大。现在游戏虽然没删,但是估计再打开只有发补偿的时候。

global-metadata.dat

乍一看metadata似乎加密了,但是尝试在内存中dump出来数据并没有变,再仔细翻翻发现string部分并没有加密,那就是header部分被修改了,打开so定位到metadata的载入函数,发现Il2CppGlobalMetadataHeader结构的每个成员都被异或了一个值,虽然可以一个个对照的修改,不过仔细观察后还是发现了规律,每个成员从上往下异或了68-index的值,所以可以直接写个小程序还原一下

var file = File.ReadAllBytes("global-metadata.dat");
file[0] = 0xAF;
file[1] = 0x1B;
file[2] = 0xB1;
file[3] = 0xFA;
file[4] = 0x18;
for (int i = 2; i < 68; i++)
{
    var span = new Span<byte>(file, i * 4, 4);
    var val = BinaryPrimitives.ReadUInt32LittleEndian(span);
    val ^= (uint)(68 - i);
    BinaryPrimitives.WriteUInt32LittleEndian(span, val);
}
File.WriteAllBytes("global-metadata.dat", file);

然后就可以直接跑Il2CppDumper了,值得一提的事,有几个字符串会输出乱码,但是怎么看都不像是混淆的样子,因为数量太少了,不过联想到最近几天游戏bug频发,不得不怀疑是不是程序员改metadata时不小心把那段字符串改了。。。

AssetBundle

毫不意外的打开报错,用十六进制编辑器打开看看发现一个奇怪的点,头显示游戏的Unity版本是5.6.7f1,这年头还有用5.6版本做游戏的?通过apk里的asset可以确定游戏Unity版本应该是2017.4.40f1,正想着是不是连版本号也改了,结果往下一翻,发现了一段新的UnityFS头,版本号也是对的,所以原来只是程序员往每个AssetBundle的头塞了1024字节的垃圾数据,直接从0x400开始读取就行了。

数据

通过翻阅AssetBundle可以确定数据存放在assets/assetpack/default/config/assets/assetpack/zh_cn/config/这两个目录下,前者为数值后者为字符串。数据结构用的Google Protobuf,读取代码是从.proto自动生成的,读取用到的类可以通过遍历Config.Utility的所有字段类型获取,这里有个值得吐槽的点,程序员应该是一个.proto文件生成了两套代码,类名分别是XXXTypeMapXXXRootType,在Config.Utility可以看到程序主要使用的是XXXTypeMap,但是在部分字段上还是使用的XXXRootType。。。

读取就很简单了,数据本身没有加密,只需要写个代码提取下结构,可以直接还原回.proto文件,也可以直接生成protobuf-net用的cs文件,步骤就是遍历Config.Utility所有字段的类型,每个类型再遍历下公开且非静态的属性就行,然后类里属性名称+FieldNumber的名称的常量,就是每个属性的标识符了。

尾声

目前就先搞这么多,游戏的动态立绘扫了眼是用Spine实现的,就懒得研究了,目前这游戏能不能活下来都是个问题,估计也没有后续了。

接下来应该还是继续码总结去了,至于会不会搞其他游戏发其他文章,那就看心情吧。

23 条评论

  1. 类名XXXTypeMap和XXXRootType 似乎并没有用
    我找了一下 重要的协议都在 数据包里

  2. 大佬大佬,能不能帮忙看一下我家公主最可爱这个游戏的卡牌立绘语音怎么全部下载下来啊?日服2月底关服,萌新就算现在开始学反编译感觉也来不及了。_(:з」∠)_
    这游戏的卡面是抽到卡才下载高画质的立绘,以前抓过包,链接可能是xxxxx/这种类型的。
    data文件夹里又有masterhime.dat之类的文件,dump出的dump.cs里也能找到MakeGetMasterHimeURL(),然后更专业的地方就完全搞不懂了。求大佬解一下dat文件;或者指个方向,临时抱佛脚的话我应该去找哪方面的资料?

  3. 大佬有兴趣出一期dankagu的教程吗,e神的看着还是有点不太懂,想做点这游戏相关的工具但没资源用

  4. 最近碰了一堆感觉还不错但全有加密的游戏…
    放置少女(日??)
    CounterSide(韩,国服称异界事务所)
    突击莉莉(日)
    宝石幻想ラピスリライツ(日)
    抱歉一股脑抛出来,我在幻想着会不会有其他大佬路过感兴趣帮一下。
    所以也是想知道大佬会不会出没于某些群啊,论坛啊之类的,想围观…
    然后从“性价比”来说,其实我反是希望大佬在“关服后”去关注上面的游戏…
    最后前面那些留言说的群友是特定游戏群??

  5. 想问问P神,用较新版本的assetstudio解部分游戏,比如伊甸启示录、雷索纳斯的时候,出现“目标数组的长度不足,无法复制集合中的所有项。请检查数组索引和长度。”是什么原因?

  6. 我还是蛮喜欢悠久之树的画风,已经剧情的演出,虽然已经不想玩了

  7. 啊?解神者模型加密了?难怪这么久都没看过有大佬发解神者的,以前很多群里发的解神者那个穿白丝站在镜子前妹子很戳xp,挺想要的 :lol:

  8. 放置少女,我真怕哪天倒闭了,先把文件存上。馋死了,目测都是群友 :mrgreen:

  9. p神,别管什么悠久之树了,《解神者》动作咋提取,模型他们倒是瞎搞出来了,但是动作弄不出来

欢迎留言

3 + 0 =