最新消息:图 床

簡單 Unity3D 安卓遊戲逆向思路

COOL IAM 358浏览 0评论

作者: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 逆向,常使用到 apktooldex2jarjd-gui。在逆向 Unity3D 安卓遊戲時,僅僅只需要使用到 apktool

  • Apktool: 用於解壓/重新打包安卓APK。
  • dex2jar: 將解壓出來的dex文件變成jar,方便使用jd-gui查看
  • jd-gui: 查看dex文件邏輯

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開發了一個簡單小遊戲作為本文的樣例,邏輯十分簡單:

  1. 英雄每過一關戰鬥力都會增加100.
  2. 怪物的戰鬥力為 Math.pow(2,當前關數)
  3. 當英雄戰鬥力小於怪物的戰鬥力時,英雄無法闖關。英雄可以考慮修鍊或者重生提高戰鬥力。
  4. 英雄每次修鍊戰鬥力都會增加1000.
  5. 英雄選擇重生后,關卡數清零,需要重新闖關,但英雄初始戰鬥力會增加 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 安卓遊戲逆向思路

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x