REA 接入 headless JADX 的 Android APK 静态分析:从权限清单到方法反编译的实操指南
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
分析一个 APK 时,你往往得先装好 jadx-gui 或拖出 Android Studio,翻文档找入口,反编译结果散落在 GUI 窗口里——既写不进脚本,也喂不进 AI Agent。REA(Reverse Engineer Anything)是面向 AI Agent 的逆向工程工具集,它把 headless JADX 引擎封装成一组可复用的分析原语:查权限、搜类、反编译方法、追引用。CLI 和 MCP 走同一套流程,每一步结论都带着可审计的 Evidence。
它到底做了什么
REA 没有对 JADX 动刀,而是通过src/android/目录下的 Provider 适配器,包装一个未改动、commit 锁定的 jadx-headless-mcp(0.7.1)引擎 JAR;引擎源码以 Git 子模块形式保留上游 Apache-2.0 许可。分析全程在本地进行,不执行 APK、不写原始文件,CLI 与 MCP 共用同一应用工作流,结果直接内联绑定工件的 Evidence。换句话说,结论完全来自上游引擎,适配层只负责会话管理、摘要校验与证据保留,边界清晰。
动手之前
你只需要一个完整的 JDK 17 及以上(要带编译器模块,光 JRE 跑不起来)和引擎 JAR 本身。REA 不会替你安装任何 Java、Android SDK、JADX 或模拟器。在 shell 或 MCP server 环境里设置:
export REA_JADX_MCP_JAR=/absolute/path/jadx-headless-mcp-0.7.1-all.jar # 可选:显式指定一个已存在的 JDK,而不是用 PATH 里的 java export JAVA_HOME=/absolute/path/existing-jdk分析完全离线,无需联网;引擎 JAR 要你自己备。大 APK 建议显式加大堆内存,比如export REA_JADX_HEAP_MIB=8192,可见处理器数用REA_JADX_ACTIVE_PROCESSOR_COUNT=4。元数据桥接已在 macOS arm64 + OpenJDK 21 上验证,POSIX 适配器覆盖 Linux。
拿一个真实例子走完流程
下面用同一个Example.apk走完整条链路,每一步只给当前必需的命令。
先看整体结构
rea inspect-android-package /path/Example.apk
返回解码后的 manifest XML、声明摘要、权限列表和类/资源数量。⚠️ 签名验证会明确标记为not_performed,这一步不替你验签。
找到目标类
rea search-android-classes /path/Example.apk MainActivity
大小写敏感的子串搜索,会消费所有分页并校验计数;把 query 传成空串则盘点 APK 里全部类名。
列出类的成员
rea inspect-android-class /path/Example.apk example.MainActivity
不生成源码就能读解析后的元数据,返回类型、字段和内部类名。先用这一步选定重载,再去反编译方法。
把方法反编译出来
rea inspect-android-method /path/Example.apk example.MainActivity onCreate # 存在同名重载时,必须显式给出从 0 开始的重载序号 rea inspect-android-method /path/Example.apk example.MainActivity select --overload-index 1遇到同名重载,REA 会直接拒绝模糊请求,而不是悄悄选第一个匹配项——避免把错误的函数体归因给错误的重载。
把引用关系串起来
rea trace-android-references /path/Example.apk example.MainActivity # 追某个唯一方法的引用 rea trace-android-references /path/Example.apk example.MainActivity --method-name onCreate不带--method-name追的是指向该类的静态引用;带上则追指向唯一方法的引用。
接入 AI Agent:MCP 工具映射
npx rea-agents setup完成注册后,MCP 工具与上面 CLI 命令一一对应:
| MCP 工具 | 对应操作 |
|---|---|
inspect_android_package | 检查 APK 声明与 manifest |
search_android_classes | 搜索 / 盘点类名 |
inspect_android_class | 查看类成员清单 |
inspect_android_method | 反编译方法,支持overload_index |
trace_android_references | 追踪类 / 方法引用 |
所有请求都带path;类 / 方法操作用class_name、method_name,必要时加overload_index。一次方法反编译的最小调用:
{ "name": "inspect_android_method", "arguments": { "path": "/path/Example.apk", "class_name": "example.MainActivity", "method_name": "select", "overload_index": 1 } }输出怎么读
每次请求都会把原始请求、APK 的 SHA-256、实际使用的引擎 JAR SHA-256 和上游原始响应留在 Evidence 里,所以每个结论都能回溯到具体字节。要记住边界:反编译出的源码是派生表示,文本完整不等于语义完整,更不能据此做字节级重构;引用结果是节点间的静态关系,不是运行时观测到的调用;没有函数体的 native / abstract 方法会报body_status: "not_available",REA 不猜是哪个实现标志导致的。
边界与坑
| 项目 | 数值 | 说明 |
|---|---|---|
| 会话闲置清理 | 60 秒 | 超时、失败、断连、取消都会触发清理 |
| 单次操作时限 | 120 秒 | 到达队列头部后开始计时 |
| 上游反编译时限 | 90 秒 | JADX 引擎侧限制 |
| manifest / 方法文本 | 1 MiB | 超预算会报告截断 |
| 协议帧上限 | 8 MiB | 超限失败,不返回残缺数据 |
| 平台支持 | Linux / macOS / Windows x64 | Windows x64 需匹配的 bundled native 控制;arm64 暂不支持 |
这些操作不处理 split APK / AAB、签名校验、native 库分析和资源表完整语义;.aab后缀本质是 ZIP,不会被当作独立 APK。会话复用最先校验 APK 与引擎 JAR 的摘要和 JVM 配置,匹配才复用已加载引擎,输入变化会自动淘汰旧会话。一次性 CLI 命令返回前总会等待清理完成,且 REA 永不写入原始 APK、永不启动目标代码。
延伸阅读与溯源
从权限清单到方法级反编译再到引用追踪,REA 把 headless JADX 的能力整理成了脚本和 AI Agent 都能稳定消费的分析原语,配合会话复用和摘要校验,让静态结论可追溯。完整契约见 docs/android-analysis.md,MCP 工具与输出模式见 docs/mcp-contracts.md,上游引擎溯源记录在 third_party/README.md,适配层实现集中在 src/android/。
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考