使用到的工具
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。其工作原理非常簡單饭玲,以鍵值對的形式將數(shù)據(jù)保存在文件中侥祭,然后程序可以根據(jù)這個名稱取出上次保存的數(shù)值。
PlayerPrefs類支持3種數(shù)據(jù)類型的保存和讀取咱枉,浮點型卑硫,整形,和字符串型蚕断。
游戲本地存檔的主要方式無外乎xml文件和數(shù)據(jù)庫存儲兩種欢伏,我們安裝運行該游戲并簡單的通過買物品和升級改變金幣和等級的數(shù)值。
然后通過R.E.管理器進入/data/data/com.batteryacid.jamcity/shared_prefs/
果然我們發(fā)現(xiàn)了命名包含playerprefs的xml存檔文件
查看該文件亿乳,如下圖硝拧,我們發(fā)現(xiàn)了與游戲中數(shù)值對應的兩個 字符串-整型 鍵值對條目:
金幣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
保存之后,F(xiàn)5刷新一下鼓寺,如下圖勋拟,代碼中顯示的是強制設置為了66666668
同理,我們也將等級CurrentLevel也強制設置為20
保存dll文件用IDE編譯出來apk 看看效果
好了妈候,初始金幣和等級都修改成功
步驟回顧:
1敢靡、反編譯apk
2、利用.NET Reflector反編譯dll
3苦银、通過Unity3d的PlayerPrefs方法了解其寫入讀取過程
4啸胧、通過查找存檔xml文件找到相應控制條件
5、在dll中找到相應位置修改代碼段
總結:
本文主要介紹安卓unity3d游戲的本地數(shù)據(jù)的修改方法幔虏。