记一次Unity3D dat修改过程
本帖最后由 痞孑 于 2018-6-6 20:45 编辑关于dat打包的游戏想必也大家修改游戏的时候也遇过在2014年年中的时候,Unity3D官方博客上却发了一篇“The future of scripting in unity”的文章,引出了IL2CPP的概念从名字可以看出 IL2CPP。大家很容易就理解其意义了(把IL中间语言转换成CPP文件)
讲的明白一点 就是咱们平时修改dllldc.i4 9999999ret这种就是IL语言。IL2CPP就是将这种东西转换成cpp。也就是C++
今天我就拿“致命杀手”这个游戏来说其目的就是要修改游戏里边的金币、钞票
准备工具如下1. dat的Unity3D游戏
2. Il2CppDumper工具
ok,那我们直接进入正题
打开安装包提取lib/armeabi-v7a/libil2cpp.so
然后提取assets\bin\Data\Managed\Metadata\global-metadata.dat
把以上提取的两个文件放到dump工具目录下
运行dump工具
分析之后得出的一个dump.cs文件,可以用Notepad++打开上面说了目的是要修改“金币”“钞票”那我们在cs文件里边搜索一些常见的货币例如搜索 “Gold”“Money” (大小写无所谓)
找到了不少,但是这个是正确的 “//”后面的地址是这个方法名所在so的偏移之后会用到记下来得到偏移之后我们把libil2cpp.so扔进IDA分析分析完之后再页面按“G”输入“Gold”的偏移也就是图上看到的876750
然后按回车键会跳到这里,也就是Gold的地方了这种改过dll的都知道,重新给个返回值就好了
那么我们找到关键点了,点击此处,然后切换到Hex-view-1查看它的16进制码复制它的地址及对应的16进制码,先放到txt文件中,然后关闭这个文件
然后关闭ida之后,然后我们再使用010Editor打开刚才的那个so文件,可直接把so文件拖入010Editor,因为我们刚才已经知道那个最后获取金币的地址了,所以这里直接Ctrl+G跳转到那个地址
修改完之后,保存,然后把修改过的so文件替换到原目录里边重新再次编译生成apk,运行游戏之后,效果如下图
上亿的金币钞票还怕玩不下去?
工具下载**** Hidden Message *****
lanlana 发表于 2018-6-8 21:15
mov R0,#0xFFFFFF
是怎么转成0F 02 E0 E3的不懂 大神可不可以讲讲
我百度不出来
百度 arm to hex 楼主,dump.cs文件里偏移数字都是“RVA: 0x4863FD4 Offset: 0x4863FD4”,类似这样的:
public int get_DiamondValue(); // RVA: 0x4863FD4 Offset: 0x4863FD4
public void set_DiamondValue(int value); // RVA: 0x4863FE0 Offset: 0x4863FE0
不太理解。擎楼主指点指点!! 正好现在学习这个呀 哎呀 ,没评分了 。。。多谢 大佬的教程 谢谢分享 技术 文章。Unity3D 现在安卓游戏都用这个引擎 感谢分享。。。。 新内容,,没看到过,感谢楼主分享 楼主,问个问题,进游戏的时候有文件检测怎么搞,改完以后进游戏error 好神奇,感谢分享 不错,学习了。。。