好久没看新游戏了,随便搞一个
这是一个由柏木咲姬、江江、逢坂茜还有星咲阿卡丽参加的chunithm mobile游戏(迫真)
https://apps.apple.com/jp/app/id6447166623
通信很刺激,api和资源都不走代理,所以第一天就只是看了看全部缓存后的本地。一看并没有加密,可以很美好地舔卡面,好文明。
本地还有一个masterdata,粗看是MessagePack,但是直接读好像是只有一个header,写了每个部分的offset和size,后边对着规范看,也确实是msgpack的内容,但是并不是组合起来的,感觉需要自己从头写个parser出来,就没细看了。
今天有人提到想看看谱面,反正昨天把程序扔到ida了,今天就随便看看。
通信不走代理,那就先开个火箭看一下dns记录,搞到api和资源的三个域名:api.wds-stellarium.com ag-api.wds-stellarium.com assets.wds-stellarium.com 。
拿到域名,去自己自签名一个证书给本地nginx用,然后进ipad写hosts,就可以看通信了(自签的根证书在设备上一直都是信任的,以前做mltd和arc的api反代用的)
随便开一个歌,就看到谱面的下载了,果然是现场下谱面的,我以为会通过api下发,他还是扔到了cdn上。
知道文件名了就可以 stringliteral.json 搜了,找地址看引用,然后开始搜。结果搜着MusicConfig呢密码就自己蹦出来了。
一看password,本以为又是一个pbkdf2,顺着密码的string literal引用找到debug里的引用(正常流程反而没引用,搞不懂),跟进去看到一个CustomAes类。结果跟了几下一看,这东西直接就是aes key,iv是文件本身的前16字节。
music config打开是个csv,存了用到的音频cue,谱面打开看到1b开头的一堆binary,以为是什么神秘自建格式,结果同样的去debug notation parse一看,是brotli。感觉是头一次见到有人在游戏用brotli。(对的,这游戏的谱面叫做Notation,蛮新奇的叫法)
这东西本质也是个csv,列是 Start,End,NoteType,Lane,Width,GimmickType,GimmickValue ,具体的NoteType和GimmickType就没看了,dump.cs 里可以直接找到enum
最后稍微的评一下这个游戏。
总体来说,他所有的函数,都是先有一个对应的interface,然后用类去实现这个interface,哪怕只用一次。可以说代码规范很强迫症级别,但是对于il2cpp逆向来说是比较致命的。因为我看所有的函数都没有引用,他全是方法指针调用,没有直接调具体方法的。
这种写法的代码,顺着调用走还只能算是有点难受,得看方法指针名去dumpcs里面找,然后在手动跳转;想要逆着调用找引用就基本不可能了,只能从其他路子,比如类成员下手。
然后他不知道为什么,这程序居然有160m大。做对比rotaeno 90m,bandori 80m。不知道是不是因为里面塞了大量的debug方法没有清掉。也不知道是不是这东西太大了的原因,我ida分析一直卡在开头死循环。
游戏体验上,这东西是我第一次见到,剧情跳过会少掉一点奖励(买歌券-1),以及虽然外面和mv都是全3d,但是一进剧情就是spine做的立绘(对不是live2d),动作好僵硬而且整个系统好卡,对比同样是spine做立绘的已故的sbr fes a live,那个就不卡也更加流畅一点(不会是回忆滤镜吧?)
另外还有一个最弱智的点……这游戏所有的时间都是依照本地时区计算的,包括体力、活动时间、歌曲解锁等等。我从一开始就在奇怪,为什么我总有60体力没法使用掉。结果今天下午解锁管人歌的时候,+10的始终过了17点直接在商店里显示了,然后我购买报错弹回首页,我才反应过来时区是本地的。2023年了为什么有人写时间不是用timestamp的啊,why?
难怪之前看他FAQ界面想看看有没有编成说明的时候(当时运营还没有在游戏内公告弹窗提示如何编队),看到他写了个“系统时区在日本以外的区域不在支持范围,请将系统设置为日本时区游玩”
以上,暂时想到的评价就是这些,下周有机会补一下动画看看。
(olivier谱太塞了…………)
笑死,我们组上个月末才把全部项目中的时区全量替换至 UTC,再也不用本地时间了(虽然不是手游
大佬 有办法可以获取到剧情的脚本吗
https://assets.wds-stellarium.com/master-data/production/scenes/1040114.bin
是这个格式,msgpack可以开,但是要写一个循环读的,我没弄
id也是要开mastermemory才能找到的
用msgpack是打开了
但内里只是一堆buffer的数值
而 mastermemory 是如何用的…
master data通过偏移量和长度可以获得对应的msgpack,再去解msgpack就行
大佬你好 我想问一下本地的那些bundle档是如何打开的
用AssetStudio打开不了…
在设置里随便写一个2021.3.17f3不就行了,版本号我都记不清乱编的,反正这游戏是个2021
感谢大佬 感谢大佬