魔竞革命关服ab包与数据包解析&分享

DMM叫反叛的吉尔伽美什,最近关服了。发一下之前分析的过程及结果,不过也忘了挺多就随便写写了。

1、settings.bytes

抓包发现的疑似数据包的可疑文件只有settings.bytes,就暂时锁定他了。

打开查看十六进制,非常杂乱,一般就是加密或压缩了。看来还要先解密。

拖入ida,然后先看看il2cppdump的dll,经验锁定一个 FY.Settings 的类库,直接看加载部分的方法 LoadFromSerializeFileWithoutCallFinished(方法1)

这个方法直接就是解密解压加反序列化,当时以为这就完了,没想到后面还有活。

2、解密

简单追上下文知道3DES加密,但是key和iv是通过一个字符串生成的我叫它secret,大概就是对secret取sha256hash,然后对hash进行base64编码,然后前面做key,后面做iv,但是静态编译并没有找到secret,动态hook一下就好了。

这样key和iv就出来了,然后解密。

3、解压

解密完成了,看看有没有压缩。打开查看十六进制,比较杂乱,有部分明文但不完全连续,一般就压缩了。

再解压,通过方法1可以看出是lz4流式解压。应该很简单吧。结果lz4库解压失败。有追上下文看了下解压代码,好像是自己封装了一层的lz4,简单复现一下(其实偷懒丢ai自己调了),大概就是:

压缩格式

数据流由一个或多个独立数据块连续拼接组成,块与块之间无分隔符,循环读取数据块直到读取到文件末尾。

每一个数据块分为两种类型,由头部控制标记区分:

类型 A:LZ4 压缩数据块

  1. 先读取一个变长整数 VarInt,作为控制标记;标记最低二进制位为 1,代表当前块是压缩块。
  2. 再读取一个 VarInt,记录该块解压完成后的明文总字节长度。
  3. 继续读取一个 VarInt,记录后面 LZ4 压缩数据的字节长度。
  4. 按照上一步读取到的长度,读取对应字节数量的标准 LZ4 裸块压缩数据,解压后得到该块明文。

类型 B:无压缩原始数据块

  1. 先读取一个变长整数 VarInt,作为控制标记;标记最低二进制位为 0,代表当前块不压缩。
  2. 再读取一个 VarInt,记录原始数据的字节长度。
  3. 按照读取到的长度,直接读取对应字节数量的原始明文,无需解压。

4、反序列化
前奏完成了,再打开查看十六进制,文本连贯,依旧可读性低,应该是序列化成二进制文件了(.bytes是二进制文件的后缀,属于是早有预告)。

继续追上下文,然后就大概了解了整个反序列化方法,不过也有很多猜测与瞎蒙。

反序列化

大概步骤就是获取一个反序列化器,先依次反射获取目标数据类的属性,再从二进制中读取一个4字节typecCode,如果和属性的typeCode一样就根据对应类型获取对应的反序列化器反序列化。

因为是反射获取,所以我并不能看出顺序,我本以为是按照硬编码顺序来的,但是结果好像不是,所以只能通过typeCode来还原了。

typeCode生成逻辑也是追上下文,就是用命名空间,类名,字段按照一定格式拼起来取md5hash。不过也有特殊的,枚举的typeCode是按照基础类型来算的,数组类型typeCode是按照元素类型的typeCode+=1.

反序列化器的方法就正常反序列化了。

5、结尾
经过一番折腾,终于是将settings.bytes反序列化为可读的json了,可喜可贺。

下面是保存的DMM的金闪闪的ab包以及反序列化好的数据包链接。ab包就正常没加密。
百度网盘 请输入提取码

3 个赞

感谢分享,请问这个游戏的包里面有h事件的剧本吗 :heart_eyes:

太好了。

我想获取将 settings.bytes 转换为 JSON 格式的文件,但我没有百度账号。

您能否将其上传到其他地方?

这游戏关了后又开了一个游戏叫 レゾナンスリリウム
画师还是同一个

我并没有其他长期存储的东西,数据包也不大,即使限速也不需要多久,注册一个就行。

我无法使用非国内手机号码创建百度账号。
我放弃了。

淘宝几毛钱租个一小时号不就行了

都是非中国大陆手机号基本上内陆服务用不了的 举个例子B站

我甚至是香港地区连支付宝都要绑定香港id和找个内陆地区的账号做验证
网盘这东西随便一个都行 谷歌网盘 mega大把的…

Database.zip (3.4 MB)
发现如果只是数据包的话到是可以直接发。只是我比较懒。

谢谢!
这正是我要找的数据。

魔竞和魔女离线版 Gofile - Cloud Storage Made Simple 已经有现成的了,可以播放主线、寝、活动剧情

2 个赞

大佬能不能发一下dmm版的apk啊

只能看魔竞的吗

实际上我解数据包本来是打算做播放器的,只是没时间一直没动。因为目前见的很多都只是做个寝剧情,其他剧情做的很少,更别说角色立绘了,而且安卓PC双端的也很少,以及资产的压缩和可更新性。所以一般还是更喜欢自己搓的。
不过用java手搓确实很强。

hallo, can you upload to different service I am trying to download but it need Chinese phone number which I dont have it. Please use like other service that like Mega or Gofile nya (=^‥^=)

I update wiki Rebellion Gilgamesh (ルーレット契約) - Download & Character Guide 2024 | GachaWiki | Rebellion Gilgamesh Wiki

Thank you !!

the files not showing up ~ nya (=^‥^=)

1 个赞

魔女也有啊,要改一下配置文件,matsu.properties 里面改 reader=5 好像是

格式都是一样的,支持寝就包含了支持活动和主线剧情的工作量了,我这个直接全部列出来的。

理论上 libgdx 也可以做安卓版,但我实在不想再吃 ADK 这坨屎了

you can also steal from the JP and CN wiki:

1 个赞