Paresh-Maheshwari/morphe-ai

GitHub: Paresh-Maheshwari/morphe-ai

一个 AI 驱动的 Android APK 逆向分析与修补工作区,通过多代理 pipeline 实现从反编译到补丁编写的全流程自动化。

Stars: 105 | Forks: 13

# Morphe AI AI 驱动的 Android APK 修补工作区。自动化以下操作的多代理 pipeline:APK 分析 → 反编译 → 目标搜索 → 补丁编写 → 构建和部署。 使用 [Kiro CLI](https://kiro.dev) 构建,但提示词、技能和引导上下文是**模型无关的** —— 您可以将其适配到任何 AI 编程助手(Cursor、Copilot、Cline、Aider、Claude Code 等)。 **作者:** [Paresh Maheshwari](https://github.com/Paresh-Maheshwari) **仓库:** [morphe-ai](https://github.com/Paresh-Maheshwari/morphe-ai) ## 与其他 AI 模型配合使用 真正的核心价值在于 `.kiro/steering/` 和 `.kiro/prompts/` —— 它们是可移植的 Markdown 文件,可与任何 AI 工具一起使用: | 目录 | 内容 | |-----------|---------| | `steering/core/` | 项目概述、工作区布局 | | `steering/patching/` | 补丁编写指南、API、扩展开发 | | `steering/bytecode/` | Smali 速查表、指纹识别、混淆指南 | | `steering/patterns/` | 计费绕过、广告拦截、保护绕过模式 | | `steering/community/` | 从 10 多个社区补丁仓库中学习到的模式 | | `steering/build/` | 构建命令、CLI 参考、故障排除 | | `prompts/` | 代理角色提示词(侦察、反编译器、搜索器、编写器、部署器) | | `skills/` | 按需知识(工具参考、常见问题解答、示例) | **要与您的 AI 工具配合使用:** 1. 将相关的引导 `.md` 文件作为上下文/规则输入 2. 将提示词用作系统指令 3. 将代理配置适配为您工具的格式(例如 `.cursorrules`、`.github/copilot-instructions.md`) ## 前置条件 - 已安装并配置好 **Kiro CLI** - **JDK 17** — `sudo apt install openjdk-17-jdk` - **Android 逆向工程 (RE) 工具:** | 工具 | 用途 | 安装方式 | |------|---------|---------| | jadx | 反编译 APK → Java 源码 | `sudo apt install jadx` | | baksmali | 反汇编 DEX → smali bytecode | `sudo apt install baksmali` | | smali | 组装 smali → DEX | `sudo apt install smali` | | apktool | 解码/重建 APK 资源 | `sudo apt install apktool` | | aapt | 读取 APK manifest/元数据 | `sudo apt install aapt` | | ripgrep (rg) | 快速正则表达式搜索 | `sudo apt install ripgrep` | | adb | 在设备上安装 APK | `sudo apt install adb` | | dex2jar | 转换 DEX → JAR | `sudo apt install dex2jar` | | apkid | 检测混淆器/加壳工具 | `uvx apkid` (无需安装) | | kaggle | 远程反编译 API | `pip install kaggle` | 一键快速安装全部: ``` sudo apt install -y openjdk-17-jdk jadx baksmali smali apktool aapt ripgrep adb dex2jar pip install kaggle ``` ## 快速设置 ``` # 1. Clone git clone morphe && cd morphe # 2. 使用你的密钥创建 .env cp .env.example .env # 编辑 .env — 添加你的 KAGGLE_API_TOKEN # 3. Gradle auth (用于 morphe patcher 依赖) mkdir -p ~/.gradle cat >> ~/.gradle/gradle.properties << EOF gpr.user = gpr.key = EOF # 4. Clone 你的 patches 仓库 (文件夹必须命名为 "paresh-patches") # 如果你使用了不同的名称,请更新 .kiro/agents/、.kiro/prompts/ 和 AGENTS.md 中的所有引用 git clone paresh-patches # 5. 设置 CLI (从 GitHub 下载最新版本) ./setup-cli.sh # 6. 启动 Kiro kiro chat ``` ## 环境变量 (.env) | 变量 | 是否必需 | 获取方式 | |----------|----------|--------------| | `KAGGLE_API_TOKEN` | 是 | https://kaggle.com/settings → API → Create New Token | | `KAGGLE_KERNEL_ID` | 是 | 您的 Kaggle 用户名 + 笔记本名称(例如 `myuser/jadx-apk-decompiler`) | | `GITHUB_TOKEN` | 是 (用于 gradle) | GitHub → Settings → Developer → 带有 `read:packages` 权限的 PAT | ## Kaggle 设置(远程反编译) `jadx-decompile` 脚本在 Kaggle 的免费服务器(4 核心,28GB RAM)上运行反编译,因为 jadx 处理大型 APK 需要大量内存。 ### 工作原理 1. 您需要提供 APK 的**直接下载 URL**(而不是网页链接) 2. 脚本会生成一个 Kaggle 笔记本来下载 APK 并运行 jadx 3. 将笔记本推送到 Kaggle 并等待完成 4. 将反编译后的输出 (zip) 下载到您的本地计算机 ### 需要准备什么 - 一个**直接的 APK 下载链接** —— 该 URL 在打开时必须能直接下载文件 - ✅ `https://download.apkmirror.com/wp-content/themes/APKMirror/download.php?id=12345` - ❌ `https://www.apkmirror.com/apk/com.example/app-name/` (这是一个页面,而不是下载链接) - APKMirror 的下载链接大约在 1 小时后过期 —— 请使用最新链接 ### 设置步骤 1. 创建一个免费的 Kaggle 账户:https://kaggle.com 2. 转到 Settings → API → Create New Token(为您提供 `KGAT_...` token) 3. 创建一个**私有的** 笔记本:https://kaggle.com/notebooks → New Notebook - 将其精确命名为:`jadx-apk-decompiler` - 设置为**私有** - 在笔记本设置中启用**互联网访问** 4. 添加到您的 `.env` 中: KAGGLE_API_TOKEN=KGAT_your_token_here KAGGLE_KERNEL_ID=your-kaggle-username/jadx-apk-decompiler ### 用法 ``` .kiro/jadx-decompile "https://direct-download-url" analysis// ``` ## 工作区结构 ``` morphe/ ├── .env.example # Template for secrets ├── .gitignore # Ignores secrets, binaries, large folders ├── AGENTS.md # Main orchestrator prompt ├── LICENSE # Proprietary license ├── README.md # This file ├── setup-cli.sh # CLI download/build script └── .kiro/ ├── agents/ # 6 agent configs ├── prompts/ # Agent prompt files ├── skills/ # 13 on-demand skills ├── steering/ # 31 always-loaded context files │ ├── core/ # Project overview (morphe agent) │ ├── build/ # Build/CLI reference (patch-deployer) │ ├── patching/ # Patch writing guides (patch-writer) │ ├── bytecode/ # Smali/fingerprinting (patch-writer + target-hunter) │ ├── patterns/ # Bypass patterns (target-hunter) │ └── community/ # Community patch analysis (target-hunter) ├── settings/ # LSP config └── jadx-decompile # Remote decompiler script # 在本地设置后创建 (已被 gitignored): ├── .env # Your secrets ├── Morphe.keystore # APK signing key (export from Morphe Manager) ├── morphe-cli.jar # CLI binary (created by setup-cli.sh) ├── paresh-patches/ # Your patches repo clone └── analysis/ # APK analysis work (per-app folders) └── / ├── apk/ # Original APK files (created by apk-recon) ├── notes/ # Analysis findings (created by apk-recon) ├── decompiled/ # Java source from jadx (created by apk-decompiler) ├── smali/ # Bytecode from baksmali (created by apk-decompiler) └── builds/ # Patched APKs (created by patch-deployer) ``` ## 代理 ### morphe(协调器) - **触发条件:** 默认代理 —— 始终处于活动状态 - **作用:** 检查任何应用的 pipeline 状态,并将您引导至正确的专家代理 - **工具:** 全部(bash、grep、glob、code、网络搜索、知识库) - **上下文:** 核心项目概述 - **直接处理:** 快速构建、状态检查、代码搜索、文件读取 ### apk-recon - **触发条件:** “对这个 APK 进行侦察”或为其提供文件路径 - **作用:** 识别 APK 元数据 —— 包名、版本、保护机制、框架、APK 类型 - **工具:** aapt、apkid、unzip、file - **输入:** 位于项目根目录的 APK 文件路径 - **输出:** `analysis//notes/recon.md` + 整理好的 `apk/` 文件夹 - **上下文:** APK 分析技能、apktool 技能 ### apk-decompiler - **触发条件:** “反编译 `` —— URL 是 ``” - **作用:** 在 Kaggle (28GB RAM) 上远程运行 jadx,从所有 DEX 文件中提取 smali - **工具:** jadx-decompile 脚本、baksmali、unzip - **输入:** 应用名称 + 直接 APK 下载 URL - **输出:** `analysis//decompiled/` (Java) + `analysis//smali/` (bytecode) - **上下文:** APK 分析技能、jadx 技能、工具参考 ### target-hunter - **触发条件:** “寻找 `` 的目标 —— 正在查找 ``” - **作用:** 在反编译的代码中搜索计费 SDK、广告、功能门控。根据 smali bytecode 验证每一个发现结果。记录指纹策略。 - **工具:** rg (ripgrep)、glob、code (LSP)、thinking - **输入:** 应用名称 + 要查找的内容 - **输出:** `analysis//notes/premium-bypass.md`、`ad-removal.md` 等 - **上下文:** 计费/广告/保护绕过模式、社区补丁分析、smali/指纹指南 ### patch-writer - **触发条件:** “为 `` 编写补丁” - **作用:** 读取目标发现结果,对照 smali 进行交叉检查,编写 Kotlin 指纹和补丁代码,并进行构建和验证 - **工具:** rg、glob、code (LSP)、gradle、thinking - **输入:** 应用名称(自动读取笔记) - **输出:** `.kt` 文件位于 `paresh-patches/patches/src/.../` - **上下文:** 补丁开发指南、patcher API、bytecode 工具、真实补丁示例、高级技巧 ### patch-deployer - **触发条件:** “构建并测试 ``” - **作用:** 使用 gradle 构建补丁,使用 morphe-cli 修补 APK,通过 ADB 安装,并报告结果 - **工具:** gradle、morphe-cli、adb、git - **输入:** 应用名称 + 操作(构建/测试/部署) - **输出:** `analysis//builds/_patched.apk` - **上下文:** 构建/CLI 参考、故障排除指南 ## Pipeline ``` 1. RECON → apk-recon identifies the APK 2. DECOMPILE → apk-decompiler runs jadx + baksmali 3. HUNT → target-hunter finds patchable targets 4. WRITE → patch-writer creates Kotlin patches 5. BUILD+DEPLOY → patch-deployer builds, patches APK, installs ``` 只需向 morphe 代理提供一个应用名称,它就会检查状态并告诉您接下来切换到哪个代理。 ## 用法示例 ``` # 使用新的 APK 重新开始 > I have a new APK for truecaller # 继续处理现有的 app > truecaller # 快速任务 (由 morphe 直接处理) > build patches > list patches > search for "isPremium" in truecaller > what's the status of all apps? ``` ## 自定义 ### 添加新应用 1. 将 APK 下载到项目根目录 2. 告诉 morphe 代理:“`` 的新 APK” 3. 按照 pipeline 操作 ### 修改代理行为 - 编辑 `.kiro/prompts/` 中的提示词 - 编辑 `.kiro/agents/` 中的配置 - 将引导文件添加到 `.kiro/steering//` ### 添加新的引导上下文 将 `.md` 文件放在相应的类别文件夹中。它们会为引用该文件夹的代理自动加载。 ### 更新 jadx-decompile 脚本 如果您更改了 Kaggle 用户名,请更新 `.env` 文件中的 `KAGGLE_KERNEL_ID`。 ## 签名密钥 `Morphe.keystore` 用于对所有修补后的 APK 进行签名。Morphe Manager 应用(手机端)和 CLI 必须使用**相同的 keystore**,以便修补后的 APK 能够相互更新。 ### 从 Morphe Manager 导出(推荐) 1. 在手机上打开 Morphe Manager 2. 转到 Settings → Export keystore 3. 将导出的 `.keystore` 文件传输到本项目的根目录 4. 重命名为 `Morphe.keystore` 这确保了手机端修补和 CLI 修补的 APK 共享相同的签名 —— 您可以安装来自任一方的更新,而无需卸载。 ### 生成新 keystore(如果从头开始) ``` keytool -genkey -v -keystore Morphe.keystore -alias Morphe \ -keyalg RSA -keysize 2048 -validity 10000 \ -storepass morphe -keypass morphe ``` 然后将此 keystore 导入 Morphe Manager:Settings → Import keystore。 ### 用法 CLI 始终使用此 keystore: ``` java -jar morphe-cli.jar patch -p patches.mpp --keystore Morphe.keystore -f input.apk ``` ## 故障排除 | 问题 | 解决方法 | |-------|-----| | Gradle 认证失败 | 检查 `~/.gradle/gradle.properties` 是否包含 `gpr.user` + `gpr.key` | | jadx-decompile 失败 | 检查 `.env` 是否包含 `KAGGLE_API_TOKEN`,并通过 `kaggle kernels list` 进行验证 | | 指纹不匹配 | 应用版本已更改 —— 重新运行 target-hunter 以验证 smali | | 构建失败 | 检查 patch-deployer 输出中的错误 —— 它会提供确切的文件和行号 | | 未找到 ADB | `sudo apt install adb` 或连接设备 | | 代理给出错误答案 | 检查引导文件是否已加载:在 Kiro 中使用 `/context show` | ## 社区补丁仓库(参考) `.kiro/steering/community/` 中的引导文件包含了从这些仓库中学习到的模式: | 仓库 | 重点 | 模式 | |------|-------|----------| | [morphe-patches (hoo-dles)](https://github.com/hoo-dles/morphe-patches) | 各类应用 | 方法注入、签名欺骗、基于扩展的广告跳过 | | [De-ReVanced](https://github.com/RookieEnough/De-ReVanced) | YouTube/Music | 设备 ID 欺骗、签名绕过 | | [revanced-patches (anddea)](https://github.com/anddea/revanced-patches) | 扩展版 YouTube | 高级广告拦截、SponsorBlock | | [piko](https://github.com/crimera/piko) | Instagram | Entity 模式、JSON 字段替换、信息流过滤 | | [patcheddit](https://github.com/wchill/patcheddit) | Reddit | Client ID 欺骗、OAuth 覆盖、matchAll() 批量替换 | | [adobo](https://github.com/jkennethcarino/adobo) | 通用广告拦截 | 针对各 SDK 的广告移除 (AdMob, Unity, AppLovin, IronSource) | | [AmpleReVanced](https://github.com/AmpleReVanced/revanced-patches) | Spotify | Hex 修补 native 库、协议欺骗 | | [morphe-meta-patches](https://github.com/MeridianFresco/morphe-meta-patches) | Facebook/Meta | 赞助内容移、Story 过滤 | | [binarymend](https://github.com/binarymend/morphe-patches) | 各类应用 | 遥测拦截、批量禁用分析 | ### 贡献想法 - 为新的计费 SDK 添加模式 (Adapty, Qonversion, Glassfy) - 为新的广告 SDK 添加模式 (InMobi, IronSource, Chartboost) - 改进指纹调试指南 - 为其他 AI 工具添加支持文件 (`.cursorrules`, `.github/copilot-instructions.md`) - 记录 Flutter/React Native 修补技术 - 添加更多真实的补丁示例 ## 许可证 版权所有 © 2026 Paresh Maheshwari。保留所有权利。请参阅 [LICENSE](LICENSE)。
标签:AI智能体, Android逆向工程, APK分析, DNS 反向解析, Patch编写, Smali注入, 后台面板检测