Android-Mod-Menu 使用教程

目录

    • 简介
    • 前提条件
    • 安装步骤
      • [1. 下载和解压项目](#1. 下载和解压项目)
      • [2. 配置 Android Studio](#2. 配置 Android Studio)
      • [3. 安装到设备](#3. 安装到设备)
    • [修改游戏 APK](#修改游戏 APK)
      • [1. 确定游戏主活动](#1. 确定游戏主活动)
      • [2. 集成模组菜单](#2. 集成模组菜单)
        • [方法 1:通过服务启动(推荐)](#方法 1:通过服务启动(推荐))
        • [方法 2:通过活动启动(仅在游戏检测模组时使用)](#方法 2:通过活动启动(仅在游戏检测模组时使用))
      • [3. 合并模组和游戏 APK](#3. 合并模组和游戏 APK)
      • [4. 测试修改后的 APK](#4. 测试修改后的 APK)
    • 使用模组菜单
      • [1. 基本操作](#1. 基本操作)
      • [2. 自定义功能](#2. 自定义功能)
      • [3. 调试与优化](#3. 调试与优化)
    • 常见问题
    • 注意事项
    • 参考资源

简介

LGLTeam 的 Android-Mod-Menu 是一个强大的 Android 游戏浮动模组菜单模板,支持 il2cpp 和原生 Android 游戏,集成了 KittyMemory、MSHook、And64InlineHook 等工具,并提供 AY Obfuscator 进行字符串混淆。项目支持 Android 4.4.x 至 Android 12,兼容 ARMv7、x86 和 ARM64 架构。本教程将详细介绍安装、配置、APK 修改及使用方法,适合有一定 Android 开发基础的用户。

注意:本项目仅用于学习和研究,请勿用于非法或商业用途。使用不当可能引发法律问题,开发者不对任何不当使用负责。

前提条件

开始之前,请确保满足以下条件:

  1. 基础知识
    • 熟悉 Android 布局(XML 和 Java)。
    • 了解 Android 开发环境(如 Android Studio)。
    • 掌握基本的 C++ 和 JNI(Java Native Interface)知识。
    • 了解 APK 文件结构、smali 文件及反编译工具(如 Apktool)。
  2. 开发环境
    • 一台运行 Windows、macOS 或 Linux 的电脑。
    • 已安装 Android Studio 和 Android NDK。
    • 准备 APK 反编译工具,如 APK Easy Tool、MT Manager 或 APK Editor Pro。
    • 一台 Android 设备(建议 Android 5.0+,ARMv7 或 ARM64 架构)。
  3. 项目文件

安装步骤

1. 下载和解压项目

  1. 访问 https://github.com/LGLTeam/Android-Mod-Menu/releases,下载最新版本的源代码 ZIP 文件,或通过 Git 克隆仓库。
  2. 解压到无空格或特殊字符的目录(如 C:\AndroidModMenu/home/user/AndroidModMenu)。

2. 配置 Android Studio

  1. 打开 Android Studio,选择 File > Open,加载解压后的项目文件夹。
  2. 等待项目同步完成(初次可能需 1-2 分钟)。
  3. 配置 NDK:
    • 进入 File > Project Structure > SDK Location
    • Android NDK Location 中选择 NDK 文件路径(如 ndk_arm.tar.gzndk_arm64.tar.gz)。
    • 确保 NDK 版本与设备架构兼容。
  4. 检查构建配置:
    • 打开 app/build.gradle,确认 ndk 配置正确。
    • 如需更改库名称,修改 app/src/main/jni/Android.mk 中的 LOCAL_MODULE,并更新 MainActivity.java 中的 System.loadLibrary("")

3. 安装到设备

  1. 连接 Android 设备,启用 开发者选项USB 调试
  2. 在 Android Studio 中选择设备,点击 Run 构建并安装调试 APK(app-debug.apk)。
  3. 构建成功后,APK 将自动安装,文件位于 app/build/outputs/apk/app-debug.apk

提示:若使用 AIDE 等移动端 IDE,需安装模组专用版本的 AIDE(Play Store 版本不兼容),详见 Wiki。


修改游戏 APK

将模组菜单集成到目标游戏需要修改 APK 文件,以下是步骤:

1. 确定游戏主活动

  1. 使用 APK 反编译工具(如 APK Easy Tool 或 MT Manager)解编译目标游戏 APK。
  2. 打开 AndroidManifest.xml,查找 <action android:name="android.intent.action.MAIN"/>,记录主活动路径(如 com.unity3d.player.UnityPlayerActivity)。

2. 集成模组菜单

推荐使用服务启动方法,避免同时使用两种方法。

方法 1:通过服务启动(推荐)
  1. AndroidManifest.xml<application> 标签末尾添加服务(根据需要调整包名):

    xml 复制代码
    <service android:name="com.android.support.Launcher" android:enabled="true" android:exported="false" android:stopWithTask="true" />
  2. 找到游戏主活动的 smali 文件(路径如 /com/unity3d/player/UnityPlayerActivity.smali)。

  3. onCreate 方法中添加:

    smali 复制代码
    invoke-static {p0}, Lcom/android/support/Main;->Start(Landroid/content/Context;)V
  4. 保存修改。

方法 2:通过活动启动(仅在游戏检测模组时使用)
  1. AndroidManifest.xml 中添加模组主活动:

    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>
  2. 确保游戏原始主活动不再包含 <action android:name="android.intent.action.MAIN"/>

  3. 添加悬浮窗权限:

    xml 复制代码
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  4. 若菜单未显示,检查设备悬浮窗权限设置。

3. 合并模组和游戏 APK

  1. 反编译 app-debug.apk,提取模组的 smali 文件(位于 smali/com/android/support)。
  2. 将模组 smali 文件夹复制到游戏反编译目录的 smali 文件夹(建议放入最后一个 smali_classes 文件夹)。
  3. 重命名模组 dex 文件(如 classes.dex 改为 classes2.dex),确保 dex 顺序正确。
  4. 复制模组的 .so 文件到游戏的架构目录(armeabi-v7aarm64-v8a),确保架构匹配。
  5. 使用 APK 工具重新编译并签名 APK,建议启用"自动签名"。

4. 测试修改后的 APK

  1. 安装签名后的 APK 到设备。
  2. 启动游戏,检查模组菜单是否显示。
  3. 若菜单未显示,使用 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)。

2. 自定义功能

  • 添加功能
    • FloatingModMenuService.javalocalChanges(int featureNum, boolean toggle) 方法中定义逻辑。
    • 使用负数(如 -1)分配设置项,正数(如 1, 3, 200)分配模组功能。
    • 示例:添加默认启用的复选框,使用 CheckBox_True_功能名称
  • UI 自定义
    • 使用 GradientDrawable 设置圆角和边框:

      java 复制代码
      GradientDrawable gradientdrawable = new GradientDrawable();
      gradientdrawable.setCornerRadius(20);
      gradientdrawable.setColor(Color.parseColor("#1C2A35"));
      gradientdrawable.setStroke(1, Color.parseColor("#32cb00"));
    • 适配不同分辨率设备,考虑自动缩放。

  • 字符串混淆
    • 使用 AY Obfuscator 保护字符串:

      cpp 复制代码
      OBFUSCATE("字符串")
      OBFUSCATE_KEY("字符串", 0x3FE63DF21A3B)
    • 重要代码(如偏移量)存储在 .so 文件中,避免暴露在 Java/smali 中。

3. 调试与优化

  • 日志调试

    • 在 C++ 代码中添加日志(如 LOGD("调试信息")),通过 logcat 查看:

      cpp 复制代码
      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);
      }
  • 避免崩溃

    • 确保 hook 和 patch 的偏移量正确,检查游戏 .so 文件的架构。
    • 使用 #if defined(__aarch64__) 区分 32 位和 64 位代码。
  • 保护代码

    • 启用 ProGuard 缩小代码,添加过滤器避免破坏项目。
    • 避免使用不可信的加密工具,防止被误报为恶意软件。
    • 公开源代码到 GitHub 可减少盗用风险。

常见问题

  1. 模组菜单未显示?
    • 确认 SYSTEM_ALERT_WINDOW 权限已添加。
    • 检查 onCreate 方法中的 smali 调用。
    • 查看 logcat 日志,排查权限或架构问题。
  2. 游戏崩溃?
    • 确保 .so 文件位于正确架构目录。
    • 检查 hook 偏移量是否正确。
    • 使用 logcat 定位错误。
  3. 方法数超限(65535)?
    • 将模组 smali 文件放入 smali_classes2 或更高编号文件夹。
    • 避免放入游戏主 smali 文件夹。
  4. 旧版 Android 布局问题?
    • 部分游戏在无权限启动时使用旧布局,暂无解决方案。
  5. 如何获取支持?

注意事项

  • 学习成本:需要 Android 开发和逆向工程知识,建议学习 JNI、smali 和 il2cpp。
  • 社区规范:避免重复提问,初学者应查阅资料。恶意行为可能导致被屏蔽。
  • 法律风险:不要用于受保护的游戏(如 PUBG、Free Fire),以免引发法律问题。

参考资源

相关推荐
移动开发者1号1 小时前
Android 多 BaseUrl 动态切换策略(结合 ServiceManager 实现)
android·kotlin
移动开发者1号1 小时前
Kotlin实现文件上传进度监听:RequestBody封装详解
android·kotlin
AJi4 小时前
Android音视频框架探索(三):系统播放器MediaPlayer的创建流程
android·ffmpeg·音视频开发
柿蒂5 小时前
WorkManager 任务链详解:优雅处理云相册上传队列
android
alexhilton5 小时前
使用用例(Use Case)以让Android代码更简洁
android·kotlin·android jetpack
峥嵘life5 小时前
Android xml的Preference设置visibility=“gone“ 无效分析解决
android·xml
用户2018792831676 小时前
通俗故事:驱动二进制文件在AOSP中的角色
android
穷人小水滴6 小时前
在 Termux 中签名 apk 文件
android·linux·apk
用户2018792831676 小时前
android王国的 “城堡攻防战”
android
还是一只小牛6 小时前
探秘 React Native:线程探索及桥优化
android·前端