吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 30851|回复: 17
收起左侧

[Android 原创] 记一次安卓Unity3d游戏的逆向破解

[复制链接]
windclear 发表于 2016-9-23 16:02
本帖最后由 windclear 于 2016-9-23 16:06 编辑

使用到的工具

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

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

1.png

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

以Jam City这款游戏为例来作以下分析:
内购破解部分就不讲了,因为下面将要修改的比内购的要来的痛快
用ApkToolBox反编译之后找到dll文件就是上图的那个文件用.NET Reflector打开

[.NET Reflector工具的基本使用方法请自行百度
在手机上试玩了下这个游戏 篮板和抢断的路线根本就不明确嘛。。。
金币-Coin、等级-Level 那么着重修改这两个值吧
按下F3搜索,切换到方法搜索

2.png

搜到的内容这么多 改哪个呢 头疼啊!
等等!unity3d提供的有存档类啊!这是一大重要的切入点O(∩_∩)O~


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

游戏本地存档的主要方式无外乎xml文件和数据库存储两种,我们安装运行该游戏并简单的通过买物品和升级改变金币和等级的数值。
然后通过R.E.管理器进入/data/data/com.batteryacid.jamcity/shared_prefs/
果然我们发现了命名包含playerprefs的xml存档文件


3.png


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


4.png


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


5.png


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


6.png


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


7.png


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


8.png


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


9.png


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


10.png


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


12.png


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


13.png


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


14.png

15.png


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


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


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

2016.9.20 风澈vio

免费评分

参与人数 6威望 +1 热心值 +6 收起 理由
qtfreet00 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
小朋友呢 + 1 我很赞同!
ZMZwise + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wnagzihxain + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zhangbo093 + 1 谢谢@Thanks!学习了,支持一下!!
亿联网络 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

小朋友呢 发表于 2016-9-23 18:30
这个教程很厉害,我虽然看不懂,这个必须加精的
chinahacker 发表于 2016-9-28 18:52 来自手机
windclear 发表于 2016-9-23 18:31
感谢支持

你好,有个apk应用,拍照时调用系统相机,需要破解不让apk调用系统相机,实现拍照时调用别的第三方相机。还有apk的时间是调用服务器时间,希望实现调用手机本地时间。急用,大神能否帮忙,有报酬。请回复我。
zhangbo093 发表于 2016-9-23 16:29
教程清晰完整,感谢楼主分享详细过程!!赞一个
 楼主| windclear 发表于 2016-9-23 18:31
377610458 发表于 2016-9-23 18:30
这个教程很厉害,我虽然看不懂,这个必须加精的

感谢支持
他山之石可攻玉 发表于 2016-9-23 19:14
厉害厉害厉害,学习了。
IT_K 发表于 2016-9-23 21:27
日常回帖!!!!
giantbranch 发表于 2016-9-24 09:41
看了下还是有收获的
23king 发表于 2016-9-27 10:27
DLL没有加密..............楼主有研究过dll加密的吗..............或者最新U3D游戏可以用IL2CPP.貌似无解...........
137313659 发表于 2016-9-27 23:13 来自手机
@windclear 请问下咋确定u3d 游戏是否有在本地储存数据呢?
lance65 发表于 2016-9-28 10:48
PC版的UNITY游戏,比如大航海时代5可以修改吗??
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 16:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表