Project Sekai 试玩版分析

世嘉出的新的V家相关游戏Project Sekai终于出了一个试玩版,也展示了一下世嘉谱师的实力(火花的Master难度吓死人)。整个游戏的音游部分比较类似于世嘉自家的街机音游Chunithm,音符可以跨多个轨道,只要点中其中覆盖的任意轨道就可以得分。由于本游戏和Bandori游戏的开发商都是Craft Egg,可以预见到这就是邦邦换皮游戏,而对游戏的分析也证实了这一点。

游戏介绍

《世界计画彩色舞台feat. 初音未来》主要以现实世界中位于日本涩谷附近的地区作为舞台,在这里的初音未来等人与我们在现实世界中对他们的认知相同,作为虚拟歌手演唱着许多创作者们所创作的歌曲;而另一个舞台「世界(SEKAI)」是个从思念所诞生出来的场所,同时在这边也将创造出许多歌曲,本作的主角之一「星乃一歌」在因缘际会下来到了「世界」,并在这里与初音相遇。

本体解析

整个解析过程没什么特别之处,老套的il2cppdumper+IDA+Fiddler流程,特别是查看了解析出来的dump.cs之后,一股熟悉的感觉铺面而来。依然是使用AES加密,密钥的获得过程和邦邦几乎没有区别。获得API地址和下载服务器地址的地方也几乎和邦邦完全一样。和邦邦不同的地方在于,它使用MessagePack作为内层消息编码,而邦邦使用的是Protobuf

理论上Protobuf是比MessagePack编码节约空间的,因为前者不会在消息里传递结构消息(实际上也没有必要,因为结构本质上是服务端和客户端的约定),后者只是把JSON变换了一种编码方式而已。目前邦邦利用Protobuf编码的MasterDB消息已经接近10M,导致Craft Egg最近不得不再套了一层压缩,以减小消息体积。可以预见的是,Project Sekai一定也会再对MasterDB进行压缩,否则大小增长一定会比邦邦快得多。

资源文件

本游戏的资源文件下载地址大体构造与邦邦类似,不过地址里出现了一个GUID的部分,很明显这是服务器返回的东西,因为客户端里没有写死这个。后来对API的调查发现,不带任何参数访问API服务器根地址的话就会获得当前服务器支持的游戏配置,其中就有这个GUID的hash。

下载了两个文件回来之后发现没有办法直接在AssetStudio里读取,用HexEdit打开之后发现文件头并不是普通的AssetBundle的文件头,只能看到明文的FS字样,而且头四个字节似乎不是AssetBundle的一部分。后来跟双草爷爷交流了之后了解到这东西经过异或加密的。从开头保留有FS可以判断出只有五字节被异或,然后空了几个字节,循环往复。去掉头四个字节并且利用异或还原了文件头之后终于可以顺利解析了。于是写了个脚本下载试用版给的所有资源,并且用我自己写的Unity解包脚本全部拆开,发现得到的数据比游戏里给的东西要多,看来Craft Egg还是弄的不干净,还有些AssetBundle里打包进了不应该出现的东西,文件管理也是够混乱的。

本来以为音频文件要花点时间去找解密用的key,但是使用邦邦的key直接就解密出了能正常播放的音频,免去了这个步骤。不过这游戏设置key的方式也改变了,尝试跟踪了一下也没找到从内存里读取key的办法,现在用的笔记本性能也很弱,分析libil2cpp.so估计需要一整天,就作罢了。

打开谱面文件一口老血差点喷出来。虽然还是BMS格式,但是头部有这么一句话:

This file was generated by Ched 2.6.2.0.

于是拿着这句话去搜索了一下,找到了一个叫Ched的开源工具,用途嘛……就是制作Chunithm的自制谱。帮世嘉做跟自己街机游戏类似的音游模式还拿不到他们的制谱工具,只能使用开源工具,确实有点黑色幽默的感觉。

总结

这游戏叫换皮其实也不是完全的换皮(相比于某音乐时间),只是使用自己开发框架重新开发了一个游戏,音游部分等等都是重写的,还是做了许多工作。更赞的是那个Virtual Live功能,真正实现在线打call,如果支持AR/VR就更好了。不过,我大概只会选择V家模式,乐团碰不碰看缘分吧。