吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20216|回复: 26
收起左侧

[Android 原创] 记录一次Unity3d-il2cpp游戏修改

  [复制链接]
快乐交友 发表于 2019-6-29 12:33
本帖最后由 快乐交友 于 2019-6-29 13:39 编辑

随着手游技术的不断发展,原先Unity3d引擎mono打包的游戏也向Unity3d IL2cpp机制打包发展,IL2cpp打包机制已经成为了U3D手游引擎的主流。

在一些游戏平台上下载的游戏在拆包时在assets/bin/Data目录下也是很少能看到以前经常熟知的Managed文件夹和Assembly-Csharp.dll的文件了。

论坛也有很多优秀的IL2cpp游戏的修改教程,第一次在论坛发帖子,同时也是记录自己的学习点滴。

IL2cpp游戏修改我主要用到的工具如下:工具也基本上能在论坛上找到。

1.IDA pro7.0(用于载入分析so文件)

2.Il2CppDumper4.4.2(反编译获取游戏函数地址)工具的github地址:https://github.com/Perfare/Il2CppDumper

3.WinHex(十六进制文件编辑器,用于修改so文件)

4.Sublime Text(一款支持语法高亮的文本工具,用于查阅Il2CppDumper反编译后生成的dump.cs文件,当然也可以用Notepad++

5.AndroidKiller(主要用于对修改后的apk签名)

随便在游戏平台上下载了一个铁x骑士的单机游戏,修改扩展名为.zip,用压缩工具打开,在\lib\armeabi-v7a目录下发现了libil2cpp.so文件,以及在\assets\bin\Data\Managed\Metadata发现了global-metadata.dat文件,所以判定为IL2cpp机制打包的游戏。
微信截图_20190628175035.png

2.png

步骤一:首先我们把global-metadata.dat和libil2cpp.so文件解压到Il2CppDumper4.4.2的目录下,然后运行Il2CppDumper.exe程序,先选择libil2cpp.so文件再选择global-metadata.dat文件,它会询问我们Unity统一版本是否大于或等于2018年3月份的,这里可以根据自己的情况进行选择,接着会要我们选择模式了,一般选择第四个模式就可以了,如图所示,看到这种提示就说明我们dump完成了。
3.png

4.png

步骤二:我们安装并运行刚才下载好的游戏,发现商城有各色各样的火车可以购买,但金币为0,火车那么多,想买辆看看,钱包那么小,一辆都买不了,这怎么能行,那就要对金币进行修改了。
game.png

步骤三:我们已经确立了要修改的游戏内容,那就是金币,众所周知,IL2cpp机制打包的游戏,游戏的核心逻辑都是在libil2cpp.so中,此时使用IDA pro打开并载入libil2cpp.so文件,载入文件后按下图操作。
script.png

openscript.png

再用文本工具Sublime Text工具打开Il2CppDumper4.4.2目录下的dump.cs文件,查找金币的英文关键词gold,coin,以获取关键函数的地址,但是我并未找到有实际意义的方法函数,不过TrainSkinSettings这个class类引起了我的注意,而且下方还有一个私有的price价格字段,所以向下翻。
search1.png

然后看到了int getPrice()这个返回值为整形的方法,copy它的地址。
price.png

在ida中按G键跳转到get_Price()的相应地址,ida还未加载完成的话,可以按下C键快速展开该方法函数的汇编代码,然后Ctrl+X获取该方法被调用的地方,此时可以看到getPrice()在buyskin方法内被调用了。
buyskin.png

我们就跳转到buyskin方法的相应地址,看到程序已经跳转到SkinItemAction处了,然后进行了入栈操作。
B.png

我们继续往下走,回到0x643380这个地址,该地址就是调用get_Price方法处,可以看到BL调用子程序get_Price后,将获得到的商品价格传入到了R5寄存器。
dyzcx.png

因此,我们此时重点关注R5寄存器,继续往下走,此时,SUB指令进入了我们的视线,如图所示,LDR  R0, [R6,#0x10]和SUB  R9, R0, R5
这正是我们要找的关键指令,综合上面可知,LDR存储到R0的数据极有可能是金币的值,知道了这一点就好办了。
sub.png

此时,我们有以下的修改方法:
方法一:对上面R5寄存器的值(商品价格)利用MVN指令进行数据的取反操作,从而让商品的价格变为负数,这样R5寄存器的值就为负数值,负负得正,就能达到购买商品反加金币的效果。

修改前:
BL   TrainSkinSettings$$get_Price
MOV  R5, R0
修改后:
BL   TrainSkinSettings$$get_Price
MVN  R5, R0

方法二:直接将SUB  R9, R0, R5修改为ADD  R9, R0, R5也能达到购买商品反加金币的效果。

步骤四:这里我用的是第一种方法,打开WinHex,然后打开libil2cpp.so文件,按组合键Alt+G定位到要修改指令的地址,对so文件进行修改。(当然也可以在IDA中按快捷键Ctrl+Alt+K用Patcher插件对指令进行修改)随后进行保存,替换游戏安装包原来armeabi-v7a目录下的 libil2cpp.so,因为修改的是armeabi-v7a的so文件,打包前记得把arm64-v8a 文件夹和arm64-v8a下的so文件全部删除掉,因为arm64-v8a是AArch64架构,之后再打包用AndroidKiller签名,安装运行,修改后的效果图如下:
hex.png

xg.png
现在就可以畅快购买,不会陷入囊中羞涩的囧境了,本次修改也就到此结束了,由于是第一次发帖,帖子中如有错误之处,麻烦各位大牛能热心指出,谢谢!

免费评分

参与人数 19威望 +1 吾爱币 +28 热心值 +18 收起 理由
庆少 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
蜡笔小曦 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
0xxx + 1 + 1 求游戏样本
审判者压缩 + 1 + 1 热心回复!
Ahix + 1 + 1 用心讨论,共获提升!
多幸运遇见baby + 1 + 1 用心讨论,共获提升!
qtfreet00 + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
叨枪blue + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
gg8899mm + 1 + 1 谢谢@Thanks!
安小可 + 1 + 1 热心回复!
Uni银魅 + 1 + 1 用心讨论,共获提升!
zy1234 + 1 + 1 我很赞同!
huangn2008 + 1 + 1 我很赞同!
qaz003 + 1 + 1 用心讨论,共获提升!
虚心的菜鸡 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
吾爱我的爱 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
南极星_睬C + 1 用心讨论,共获提升!
大表叔 + 1 + 1 用心讨论,共获提升!
CrazyNut + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 快乐交友 发表于 2021-11-17 10:37
Uni银魅 发表于 2019-7-10 22:21
请教一下,IL2CPP的U3D游戏怎么修改游戏战斗速度

很久没上线了,不好意思。
这个要根据不同的游戏做不同的具体分析,这里我只说下大体相应思路,一般来说:在dump.cs文件内查找Player类下的speed关键字函数或speed实体变量,速度在游戏中数据类型一般是浮点型,通过Hook的方式钩住float xxxSpeed()之类的函数,进行函数重写,如果是实体变量,则需要使用指针去访问修改实体变量,给其重新赋值。
姐夫总 发表于 2019-7-13 14:13
快乐交友 发表于 2019-7-11 20:32
关闭退出ida的时候,点击don't save database 就不会有其他的残留文件了。

最近在破解一款游戏,发现libil2cpp.so被修改后(即使最简单的修改,比如CMP R1, #0改为CMP             R1, #1),应用启动就会奔溃。是不是so做了加壳或者说检测so是否被篡改保护?这类问题有什么办法可以解决吗?
雨夜—伟少 发表于 2019-6-29 12:48
jghdhr 发表于 2019-6-29 13:17
很详细的过程,学习一下
吾爱我的爱 发表于 2019-6-29 15:21
学习思路和方法,感谢,希望多多出点这种教程
虚心的菜鸡 发表于 2019-6-29 15:21
谢谢分享
wwdzwo 发表于 2019-6-29 17:12

++

谢谢分享
33911628 发表于 2019-6-29 22:15
还能用winhex直接改?长见识了
zhaoby7 发表于 2019-6-29 22:23
学习一下
gg8899mm 发表于 2019-7-1 09:12
好厉害啊大佬!
贾旭sx 发表于 2019-7-1 20:27
好厉害,这是高手!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 05:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表