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注入, 后台面板检测