作者:dawu@知道創宇404實驗室
時間:2019/02/25
英文版本:https://paper.seebug.org/943/
0x00 前言
這是一篇遊戲引發的簡單技術文。
起因是個人很喜歡玩 google play
上的一些數字類型(角色攻擊是線性增長,怪物指數變強,到後期越打不過,通過重生增強屬性變強)的小遊戲。但是這種遊戲仍舊存在一定缺陷,前期資源不多,玩的太慢、玩的時間長了,就感覺沒意思,就不想玩了,所以在玩到遊戲中期的時候,往往都會去網上搜索XXX破解版/內購版,快速進入後期然後放棄這款遊戲。
這樣的做法其實是很不安全的,因為無法判斷XXX破解版/內購版在破解/內購之後還做了什麼。所以我最後的解決辦法是,逆向這些apk,修改遊戲邏輯。讓我在玩的時候,可以快速度過緩慢的前期。
逆向了幾個玩過的遊戲,發現這類遊戲使用Unity3D開發的居多。因此本文將介紹簡單Unity3D類安卓遊戲的逆向修改思路。
0x01 準備工具
逆向最簡單的Unity3D類安卓遊戲建議使用安裝好 JAVA 環境的Windows系統(涉及到dll文件的修改,所以Windows平台更加適合)。
1.1 安卓 APK 逆向三件套
一般 APK 逆向,常使用到 apktool
、dex2jar
、jd-gui
。在逆向 Unity3D 安卓遊戲時,僅僅只需要使用到 apktool
1.2 dll文件逆向三件套
因為一般的 Unity3D 安卓遊戲的主邏輯都在 asserts/bin/data/Managed/Assembly-CSarp.dll
中,所以我們還需要 dll文件逆向/重新打包
的工具。
- ILSpy: 用於查看dll程序邏輯
- ILDASM: 用於反編譯dll文件,生成il文件(存放了dll反編譯后的指令)和res文件(反編譯后的資源文件),可以安裝Windows SDK或者從網上下載。
- ilasm: .net4.0自帶了,位置在
C:/Windows/Microsofr.NET/Framework/v4.0.30319/ilasm.exe
1.3 生成重新打包的自簽名證書
修改完 apk 之後,需要對 apk 進行簽名。該命令用於生成簽名的證書。
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 0validity 10000 # 記住設置的密碼,最後自簽名應用的時候需要輸入密碼
0x02 開發一個簡單的 Unity3D 遊戲
用Unity3D開發了一個簡單小遊戲作為本文的樣例,邏輯十分簡單:
- 英雄每過一關戰鬥力都會增加100.
- 怪物的戰鬥力為 Math.pow(2,當前關數)
- 當英雄戰鬥力小於怪物的戰鬥力時,英雄無法闖關。英雄可以考慮修鍊或者重生提高戰鬥力。
- 英雄每次修鍊戰鬥力都會增加1000.
- 英雄選擇重生后,關卡數清零,需要重新闖關,但英雄初始戰鬥力會增加 2000 * 重生前闖關數。
0x03 遊戲逆向步驟
1.使用 apktool
解壓遊戲安裝包
java -jar apktool.jar d game.apk
2.提取出 game/assets/bin/data/Managed/Assembly-CSarp.dll
,使用 ILSpy
打開即可看到 dll 裡面的邏輯。
註: Unity3D開發的安卓遊戲,其核心代碼都在這個 dll 文件中,所以逆向/修改這個 dll 文件就可以了。這也是 Unity3D 和 其它安卓逆向不同的地方。
转载请注明:IAMCOOL » 簡單 Unity3D 安卓遊戲逆向思路