如何反編譯UNITY遊戲?

2023/06/11閱讀時間約 3 分鐘
在撰寫這篇文章之前,我曾認為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
執行Il2CppDumper.exe並選擇global-metadata.dat 和 libil2cpp.so檔案
你可看到會產生出一個DummyDll檔案目錄

下載 dnSpy

使用dnSpy打開DummyDLL中的Assembly-CSharp.dll
  • Assembly-CSharp.dll包含您的遊戲源代碼和相關庫文件。
  • 這個工具讓您查看公開的代碼和類別。

總結

在本教學中,您學到了只要您熟悉一些工具,逆向工程Unity Android遊戲是件非常容易的事。
接下來,我將會分享一系列文章。關於如何保護您的Unity遊戲免受黑客攻擊和其他主題。
朋友們,如果您喜歡這篇文章,請給按點👏來支持一下。
謝謝您的閱讀!
原文發佈於 Game Tech Tutorial
歡迎參觀Game Tech Tutorial 來獲取更多教程喔!
分享技術文章解決問題及生活點滴。技術包括雲端技術(AWS, GCP, Azure)的實戰經驗、雲端證照考試指南、Unity遊戲開發、DevOps、SDK,手機遊戲和應用程式及網站開發。
留言0
查看全部
發表第一個留言支持創作者!
從 Google News 追蹤更多 vocus 的最新精選內容