吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.40881110.com

 ?#19968;?#23494;码
 注册[Register]
查看: 2198|回复: 18
上一主题 下一主题

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

  [复制链接]
跳转到指定楼层
楼主
快?#32440;?#21451; 发表于 2019-6-29 12:33 回帖奖励
本帖最后由 快?#32440;?#21451; 于 2019-6-29 13:39 编辑

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

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

论坛也有很多优秀的IL2cpp游戏的修改?#22363;蹋?#31532;一次在论坛发帖子,同时也是记录自己的学习点滴。

IL2cpp游戏修改我主要用到的工具如下:工具?#19981;?#26412;上能在论?#25104;?#25214;到。

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

2.Il2CppDumper4.4.2(反编译获取游戏函数地?#32602;?#24037;具的github地?#32602;?/font>https://github.com/Perfare/Il2CppDumper

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

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

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

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




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




步骤二:我们安?#23433;?#36816;行刚才下载好的游戏,发现?#22363;?#26377;各色各样的火车可以购买,但金币为0,火?#30340;?#20040;多,想买?#31350;?#30475;,钱包那么小,一辆都买不了,这怎么能行,那就要对金币进行修改了。


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


再用文本工具Sublime Text工具打开Il2CppDumper4.4.2目录下的dump.cs文件,查找金币的英文关键词gold,coin,以获取关键函数的地?#32602;?#20294;是?#20063;?#26410;找到有?#23548;?#24847;义的方法函数,不过TrainSkinSettings这个class类引起了我的注意,而且下方还有一个私有的price价格字段,所以向?#36335;?/font>

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

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

我们就跳转到buyskin方法的相应地?#32602;?#30475;到程序已经跳转到SkinItemAction处了,然后进行了入栈操作。

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

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

此时,我们有以下的修改方法:
方法一:对上面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也能达到购买商品反加金币的效果。

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

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

免费评分

参与人数 17威望 +1 吾爱币 +27 热心值 +16 收起 理由
0xxx + 1 + 1 求游戏样本
审判者压缩 + 1 + 1 热心回复!
Ahix + 1 + 1 用心讨论,?#19981;?#25552;升!
多?#20197;?#36935;见baby + 1 + 1 用心讨论,?#19981;?#25552;升!
qtfreet00 + 1 + 9 + 1 ?#34892;?#21457;布原创作?#32602;?#21566;爱破解论坛因你更精彩!
叨枪blue + 1 + 1 ?#34892;?#21457;布原创作?#32602;?#21566;爱破解论坛因你更精彩!
gg8899mm + 1 + 1 谢谢@Thanks!
安小可 + 1 + 1 热心回复!
Uni银魅 + 1 + 1 用心讨论,?#19981;?#25552;升!
zy1234 + 1 + 1 我很赞同!
huangn2008 + 1 + 1 我很赞同!
qaz003 + 1 + 1 用心讨论,?#19981;?#25552;升!
虚心的菜鸡 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
吾爱我的爱 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
南极星_睬C + 1 用心讨论,?#19981;?#25552;升!
大表叔 + 1 + 1 用心讨论,?#19981;?#25552;升!
CrazyNut + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

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

推荐
姐夫总 发表于 2019-7-13 14:13
快?#32440;?#21451; 发表于 2019-7-11 20:32
关闭退出ida的时候,点击don't save database 就不会有其他的残留文件了。

最近在破解一款游戏,发现libil2cpp.so被修改后(即使最简单的修改,?#28909;鏑MP R1, #0改为CMP             R1, #1),应用启动就会奔溃。是不是so做了加壳或者?#23548;?#27979;so是否被篡改保护?这类问题有什么办法可以解决吗?
推荐
姐夫总 发表于 2019-7-10 18:41
修改腾讯的游戏,按照上述方法修改libil2cpp.so,保存后编译APK时失败提示brut.common.BrutException: Could not copy file: gwgo\lib\armeabi-v7a\libil2cpp.id0
lib下除了有libil2cpp.so,还有libil2cpp.id0、libil2cpp.id1、libil2cpp.id2、libil2cpp.nam、libil2cpp.til,应该是修改libil2cpp.so后悔影响其他文件编译,请问楼主有没有什么好办法?
沙发
雨夜—伟少 发表于 2019-6-29 12:48
3#
jghdhr 发表于 2019-6-29 13:17
很详细的过程,学习一下
4#
吾爱我的爱 发表于 2019-6-29 15:21
学习思路和方法,?#34892;唬?#24076;望多多出点这种?#22363;?img src="https://static.52pojie.cn/static/image/smiley/laohu/laohu33.gif" smilieid="997" border="0" alt="" />
5#
虚心的菜鸡 发表于 2019-6-29 15:21
谢谢分享
6#
wwdzwo 发表于 2019-6-29 17:12

++

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

本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2019-7-21 18:38

Powered by Discuz!

© 2001-2017 Comsenz Inc.

球探网篮球指数
贵州十一选五前三直 澳洲幸运5下载 4月河北11选5开奖结果 四川快乐12开奖结果 6肖中特期期中 8月1日生肖时时彩 中500万的号码 彩经网双色球杀号 福建时时彩开奖直播 一肖中特死公式 杀平特一肖公式规律 重庆幸运农场直播开奖视频 河北排列5规则 大乐透走势图带坐标连线标准版 牛牛抢红包神器新版