ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

REA APK 静态分析快速指南:headless JADX 五步跑通方法级反编译与引用追踪

REA APK 静态分析快速指南:headless JADX 五步跑通方法级反编译与引用追踪 REA APK 静态分析快速指南headless JADX 五步跑通方法级反编译与引用追踪【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea快速导读本文带你用 REAReverse Engineer Anything在 5 条 CLI 命令内完成 headless JADX 的 APK 静态分析全链路从 manifest 权限、类名搜索到方法级反编译与引用追踪。全程无需模拟器、无需 Android SDK每次结果都附带可审计的 Evidence。能力全景能做什么底层怎么跑先说它能干什么给定一个本地 APK 文件你可以查它的声明与权限列表、搜索和盘点全部类名、读取单个类的字段与内部类、反编译任意一个方法体、追踪指向某个类或方法的静态引用。整个过程不执行 APK、不写入原始文件属于纯静态、纯本地分析。再说它怎么工作。REA 没有魔改 JADX它把一个未修改、按 commit 锁定的 jadx-headless-mcpv0.7.1引擎当作黑盒通过自研的 Provider 适配器来驱动。引擎源码以 Git 子模块形式存放在 third_party/jadx-headless-mcp保留上游 Apache-2.0 许可REA 侧的协议、会话、传输逻辑集中在 src/android/如 JadxProvider.ts应用层服务在 src/application/android/AndroidAnalysisService.ts。这套原样引擎 自研适配层的分工带来两个直接好处反编译结果完全来自上游引擎边界清晰方便你核对来源分析时REA 不会自动下载任何引擎JAR 由你提供并用 SHA-256 校验审计版本。CLI 与 MCP 走同一套工作流所以你在终端验证过的命令在 Agent 里同样成立。开工前 30 秒自检红线清单在敲第一条命令之前先把下面的硬约束过一遍能帮你避开绝大多数环境坑平台红线headless JADX 提供方在Linux 和 macOS上走 POSIX 适配器macOS arm64 OpenJDK 21 已验证Windows x64 需要带配套 Windows 原生控制含 owned 协议 stdin 支持的 REA 包旧版发布包可能直接拒绝该主机Windows arm64 不在当前原生边界内。依赖红线必须是一个完整的 JDK 17含编译器模块jdk.compiler只有可运行 JRE 不够因为 REA 要在源码文件模式下编译它的 Java 元数据桥必须自行提供jadx-headless-mcp 0.7.1 的 fat JARREA 永不替你下载引擎输入必须是独立 APK 的本地路径.aab后缀是 ZIP 归档不被当作 APK 处理。行为红线REA 不安装 Java、Android SDK、设备服务或模拟器分析全程不执行目标代码也永不写入原始 APK。完整契约见官方文档docs/android-analysis.md。环境三步配置JDK、引擎 JAR、可选调优第一步确认 JDK 可用。用java --list-modules确认输出里有jdk.compiler。如果你机器上有多套 Java用JAVA_HOME显式指定。第二步指向引擎 JAR。export REA_JADX_MCP_JAR/absolute/path/jadx-headless-mcp-0.7.1-all.jar export JAVA_HOME/absolute/path/existing-jdk # 可选指向已存在的 JDK第三步可选JVM 调优。大 APK 建议加大堆内存export REA_JADX_HEAP_MIB8192 # 堆内存上限MiB export REA_JADX_ACTIVE_PROCESSOR_COUNT4 # 可见处理器数与单个 JADX worker 相互独立两个 REA 配置都必须是正安全整数REA 会保留而非覆盖你已有的JAVA_TOOL_OPTIONS、JDK_JAVA_OPTIONS、_JAVA_OPTIONS。提醒一下就绪检查只会检查所选 JAR 的 ZIP 目录里是否含元数据桥要用的类、以及 Java 的编译器和版本模块不会加载 APK 或执行引擎代码——类路径清点通过不等于每个类都能加载成功。跑通完整分析链路五步递进五个命令都注册在 src/cli/androidCommands.ts按由浅入深排成一条链路步骤命令你会拿到什么第 1 步检查包结构rea inspect-android-package /path/Example.apk解码后的 manifest XML、声明摘要、权限列表、类/资源数量第 2 步搜索类名rea search-android-classes /path/Example.apk MainActivity大小写敏感的子串匹配结果传空查询则盘点全部类名第 3 步查看类成员rea inspect-android-class /path/Example.apk example.MainActivity解析后的类型、字段、内部类名不生成源码第 4 步方法反编译rea inspect-android-method /path/Example.apk example.MainActivity onCreate该方法的 Java 或 smali 源码第 5 步引用追踪rea trace-android-references /path/Example.apk example.MainActivity指向该类的静态引用加--method-name onCreate可追踪唯一方法几个执行细节值得注意第 2 步会消费所有分页并校验计数空查询返回的是完整的类名清单第 3 步读的是解析后的元数据代码生成隐藏的合成成员可能出现但它在会话内与方法反编译保持一致重载序号绑定的是这个工件 这个引擎不是跨构建的稳定标识第 4 步遇到同名重载时必须显式指定序号从 0 开始rea inspect-android-method /path/Example.apk example.MainActivity select --overload-index 1这是刻意的拒绝式设计遇到模糊请求REA 会直接报错而不是悄悄选第一个匹配项避免把错误的函数体归因给错误的重载。引擎的方法引用操作无法选择重载所以存在多个同名方法时REA 会把该边界报告为不支持smali 回退同样会被拒绝而不是把所有方法体都挂到一个重载上。从 CLI 到 AgentMCP 接入与工具映射如果你在用 Agentnpx rea-agents setup完成注册后MCP 工具与上面的 CLI 一一对应参数命名规则一致所有请求都带path类/方法操作另用class_name、method_name和可选的overload_index。MCP 工具对应 CLI 命令作用inspect_android_packageinspect-android-package检查 APK 声明与解码 manifestsearch_android_classessearch-android-classes搜索/盘点类名inspect_android_classinspect-android-class查看类成员清单inspect_android_methodinspect-android-method方法级反编译支持overload_indextrace_android_referencestrace-android-references追踪类/方法引用让 Agent 反编译一个重载方法的调用示例{ name: inspect_android_method, arguments: { path: /path/Example.apk, class_name: example.MainActivity, method_name: select, overload_index: 1 } }完整工具契约与输出模式见 docs/mcp-contracts.md。读懂结果Evidence 的三条阅读注意每次请求都会把原始请求、APK SHA-256、引擎 JAR SHA-256 和原始响应保留在 Evidence 里source revision仅在字节与审计发布 JAR 匹配时才填充。拿到结果后记住三条反编译源码是派生表示。文本完整 ≠ 语义完整更不等于可字节级重构方法检查还会标注 Java/smali 来源、回退标记和文本是否被截断。引用结果是静态关系不是运行时事实。它给出的是提供方节点间的入向关系源行号和 DEX 指令偏移未知不能当作观测到的调用。没有函数体就不猜。native/abstract 方法会报告body_status: not_availableREA 不会推断是哪个实现标志导致的。另外包检查里的签名验证字段明确是not_performed这些操作不处理 split APK/AAB、签名校验、完整资源表语义、native 库分析和运行时捕获。如果你需要存档层面的证据可以先用工件清点工具再执行rea project-android-application-graph做无执行的图谱投影。边界与开销必须知道的限制项目数值含义会话闲置清理60 秒超时/失败/断连/取消均触发清理操作执行时限120 秒到达队列头部后开始计时上游反编译时限90 秒JADX 引擎侧限制manifest/方法文本1 MiB超预算会明确报告截断类名分页每页至多 4,096 个索引切片不改变大小写敏感的完整搜索契约协议帧上限8 MiB超限直接失败而非返回残缺数据每操作 stdout/stderr32 MiB合并超限同样失败这些都是内存安全边界不是 undocumented 的结果上限。会话复用也值得理解REA 只保留一个序列化会话含私有、不可变的 APK/引擎 JAR/元数据桥副本请求复用时先校验 APK 与引擎 JAR 摘要及 JVM 配置匹配才复用输入一变旧会话即被淘汰。一次性 CLI 命令返回前总会等待清理完成——所以放心它不会动你的原始 APK更不会启动目标代码。验证链路可用端到端自检项目自带一条真实引擎的端到端验证 lane用公开的 Appium ApiDemosv6.0.18作样本npm run fixtures:android export REA_JADX_MCP_JAR$PWD/_reference/apk-integration/jadx-headless-mcp-0.7.1-all.jar export REA_ANDROID_TEST_APK$PWD/_reference/apk-integration/ApiDemos-debug.apk npm run verify:android几点说明下载脚本校验固定的 SHA-256 值复用匹配文件且拒绝覆盖已有的不同文件该 lane 还会用所选 JDK 的jlink造一个不含编译器模块的临时 JRE专门检查真实 Java 启动失败、选择器缺失、失败后恢复和 CLI 取消清理全程不需要 Gradle 构建、模拟器、Android SDK 或 Ghidra原始 APK 与主机 Java 配置保持不变。常见问题Q分析过程需要联网吗不需要。引擎 JAR 由你自己提供分析完全在本地进行文件不上传、引擎不自动下载。Q只有 JRE 能跑吗不能。必须是含jdk.compiler模块的完整 JDK 17——元数据桥需要在源码文件模式下编译可运行的 JRE 无法完成这一步。Q同名重载方法会选错吗不会。REA 对模糊请求直接拒绝要求你先用inspect_android_class看清成员、再用--overload-index显式指定引擎侧无法选择重载的场景会明确报告为不支持而不是默默合并方法体。收尾把这句话带走就能上手先配好完整 JDK 自供的 0.7.1 引擎 JAR然后按包检查 → 类搜索 → 类成员 → 方法反编译 → 引用追踪五步递进每个结论的出处都在 Evidence 里重载歧义会被拒绝而不是猜。上游溯源记录见 third_party/README.md契约细节见 docs/android-analysis.md。【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进