资源大湿 发表于 2018-12-26 18:48

il2cpp Unity手游逆向破解修改

之前分享了一款很好玩的海战游戏,上一次分析它,是因为在玩耍过程中遇到了一个可以连续开炮的变态修改版,严重的破坏了公平性。所以本着研究的态度,开始接触分析unity3d相关方面的知识。最近的更新中,加入了许多新的战舰,并且采用了il2cpp的方式,这点从游戏的目录中就能看的出来。一、获取il2cpp信息首先利用Il2CppDumper从il2cpp中获取types, methods, fields等等数据。步骤很简单,运行Il2CppDumper.exe并依次选择il2cpp的可执行文件(ELF或者Mach-O文件)和global-metadata.dat文件,然后选择运行的模式,将生成dump.cs文件和script.py脚本。具体的细节可以参照(https://github.com/Perfare/Il2CppDumper/blob/master/README_zh.md)。打开dump.cs文件,不同于使用dnSpy直接分析dll,这里我们能看到的是类名、方法名等数据以及其对应的偏移地址。
https://ask.qcloudimg.com/http-save/developer-news/tsiflgfgau.jpeg
二、IDA分析il2cpp导入il2cpp.so到IDA中,等待自动分析完毕。
https://ask.qcloudimg.com/http-save/developer-news/9fb7q01gj3.jpeg
之前我们用Il2CppDumper生成了两个文件,其中有一个script.py脚本,在IDA中File-Script file选择script.py运行即可,会重命名methodName,添加stringLiteral注释和MakeFunction。
https://ask.qcloudimg.com/http-save/developer-news/evonwfv8dx.jpeg
三、找到关键地址并进行修改1、耐久度的修改我们在dump.cs文件中,查找到获取耐久度的代码对应着地址为0x115EFE8
https://ask.qcloudimg.com/http-save/developer-news/kria6m6vhx.jpeg
复制这个值到IDA中,Jump to address : 0x115EFE8,然后我们就能定位到具体的方法逻辑。
https://ask.qcloudimg.com/http-save/developer-news/40xv339tm6.jpeg
根据方法名public int GetDurability(string ship)可知耐久度是一个int类型的值。通过分析,看到在.text:0115F264这里使用了Unity Mathf的Clamp限制操作,值在R2 - 0和R3 - 0x64之间,换成十进制就是0 ~ 100,也就是在游戏中耐久度的体现,接着把值传给了R5寄存器。
https://ask.qcloudimg.com/http-save/developer-news/lbysy1ob2c.jpeg
到这里,我们就有思路了,为了不让耐久度降低,我们强制让该方法返回100就可以了。修改.text:0115F280处,替换R5的值为100。修改后如下:这样就达到了耐久度永远为100%了。2、舰船解锁同样是先找到对应的地址,我们可以看到一个布尔型的IsPurchasedByDefault(),方法地址为0x1015630。拷贝地址带IDA:我们直接给R0赋值1,代表一直返回true。3、高级账户同样的原理,我们找类似IsPremium 这样的字段,然后到IDA中进行修改。在.text:00FEC070直接给R4寄存器赋值为1,或者在.text:00FEC060修改也可以。同时这个高级账户是有时间限制的,我们找到相关的位置:直接在.text:011675DC改变其逻辑赋值为3,表示还剩余3天。同时IsActive的返回改为1,表示处于激活状态。
https://ask.qcloudimg.com/http-save/developer-news/qw3r7ie19k.jpeg
4、战斗奖励LevelEndScreenRewardPage中找到更新数据的Update()方法通过分析,我们发现战斗的奖励分别通过GetGoldBonus、GetPlatinumBonus、GetDollarsBonus计算,那么我们在最后更改其值即可。
https://ask.qcloudimg.com/http-save/developer-news/xu7a0x5dfl.jpeg
调整奖励数值,R5原本代表黄金,R6代表铂,R7代表美元。四、重新打包app重新打包app并运行,查看效果:耐久度永远不会降低,战斗奖励棒棒的。高级账户已激活,剩余3天。
https://ask.qcloudimg.com/http-save/developer-news/fhd35a58ez.jpeg
虽然才等级4,却解锁了所有战舰。
https://ask.qcloudimg.com/http-save/developer-news/mz9rw1kkdi.jpeg


[*]发表于: 2018-06-26
[*]原文链接:https://kuaibao.qq.com/s/20180625G1PXZR00?refer=cp_1026

页: [1]
查看完整版本: il2cpp Unity手游逆向破解修改