记一次安卓Unity3d游戏的逆向分析

使用到的工具

ApkToolBox
.NET Reflector
Reflexil(.NET程序编辑器)

怎么判定它是Unity游戏呢
一般的路径格式是这样的assets\bin\Data\Managed
[如果是个Unity游戏却找不到dll文件那么骚年放弃吧。。。]


一般情况下都是修改上图的这个dll文件
[如果想要搜索的东西不在这个dll文件可借用UltraEdit、EditPlus、Notepad++等常用编辑工具辅助搜索来判断对哪个dll文件进行修改

以Jam City这款游戏为例来作以下分析:

内购破解部分就不讲了,因为下面将要修改的比内购的要来的痛快
用ApkToolBox反编译之后找到dll文件就是上图的那个文件用.NET Reflector打开
[.NET Reflector工具的基本使用方法请自行百度]
在手机上试玩了下这个游戏 篮板和抢断的路线根本就不明确嘛。。。

金币-Coin、等级-Level 那么着重修改这两个值吧

按下F3搜索,切换到方法搜索



搜到的内容这么多 改哪个呢 头疼啊!

等等!unity3d提供的有存档类啊!这是一大重要的切入点O(∩_∩)O~

unity3d提供了一个用于本地持久化保存与读取的类——PlayerPrefs。其工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值。
PlayerPrefs类支持3种数据类型的保存和读取,浮点型,整形,和字符串型。

游戏本地存档的主要方式无外乎xml文件和数据库存储两种,我们安装运行该游戏并简单的通过买物品和升级改变金币和等级的数值。

然后通过R.E.管理器进入/data/data/com.batteryacid.jamcity/shared_prefs/
果然我们发现了命名包含playerprefs的xml存档文件


查看该文件,如下图,我们发现了与游戏中数值对应的两个 字符串-整型 键值对条目:
金币Currency和等级CurrentLevel


我们回到.NET Reflector 切换到类搜索,搜索PlayerPrefs得到下图结果,双击进入位于Assembly-CSharp集中的PlayerPrefsx类


双击进入GetInt(String,Int32)整型方法,Tools ---- reflexil v1.6 开启reflexil工具


然后在第一行“Create new...”新建字符串类型(OpCade代码为ldstr),最后“Insert before select”插入到第一行前


在第二行新建整型(OpCade代码为ldc.i4)


在第三行新建方法(OpCade代码为call),
并在PlayerPrefsx类中选择GetInt(System.String,System.Int32)方法


这样,我们就将Currency强制设置为66666668了
回到dll文件名这里,右键鼠标移到Reflexil v1.6保存dll


保存之后,F5刷新一下,如下图,代码中显示的是强制设置为了66666668


同理,我们也将等级CurrentLevel也强制设置为20


保存dll文件用IDE编译出来apk 看看效果

好了,初始金币和等级都修改成功

步骤回顾:
1、反编译apk
2、利用.NET Reflector反编译dll
3、通过Unity3d的PlayerPrefs方法了解其写入读取过程
4、通过查找存档xml文件找到相应控制条件
5、在dll中找到相应位置修改代码段

总结:
本文主要介绍安卓unity3d游戏的本地数据的修改方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 更新:【面试题含答案】http://bbs.9ria.com/thread-288394-1-1.html 高频问...
    好怕怕阅读 10,331评论 3 52
  • 《腾讯桌球:客户端总结》 本次分享总结,起源于腾讯桌球项目,但是不仅仅限于项目本身。虽然基于Unity3D,很多东...
    吴秦阅读 24,934评论 12 142
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,702评论 25 709
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,381评论 0 27
  • 一份能让我感觉吃的饱饱的,直到说'谢谢款待'的爱。你就是这样的,小师弟,如果有天我一贫如洗,我希望最后的行李是你。...
    与尔熙阅读 1,001评论 0 0