记一次dat+so修改无条件升级
【示例游戏】Golf Orbit 下载地址:https://www.lanzouj.com/i6uv2xc
【所需工具】
Il2CppDumper-v4.6.0 下载地址:https://www.lanzouj.com/i6uv5gd
IDA(爱盘里面有下载)
【开始操作】
我们先来进游戏看一下
可以看到这里有两种货币,分别是Gems和Gold,我们先简单的记一下
打开安装包查看assets/bin/Data/Managed文件夹,发现里面的dll已被打包成dat文件了,只能使用IL2CppDumper来获取方法名了
提取assets/bin/Data/Managed/Metadata/global-metadata.dat文件和lib/armebi-v7a/libil2cpp.so文件
打开IL2CppDumper,找到提取文件的安装位置,先打开so文件,在打开dat文件,选完之后,新版的IL2CppDumper会弹出如下情况
Unity version的获取方法在安装包内assets/bin/Data/unity default resource文件以文本方式打开后可以看到开头有一串数字
开头的2019.1.0就是当前的Unity version,我们直接输入2019.1.0,按下回车,然后选择2,一直等到Dump完成,如下
打开IL2CppDumper的安装目录,将dump.cs文件以文本的方式打开
我先尝试搜索Gem和Gold,但是并没有搜到有用的东西,我之前进游戏的时候看到里面的货币主要用来升级,所以我尝试搜索upgrade
直到我找到以下方法名
GetUpgradePrice意思是获取升级所需的花费,我们记下RVA: 0x407B24地址,将之前的so文件用IDA打开分析
经过漫长的分析,emmmmm,大概半个小时,直到输出窗口出现The initial autoanalysis has been finished.的内容
分析完后按G,输入地址0x407B24跳转
按照之前的思路,将这里的花费直接返回0,就可以实现无条件升级,详情请看https://www.52pojie.cn/thread-1024836-1-1.html
但是这个游戏不行,它会只升级一次,然后就不能再升级了,所以我尝试另一种方法
选中开头sub_407B24 -> 右键 -> 跳转到操作数外部引用,或者直接按快捷键X
我们可以看到一个地址加上一个偏移,我直接再dump.cs文件里面搜索对应的地址的方法,只有第一个可能有用
OnUpgradePurchase意思是购买升级,双击跳转过去看下
我们需要知道arm汇编调用方法时的返回值会存放进R0寄存器,这里可以看到调用了GetUpgradePrice之后将返回值传给R2
所以我只需要修改返回值,让它传给R2的值为0,就可以实现,购买升级时花费的货币为0
我们点击要修改的代码的行数->右键->快速修补神器->修补,也可以按快捷键Ctrl+Alt+K
将这里修改成MOV R2,#0,然后点击修补
然后保存so文件,替换掉游戏里面原本的so文件
进游戏看一下
修改成功,但是会有一个缺陷,就是,每局游戏第一次升级时还是需要货币
还有一个方法没有修改,就当作作业,欢迎各位来自行查找找到这个方法名 unity手游以il2cpp打包的方式,逆向修改最难的点就是在dump.cs里找关键词了,太难了,希望有大佬能详细讲解一下在dump.cs文件找关键词的。不知道有没有办法在游戏运行的过程通过某些手段找出关键词。另外,补充一下,如果在dump.cs文件里找不到要修改游戏中数值的关键词,可以等IDA完全加载完so文件后,导入il2cpp工具生成的script.py,可以识别出某些函数名称,减少分析难度 楼楼我想请问一下,最近在学手游修改,因为我是小白不知道怎么改,就先从替换人家破解过的文件开始。我这里有个手游是技能无cd的,也是u3d开发的,dll也是被打包成dat文件了,我就把人家破解无cd的so替换到原版游戏,但是还是有cd。但是我又替换了破解的dat文件,还原了原来的so文件,他就变成无cd的了,我想问怎么修改dat文件。(so文件替换了是没用的。) 看不懂占个前排吧 收藏一下,Mark,感谢 很久前就想搞某个游戏的(好吧我现在忘了。。。)
因为u3d的版本问题。。。过了很久都没有头绪。。
感谢大佬分享 这个厉害~~~这个厉害~~~ 为什么不直接添加脚本进去看呢。 关注楼楼了,楼楼以后能出一些so和 dat的教程吗?喜欢手游修改 楼楼还有我和你一样的修改替换so也是没效果,我这电脑会不会要替换dat才有效果,但是我不会修改,还请楼楼帮我解决一下 18587205491 发表于 2019-10-19 22:09
楼楼我想请问一下,最近在学手游修改,因为我是小白不知道怎么改,就先从替换人家破解过的文件开始。我这里 ...
emmm,目前我还没找到什么工具可以直接反编译dat文件,有可能别人将原本的dll文件修改后打包成dat,就能出现你说的这种情况,我这个只是猜测,你可以问下那个修改的人