在撰寫這篇文章之前,我曾認為Unity的遊戲比使用JavaScript編寫的網頁遊戲更安全。因為編譯出的遊戲apk檔案是以二進制形式儲存,相較於使用純文字JavaScript程式碼建立的遊戲,要逆向工程遊戲應該非常困難。
然而,在進行了一些實驗後,我發現我的理論是錯誤的,因此決定寫下這篇教學文章。
通過使用IL2CPP作為腳本後端來編譯遊戲,可以輕鬆從apk檔案中逆向還原出C#源代碼,這讓惡意駭客有能力查看您在遊戲中實現了哪些類、方法、函數、屬性,甚至是邏輯。
在本教學中,您將了解在Android平台上逆向工程基於Unity的遊戲有多容易。
這是何時發生的?
自2019年8月1日起,Google要求所有遊戲支持64位架構,Unity開發者需要在構建和發布遊戲到Google Play商店時啟用IL2CPP腳本後端功能。 這可能存在公開發現遊戲代碼的風險。
參考資料:https://developer.android.com/distribute/best-practices/develop/64-bit
使用Unity的IL2CPP模式編譯Android遊戲
選擇IL2CPP的後台模式來編譯遊戲
反組譯 apk 檔案
- 下載和設定 apktool
- 執行apktool指令來解壓縮 apk 檔案
apktool d -r -s [your game].apk
/Assets/ : 包含美術和聲音文件,
/lib/arm64-v8a/libil2cpp.so: 包含遊戲代碼
Assets/bin/data/Managed/Metadata/global-metadata.dat: 包含ill2cpp.so中的類名、屬性、字符串映射表。
逆向工程DLL文件
- 下載 Il2CppDumper
- 將global-metadata.dat和libil2cpp.so複製到ll2CppDumper-v6.6.2文件夾中
cp Assets/bin/data/Managed/Metadata/global-metadata.dat to ll2CppDumper-v6.6.2
cp lib/armeabi-v7a/libil2cpp.so ll2CppDumper-v6.6.2
你可看到會產生出一個DummyDll檔案目錄
使用dnSpy打開DummyDLL中的Assembly-CSharp.dll
- Assembly-CSharp.dll包含您的遊戲源代碼和相關庫文件。
- 這個工具讓您查看公開的代碼和類別。
總結
在本教學中,您學到了只要您熟悉一些工具,逆向工程Unity Android遊戲是件非常容易的事。
接下來,我將會分享一系列文章。關於如何保護您的Unity遊戲免受黑客攻擊和其他主題。
朋友們,如果您喜歡這篇文章,請給按點👏來支持一下。
謝謝您的閱讀!