unity 修改文件后缀_unity游戏生成与修改so文件教程

本文详细介绍了如何对使用Unity3D引擎开发的游戏进行修改,包括分析apk安装目录、理解Unity3D资源路径,以及针对libil2cpp.so的修改。通过实例教学如何使用Il2CppDumper工具,解决了内联函数导致的修改难题,以修改游戏中的金币值为例,展示了修改流程。同时,探讨了函数内联可能导致的修改无效问题及其解决方案。
摘要由CSDN通过智能技术生成

本帖最后由 迷之裙摆 于 2018-1-27 21:14 编辑

本文主要介绍如何对unity3d引擎制作的游戏进行修改。包含了apk文件安装后在手机中的位置分析、修改游戏时遇见内联函数之坑时的解决办法,以及so文件的原理介绍与解析修改。并将实例教学如何修改unity3d游戏(想学崩坏3修改的同学请注意啦)。教程是给入门新手看的,请大神绕道勿喷。文章的核心内容在最后利用Il2CppDumper的部分,前面清楚的话可直接绕到最后看。(因为手机截图下来的图片分辨率太大。看起来排版会不太舒服,可以直接到文章最后下载文档查看,排版会舒服很多)

基础知识

0x1.apk安装后在手机中的目录

apk安装后会在两个包下生成相关包:data/data/、data/app/。

这里拿网易云音乐的安装目录举例。Data/App目录下通常会有三个文件:

1.lib文件夹(包含so库文件)、

2.oat文件夹(OAT文件是一种android私有ELF文件格式,它不仅包含有从DEX文件翻译而来的本地机器指令,还包含有原来的DEX文件内容。这使得我们无需重新编译原有的APK就可以让它正常地在ART里面运行)、

3.base.apk启动包。【其中apk启动包是不允许重命名或删除的,因为app运行时其实就是链接到这个启动包,然后才能继续启动操作。这个启动包用beyond对比后可以发现,与原安装包没有任何不同,所以就相当与apk的原版安装包】。

图片2.jpg (36.96 KB, 下载次数: 11)

2017-6-22 01:00 上传

图片1.png (182.98 KB, 下载次数: 13)

2017-6-21 23:31 上传

Data/data目录下一般是存储lib文件夹(保护so库文件)以及其他数据文件、缓存等。只需要知道这里的lib实际上与data/app目录下的lib目录中内容是一样的。

游戏在运行的时候,一般都会载入dada/data目录中的lib与data/app中的lib,通常来说只需要修改data/data中的lib文件夹中的so文件即可达到成功修改的效果。当然也有一小部分游戏根本不读取data/data目录下的lib文件夹,待会会讲到。

图片3.png (177.28 KB, 下载次数: 12)

2017-6-21 23:32 上传

0x2.Unity3D中的资源路径Application.dataPath此属性用于返回程序的数据文件所在文件夹的路径。例如在Editor中就是Assets了。

Application.streamingAssetsPath此属性用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。

Application.persistentDataPath此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件。

Application.temporaryCachePath此属性用于返回一个临时数据的缓存目录。android平台Application.dataPath/data/app/xxx.xxx.xxx.apk

Application.streamingAssetsPathjar:file:///data/app/xxx.xxx.xxx.apk/!/assets

Application.persistentDataPath/data/data/xxx.xxx.xxx/files

Application.temporaryCachePath/data/data/xxx.xxx.xxx/cacheIOS平台Application.dataPathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data

Application.streamingAssetsPathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw

Application.persistentDataPathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents

Application.temporaryCachePathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches0x3.C#的inline内联函数优化

虽然C#不支持inline,但是JIT支持自动inline,即将IL转成真正机器码时,会自动将某些函数进行inline展开,只是条件非常苛刻,网上提到JIT自动进行inline展开的一些选择依据:

1)函数内部有循环语句、catch语句等复杂结构,都不做inline优化。

2)函数体比较长的不做inline优化,只有比较简单的才可能inline优化。(有人说IL不足32字节才做inline),

2)编译成机器码时,inline展开的代码比函数调用更短的,一定做inline。(注:如果参数多而代码少,就符合此情况)

这里为什么要讲内联函数呢,加入如果游戏中有一个读取人物攻击力的函数,其内部代码十分简单,结果被编译为机器码的时候变为了内联函数。那么这个时候要来修改就十分麻烦了࿰

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值