痞孑 发表于 2018-6-5 10:08

记一次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 *****


CIBao 发表于 2018-6-10 02:16

lanlana 发表于 2018-6-8 21:15
mov R0,#0xFFFFFF
是怎么转成0F 02 E0 E3的不懂   大神可不可以讲讲
我百度不出来

百度 arm to hex

姐夫总 发表于 2019-7-10 16:00

楼主,dump.cs文件里偏移数字都是“RVA: 0x4863FD4 Offset: 0x4863FD4”,类似这样的:

        public int get_DiamondValue(); // RVA: 0x4863FD4 Offset: 0x4863FD4
        public void set_DiamondValue(int value); // RVA: 0x4863FE0 Offset: 0x4863FE0

不太理解。擎楼主指点指点!!

form 发表于 2018-6-5 10:16

正好现在学习这个呀

Dicker 发表于 2018-6-5 10:17

哎呀 ,没评分了 。。。多谢 大佬的教程

笑话777 发表于 2018-6-5 10:30

谢谢分享

灵影 发表于 2018-6-5 10:55

技术 文章。Unity3D 现在安卓游戏都用这个引擎

yhzh 发表于 2018-6-5 11:14

感谢分享。。。。

xj1985 发表于 2018-6-5 11:40

新内容,,没看到过,感谢楼主分享

hellokett 发表于 2018-6-5 12:15

楼主,问个问题,进游戏的时候有文件检测怎么搞,改完以后进游戏error

菊的花 发表于 2018-6-5 12:19

好神奇,感谢分享

ywfengjie 发表于 2018-6-5 12:59

不错,学习了。。。
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 记一次Unity3D dat修改过程