Wonderland破解
首先要郑重推荐一下Wonderland这个游戏。游戏制作精良情节丰富,虚拟现实的游戏方式也新颖有趣。这类虚拟现实的游戏类似的还有Ingress,我也是通过Ingress找到这个游戏的。相比之下Ingress是刷日常,Wonderland则是下副本。我觉得Wonderland要好玩多了。
本以为类似Ingress是定向运动。实际上完全不是,不会通过精确的位置来指引你。你需要根据提示推测并找到指定的物体,拍摄后识别正确才能进入下一关。要说缺点嘛,那就是拍摄的角度位置会影响识别。我也是破解之后才知道其实卡住的那关猜对了物体,很可能角度姿势不对。
网络请求抓包
首先想到的是网络请求抓包。拍摄识别的过程中并没有看到http请求。请求中大概有用的一条是一些经纬度,在地图上标出来后确定只是游戏的范围,而不是过关位置。那么我猜测很可能是开始游戏的时候把重要的数据下载好了。于是我使用应用的清除缓存功能后再进入游戏,看到一个zip包下载的请求。这里就是游戏的剧情数据了。
把这个包解压后,有一些json文件和图片,但是无法打开,内容应该是加密的。对比了几条,可以确定不是简单的加密方法。这条路走不通了。
逆向工程
用Hopper查看应用的二进制,找到了拍摄界面的类和方法。但是查看汇编代码也没有找到识别场景的关键方法。查看了应用内的数据库,只有一些http请求的数据。在应用的Documents目录中找到了解压后的剧情数据,但是并未解密,看来是在读取文件后解密的。
在用Hopper翻看的过程中发现了一个类CryptoCommon,猜测可能跟前面提到的游戏剧情数据加密解密有关。于是尝试在运行时研究这个类的方法,看看能不能解密情节数据。
运行时调试
因为手机没有越狱,所以无法直接调试App Store的包,只能调试越狱渠道的包。用某助手下载了ipa包,解压的到app。在Xcode里新建一个同名的iOS项目,在构建的时候通过脚本用这个app覆盖构建生成的app,运行到手机。这种非越狱手机安装应用的方式在我的项目VST和f.lux(我建立的镜像)中有用到。
接下来通过注入代码(注入代码的方式这里就略过了),用Method Swizzling的方式替换类CryptoCommon的解密方法,观察传入的参数。第2个参数是剧情数据的文件名,第1个参数是其文件内容。之后找到应用中剧情数据解压后存放的位置,注入代码将所有剧情数据文件用那个类的解密方法解密并存放到另一个目录,用iExplorer等工具导出。
剧情数据分析
剧情数据大概有两类:图片和JSON文件。JSON文件内会引用图片。JSON文件有两类,章节和步骤。章节就是通过一章后界面展示的那些图片的数据。步骤就是每次的到线索后展示的信息。有些界面需要输入的密码,选择后跳转的界面在步骤信息里都有。在有的游戏情节中还用到了gif图和音频文件。根据步骤所引用的图片,就能定位到需要扫描的物体,无计可施的时候会很有帮助。周末有空的话再去挑战一把,😄。