【萌新的逆向入门】论如何将 Arcaea 自制谱导入安卓

注意!免责声明:自制谱相关内容已涉及 lowiro 的实际利益。本博文内容仅用于个人研究与学习。请勿将博文内容用于商业或者非法用途,如果阁下愿意继续阅读,请您承诺将为自己的全部行为负责。

本站不会提供破解包的下载。如果本站有相关内容侵犯到您的利益,请联系或评论我,我会第一时间删除相关内容。

第一次写免责声明,好难啊...

0x00 前言 (不想听我啰嗦的可跳过)

(前注:已经半年多没写博客了,主要是信息竞赛(树学竞赛,爆零啦)和各方面的事务都很烦... 再不写就要长草了...

这一切的开始都是在今年 8 月份的时候,我的一位同学(巨佬)下载了 sch 大佬的 Arcade 制谱器,给自己喜欢的歌写了张谱子。

然后我们全音游社的人:哇!好强啊! 太强了我死了。那么问题来了,哪里可以玩到这张谱子呢?

于是当时还什么都不懂的的我,第一次解压了 Arcaeaapk 安装包。一个个目录点开来看过去,直到 assets/song/ ... 哇这个不是存曲子的目录吗,dl_ 开头的就是下载曲吧。哇这还有个 songlistpacklistunlocks。哇这不是歌曲信息的 json 档么!好啊这样就能导入了!让我来读一读这个格式...

其实我还没有读完,就在 Arcaea 中文维基上阴差阳错的点进了技术性文档目录,看到了前人聚聚写的解析文档,那么我就直接拿来用了!写好自制谱的信息,把文件夹拷进 assets/song/,到网上找个 apktool 的套壳工具打包回去签好名。安装! Arcaea 启动!然后一秒之后闪退了...

我相信大家肯定都遇到过这样闪退的情况。当时的我以为是 songlist 里信息写错了或者是 json 格式错了。仔细检查了一遍再打包安装启动,还是闪退emm

WTF?这是为什么呀???难道是我重新打包的原因?之后试了几次试了什么我记不清了。我只直到有一次我只改了 songlist 里的一个字母(歌曲标题的字符串),还是闪退了。而只修改歌曲文件夹里的 .aff 文件和封面歌曲等等文件却不会闪退。之后我就开始怀疑,是不是游戏对这几个文档做了 Hash 校验。于是萌新的逆向破解之路,就此拉开序幕...

0x01 正解

(探索过程后面再写,先来看正确解法)

本文以 arcaea_2.4.3c\lib\armeabi-v7a\libcocos2dcpp.so 为例。

请出我们的神器 IDA ,把 so 拖进去等一会分析。

IDA

shift + F12 打开字符串窗口,搜一下我们要找的 songlist

search of songlist

运气不错,这里的 SONGLIST_HASH 应该就是我们要找的。点进去看。

songlist
songlist2

找到调用这个 HASH 的函数位置。(如果不长这样的话,有可能是还没加载好,再等 IDA 分析一会就有了)

sub_558748

F5 看一看伪代码。

pseudocode

经过一番深入人心地仔细观察,我们发现 500 行和 515 行的 if 看起来都很像校验的判断流程。而后面的 goto LABEL_126 更为可疑,我们点开它看看。

goto LABEL_126

这里面的 exit(0); 很可疑,没准就是导致闪退的真凶。所以我们试一下把 goto LABEL_126 的语句干掉。

批注 2019-12-15 015647.jpg

回到原窗口,观察发现 goto LABEL_126 对应的原指令位置是 00558CE200558CF8,记住它。(其他两个文件的校验同理)

批注 2019-12-15 015853.jpg

010 Editor 打开这个 so (或者别的 16 进制编辑器),找到刚刚两个位置。

批注 2019-12-15 020030.jpg

把各自的 4 个字节全部改为 00 (或者改为 00 00 A0 E1NOP 空指令)。保存。

这里可选的操作,就是重新用 IDA 加载一遍,看看指令改成功了么,有没有导致函数崩掉。
mov
可见这里指令已经变成两句 MOV 空值了,粗略检查一下其他的函数也没崩就行了。

然后把修改过的 libcocos2dcpp.so 丢回去。删掉 arm64 的文件夹以防跑错。

sl.jpg

改个 songlist 测试。试求我的怨念之深。之后打包,签名,安装。(记得做共存(?))

Arcaea

经过少许等待,再打开 Arcaea, 好!!!她不闪退了啊啊啊啊啊!!!也可以看到所做的修改生效了。

大致修改流程就是以上了。虽然只是改几个 00 的功夫,却让我花了很长时间去从头学起。也算是收获满满吧。

最后放几张自制包的截图,谱面来自我的两位巨佬同学。

fm2.jpg
fm1.jpg
fm3.jpg

以上

0x02 探索过程

待补(咕咕咕都有正解了写什么错的过程

Last modification:February 11th, 2020 at 07:44 am

Leave a Comment

4 comments

  1. ppp

    您太强了,我没有安卓环境开发的基础,跟着您的教程摸索着做,不出意料的失败了(。•ˇ‸ˇ•。),请问apk可以直接解压吗,还是必须要反编译才行呢?

    1. wlt233
      @ppp

      如果仅仅是为了拿到 so 库的话解压就行了。但是后续打包和签名都是要 apktool 的。推荐一个偷懒的用的 apktool 助手 https://pan.baidu.com/s/1rWOrnJAJ3gexQxgV6ExXog 提取码:ol1t

      1. ppp
        @wlt233

        终于成功了!!!前来再次感谢( ,,´・ω・)ノ"(´っω・`。)

      2. ppp
        @wlt233

        嗯嗯,超级感谢,我再去试试⌇●﹏●⌇