目錄
- 簡介
- 前提條件
- 安裝步驟
- 1. 下載和解壓項目
- 2. 配置 Android Studio
- 3. 安裝到設備
- 修改游戲 APK
- 1. 確定游戲主活動
- 2. 集成模組菜單
- 方法 1:通過服務啟動(推薦)
- 方法 2:通過活動啟動(僅在游戲檢測模組時使用)
- 3. 合并模組和游戲 APK
- 4. 測試修改后的 APK
- 使用模組菜單
- 1. 基本操作
- 2. 自定義功能
- 3. 調試與優化
- 常見問題
- 注意事項
- 參考資源
簡介
LGLTeam 的 Android-Mod-Menu 是一個強大的 Android 游戲浮動模組菜單模板,支持 il2cpp 和原生 Android 游戲,集成了 KittyMemory、MSHook、And64InlineHook 等工具,并提供 AY Obfuscator 進行字符串混淆。項目支持 Android 4.4.x 至 Android 12,兼容 ARMv7、x86 和 ARM64 架構。本教程將詳細介紹安裝、配置、APK 修改及使用方法,適合有一定 Android 開發基礎的用戶。
注意:本項目僅用于學習和研究,請勿用于非法或商業用途。使用不當可能引發法律問題,開發者不對任何不當使用負責。
前提條件
開始之前,請確保滿足以下條件:
- 基礎知識:
- 熟悉 Android 布局(XML 和 Java)。
- 了解 Android 開發環境(如 Android Studio)。
- 掌握基本的 C++ 和 JNI(Java Native Interface)知識。
- 了解 APK 文件結構、smali 文件及反編譯工具(如 Apktool)。
- 開發環境:
- 一臺運行 Windows、macOS 或 Linux 的電腦。
- 已安裝 Android Studio 和 Android NDK。
- 準備 APK 反編譯工具,如 APK Easy Tool、MT Manager 或 APK Editor Pro。
- 一臺 Android 設備(建議 Android 5.0+,ARMv7 或 ARM64 架構)。
- 項目文件:
- 從 GitHub 下載 Android-Mod-Menu 源代碼(https://github.com/LGLTeam/Android-Mod-Menu/releases)或克隆倉庫:
git clone https://github.com/LGLTeam/Android-Mod-Menu.git
- 確保下載與設備 CPU 架構匹配的 NDK 文件(
ndk_arm.tar.gz
用于 ARMv7,ndk_arm64.tar.gz
用于 ARM64)。
- 從 GitHub 下載 Android-Mod-Menu 源代碼(https://github.com/LGLTeam/Android-Mod-Menu/releases)或克隆倉庫:
安裝步驟
1. 下載和解壓項目
- 訪問 https://github.com/LGLTeam/Android-Mod-Menu/releases,下載最新版本的源代碼 ZIP 文件,或通過 Git 克隆倉庫。
- 解壓到無空格或特殊字符的目錄(如
C:\AndroidModMenu
或/home/user/AndroidModMenu
)。
2. 配置 Android Studio
- 打開 Android Studio,選擇 File > Open,加載解壓后的項目文件夾。
- 等待項目同步完成(初次可能需 1-2 分鐘)。
- 配置 NDK:
- 進入 File > Project Structure > SDK Location。
- 在 Android NDK Location 中選擇 NDK 文件路徑(如
ndk_arm.tar.gz
或ndk_arm64.tar.gz
)。 - 確保 NDK 版本與設備架構兼容。
- 檢查構建配置:
- 打開
app/build.gradle
,確認ndk
配置正確。 - 如需更改庫名稱,修改
app/src/main/jni/Android.mk
中的LOCAL_MODULE
,并更新MainActivity.java
中的System.loadLibrary("")
。
- 打開
3. 安裝到設備
- 連接 Android 設備,啟用 開發者選項 和 USB 調試。
- 在 Android Studio 中選擇設備,點擊 Run 構建并安裝調試 APK(
app-debug.apk
)。 - 構建成功后,APK 將自動安裝,文件位于
app/build/outputs/apk/app-debug.apk
。
提示:若使用 AIDE 等移動端 IDE,需安裝模組專用版本的 AIDE(Play Store 版本不兼容),詳見 Wiki。
修改游戲 APK
將模組菜單集成到目標游戲需要修改 APK 文件,以下是步驟:
1. 確定游戲主活動
- 使用 APK 反編譯工具(如 APK Easy Tool 或 MT Manager)解編譯目標游戲 APK。
- 打開
AndroidManifest.xml
,查找<action android:name="android.intent.action.MAIN"/>
,記錄主活動路徑(如com.unity3d.player.UnityPlayerActivity
)。
2. 集成模組菜單
推薦使用服務啟動方法,避免同時使用兩種方法。
方法 1:通過服務啟動(推薦)
- 在
AndroidManifest.xml
的<application>
標簽末尾添加服務(根據需要調整包名):<service android:name="com.android.support.Launcher" android:enabled="true" android:exported="false" android:stopWithTask="true" />
- 找到游戲主活動的 smali 文件(路徑如
/com/unity3d/player/UnityPlayerActivity.smali
)。 - 在
onCreate
方法中添加:invoke-static {p0}, Lcom/android/support/Main;->Start(Landroid/content/Context;)V
- 保存修改。
方法 2:通過活動啟動(僅在游戲檢測模組時使用)
- 在
AndroidManifest.xml
中添加模組主活動:<activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="com.android.support.MainActivity" android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter> </activity>
- 確保游戲原始主活動不再包含
<action android:name="android.intent.action.MAIN"/>
。 - 添加懸浮窗權限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
- 若菜單未顯示,檢查設備懸浮窗權限設置。
3. 合并模組和游戲 APK
- 反編譯
app-debug.apk
,提取模組的 smali 文件(位于smali/com/android/support
)。 - 將模組 smali 文件夾復制到游戲反編譯目錄的 smali 文件夾(建議放入最后一個
smali_classes
文件夾)。 - 重命名模組 dex 文件(如
classes.dex
改為classes2.dex
),確保 dex 順序正確。 - 復制模組的
.so
文件到游戲的架構目錄(armeabi-v7a
或arm64-v8a
),確保架構匹配。 - 使用 APK 工具重新編譯并簽名 APK,建議啟用“自動簽名”。
4. 測試修改后的 APK
- 安裝簽名后的 APK 到設備。
- 啟動游戲,檢查模組菜單是否顯示。
- 若菜單未顯示,使用 Android Studio 的 Logcat 查看錯誤日志,搜索解決方案。
使用模組菜單
1. 基本操作
- 游戲啟動后,模組菜單以浮動窗口形式顯示。
- 菜單支持開關、按鈕、復選框等控件,可通過 Java 和 C++ 自定義功能。
- 日志路徑(以下路徑可能因設備而異,建議實際驗證):
- Android 11 及以上:
/storage/emulated/0/Documents/ModMenuLogs/
- Android 10 及以下:
/storage/emulated/0/Android/data/<包名>/files/ModMenuLogs/
(修正:路徑中的“包名”需替換為游戲實際包名,如com.example.game
)。
- Android 11 及以上:
2. 自定義功能
- 添加功能:
- 在
FloatingModMenuService.java
的localChanges(int featureNum, boolean toggle)
方法中定義邏輯。 - 使用負數(如
-1
)分配設置項,正數(如1, 3, 200
)分配模組功能。 - 示例:添加默認啟用的復選框,使用
CheckBox_True_功能名稱
。
- 在
- UI 自定義:
- 使用
GradientDrawable
設置圓角和邊框:GradientDrawable gradientdrawable = new GradientDrawable(); gradientdrawable.setCornerRadius(20); gradientdrawable.setColor(Color.parseColor("#1C2A35")); gradientdrawable.setStroke(1, Color.parseColor("#32cb00"));
- 適配不同分辨率設備,考慮自動縮放。
- 使用
- 字符串混淆:
- 使用 AY Obfuscator 保護字符串:
OBFUSCATE("字符串") OBFUSCATE_KEY("字符串", 0x3FE63DF21A3B)
- 重要代碼(如偏移量)存儲在
.so
文件中,避免暴露在 Java/smali 中。
- 使用 AY Obfuscator 保護字符串:
3. 調試與優化
- 日志調試:
- 在 C++ 代碼中添加日志(如
LOGD("調試信息")
),通過 logcat 查看:bool get_BoolExample(void *instance) {LOGD("BoolExample 1");if (instance != NULL && featureHookToggle) {LOGD("BoolExample 2");return true;}LOGD("BoolExample 3");return old_get_BoolExample(instance); }
- 在 C++ 代碼中添加日志(如
- 避免崩潰:
- 確保 hook 和 patch 的偏移量正確,檢查游戲
.so
文件的架構。 - 使用
#if defined(__aarch64__)
區分 32 位和 64 位代碼。
- 確保 hook 和 patch 的偏移量正確,檢查游戲
- 保護代碼:
- 啟用 ProGuard 縮小代碼,添加過濾器避免破壞項目。
- 避免使用不可信的加密工具,防止被誤報為惡意軟件。
- 公開源代碼到 GitHub 可減少盜用風險。
常見問題
- 模組菜單未顯示?
- 確認
SYSTEM_ALERT_WINDOW
權限已添加。 - 檢查
onCreate
方法中的 smali 調用。 - 查看 logcat 日志,排查權限或架構問題。
- 確認
- 游戲崩潰?
- 確保
.so
文件位于正確架構目錄。 - 檢查 hook 偏移量是否正確。
- 使用 logcat 定位錯誤。
- 確保
- 方法數超限(65535)?
- 將模組 smali 文件放入
smali_classes2
或更高編號文件夾。 - 避免放入游戲主
smali
文件夾。
- 將模組 smali 文件放入
- 舊版 Android 布局問題?
- 部分游戲在無權限啟動時使用舊布局,暫無解決方案。
- 如何獲取支持?
- 查看 Wiki 的 FAQ(https://github.com/LGLTeam/Android-Mod-Menu/wiki/FAQ)。
- 在 Platinmods 或 UnknownCheats 論壇提問,官方不提供一對一支持。
注意事項
- 學習成本:需要 Android 開發和逆向工程知識,建議學習 JNI、smali 和 il2cpp。
- 社區規范:避免重復提問,初學者應查閱資料。惡意行為可能導致被屏蔽。
- 法律風險:不要用于受保護的游戲(如 PUBG、Free Fire),以免引發法律問題。
參考資源
- GITHUB:https://github.com/LGLTeam/Android-Mod-Menu