恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

rea Android APK 静态分析实战:JDK 与 JADX 0.7.1 引擎集成、五操作全流程与验证复现

  • 首页
  • 资讯中心
  • /
  • rea Android APK 静态分析实战:JDK 与 JADX 0.7.1 引擎集成、五操作全流程与验证复现

相关资讯

MooTool Next Compose 的 F10 Host 工具 `*ActionEnabled` 按钮可用性守卫:从 DIFF-644 切片看函数式 UI 接线实践 2026/10/16 1:37:11
DooTask License 过期与失效排查指南:错误含义、实时校验原理与续费自救方案 2026/10/16 1:37:11
ASP.NET MVC + Layui 增删改查完整实战模板 2026/10/16 1:37:11

最新资讯

HART主站协议栈:纯C嵌入式实现与工业现场调试指南
MP2642GR-Z与dsPIC33FJ256GP710A双芯片电池均衡方案
VVDI升级工具Xhorse v1.5.1刷写实战:固件绑定与避坑全解析
深度残差网络ResNet:从退化问题到残差连接原理与PyTorch实战
PoDoFo 0.9.5在VS2013 x86下链接失败的根因与实战修复
现场总线实操手记:确定性通信、GSD文件与物理层调试四要诀

今日推荐

Java八种基本类型深度解析:从内存布局到实战选型
基础:常用快捷键——IDEA、VS Code、PyCharm 与 Linux 终端效率速查
解决ultraedit下verilog .v文件中文注释乱码:把编码配置改到TaoToken辅助排查

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

rea Android APK 静态分析实战:JDK 与 JADX 0.7.1 引擎集成、五操作全流程与验证复现

发布时间:2026/10/16 1:37:11
rea Android APK 静态分析实战:JDK 与 JADX 0.7.1 引擎集成、五操作全流程与验证复现 rea Android APK 静态分析实战JDK 与 JADX 0.7.1 引擎集成、五操作全流程与验证复现【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rearea 的 Android APK 静态分析src/android/回答的问题是不执行、不装任何东西的前提下一个 APK 声明了什么、包含哪些类、某个方法的反编译体长什么样、被谁静态引用。本文按一次分析师会话的时间线走完全程供给 JDK 与引擎 JAR、跑通 CLI 与 MCP 两个入口的全部操作、逐项读结果与 Evidence最后用仓库内置车道复现真实引擎验证。先立原则约束一个已审计的引擎而不是实现一个反编译器rea 不自研反编译器。上游 jadx-headless-mcp 的源码以未修改、提交固定的 Git submodule 存放在 third_party/发布 JAR 的审计信息固化在 src/android/JadxRelease.ts 的JADX_RELEASEversion: 0.7.1, revision: 5844800a486d2248fa949b74c9896285f5b54de2, sha256: 6e5eacf500b64292bfb73c49797c1958f6ee44646e43e868039ae7feb573ff75,约束发生在两个时点。其一是连接时rea 随包分发 bridge/android/ReaJadxBridge.java用 JDK 的 source-file mode 直接对未修改的引擎 JAR 编译运行src/android/JadxSession.ts 的execute在每次分析前校验服务器自报身份必须为rea-jadx-bridge/ 版本1JADX_BRIDGE_IDENTITY再调rea_jvm_status核对engine_reported_version与0.7.1一致任一不符即抛AnalysisCapabilityUnavailableError。其二是 Evidence 层source_revision仅当实际执行的 JAR 字节与审计 JAR 的 SHA-256 完全匹配时才填充5844800a…否则为null——引擎字节没被换过才有提交号可引用。边界声明这个适配层不修改引擎、不重新实现反编译它提供的是版本锁定 连接时校验 证据绑定反编译语义本身仍由 JADX 0.7.1 决定。环境契约供给 JDK 17 与引擎 JARrea 不安装任何东西rea不安装Java、Android SDK、JADX、设备服务或模拟器——工具全部由调用方供给见 docs/android-analysis.md 的 Supply tools 一节。最低供给完整的 JDK 17 或更新版本必须含jdk.compiler模块桥以 source-file 模式编译纯 JRE 不行jadx-headless-mcp 0.7.1的-all.jar。export REA_JADX_MCP_JAR/absolute/path/jadx-headless-mcp-0.7.1-all.jar # Optional: select an existing JDK rather than java on PATH. export JAVA_HOME/absolute/path/existing-jdk # Optional provider settings, mapped to explicit JVM arguments: export REA_JADX_HEAP_MIB8192 export REA_JADX_ACTIVE_PROCESSOR_COUNT4这些变量在 src/android/JadxConfiguration.ts 的resolveJadxConfigurationInputs中解析且仅在 Android 操作被选中时才解析环境变量解析规则失败行为REA_JADX_MCP_JAR必须设置、为绝对路径的常规可读文件最终以realpath归一抛AnalysisCapabilityUnavailableError补救文本Set REA_JADX_MCP_JAR to the absolute path of a caller-supplied jadx-headless-mcp 0.7.1 JAR. REA does not download or install it.JAVA_HOME可选若设置必须绝对且$JAVA_HOME/bin/java必须是常规可执行文件相对路径直接拒绝JAVA_HOME must select an existing JDK by absolute path两者均未指定 Java使用 PATH 上的java—REA_JADX_HEAP_MIB正的 safe integer映射为-Xmx值m非正整数即拒绝REA_JADX_ACTIVE_PROCESSOR_COUNT正的 safe integer 且 ≤2,147,483,647JVM 有符号 32 位映射为-XX:ActiveProcessorCount值越界即拒绝JAVA_TOOL_OPTIONS/JDK_JAVA_OPTIONS/_JAVA_OPTIONSrea保留不替换Java 标准优先级适用显式命令行堆覆盖JAVA_TOOL_OPTIONS_JAVA_OPTIONS可能覆盖命令行设置—启动前还有一道运行时探针对选定的java执行--list-modules探针限时10 秒、输出上限1 MiBJAVA_MODULE_LISTING_TIMEOUT_MS 10_000缺少jdk.compiler、版本解析失败或主版本 17时抛出提示用java --list-modules自检。平台支持边界在解析第一步强制linux/darwin直接通过Windows x64仅当 REA 包自带含自持协议 stdin的 native 控制时可用Windows arm64 不在当前边界内其余平台/架构一律报不可用。Linux 下该 provider 拥有自己的子进程要求 PATH 上有 procps 兼容的ps。文档同时写明当前桥在macOS arm64 OpenJDK 21 Appium ApiDemos上完成真实验证POSIX 适配支持 Linux但该桥尚未在Linux/JDK 25上完成真实验证。边界声明REA 提供的是环境不合规时显式失败不做静默降级——缺编译器模块的 JRE、相对路径、越界的处理器计数每一种都是带补救指引的AnalysisCapabilityUnavailableError而不是猜一个可用的运行环境。会话主线从包级清单到方法体再到引用追踪CLI 在 src/cli/androidCommands.ts 注册MCP 同名五法两侧共用 src/application/android/AndroidAnalysisService.ts 的同一工作流返回与产物绑定的 Evidence 而不是裸文本。第 1 步 · 包级检查。参数契约最松path必填本地独立 APK 路径其余无参数。rea inspect-android-package /path/Example.apk内部固定以threads: 1, resources: full调load_apk——单个 JADX 分析 worker独立于 JVM 处理器与 GC 设置。第 2 步 · 类搜索定位目标。query是大小写敏感的类名子串空串即全量清点。rea search-android-classes /path/Example.apk MainActivity第 3 步 · 类清点。用精确全限定类名。rea inspect-android-class /path/Example.apk example.MainActivity返回的成员清单里同名方法按引擎返回顺序分配 0 起的overload_index每个方法带reported_signature与dex_descriptor如(I)V。这些索引绑定到当前产物与引擎不是跨构建的稳定身份——换一次产物或换引擎版本同一个索引指向的方法可能不同。第 4 步 · 方法级反编译。参数契约最紧path 精确class_name 精确声明method_nameoverload_index为可选非负整数同名方法多于一个且未给索引时请求被拒绝错误消息列出全部候选签名Select one of N overloads: 0: …; 1: …而不是静默选第一个。rea inspect-android-method /path/Example.apk example.MainActivity onCreate rea inspect-android-method /path/Example.apk example.MainActivity select --overload-index 1MCP 请求{ name: inspect_android_method, arguments: { path: /path/Example.apk, class_name: example.MainActivity, method_name: select, overload_index: 1 } }第 5 步 · 引用追踪。method_name可选省略时追踪类级引用给出时追踪方法级引用并可附overload_index。目标方法存在多个重载且未选索引时同样被拒绝——引擎的引用操作无法替你选重载。rea trace-android-references /path/Example.apk example.MainActivity rea trace-android-references /path/Example.apk example.MainActivity --method-name select --overload-index 1边界声明五个操作不执行 APK不提供 split APK/AAB 处理.aab是 ZIP 不是 APK不会被当作独立 APK 处理、不做签名校验、不解析完整资源表语义、不分析 native 库、不做运行时捕获。需要归档层证据时用既有的产物清点/提取工具取证再以project-android-application-graphCLI 传{inventory_evidence:[…]}MCP 同名做免执行投影该投影报告精确组件路径与哈希、运行时族提示和基于路径的桥接假设但不解码 DEX、不声称观测到运行时调用。拿到结果后如何读每项能读出什么、读不出什么包检查能读出保留的解码 manifest XML、上游引擎抽取的摘要字段、权限、类/资源计数signature_verification恒为not_performed。摘要字段与 XML 不一致时以保留的 XML 为准——摘要读不出已验证。类搜索searchClasses以pageSize 4096索引切片消费所有分页任何total/offset/limit漂移、页数与加载时class_count不符都抛AnalysisOutputErrormatches保留重复行duplicate_names单独列出重复名及次数。能读出全量类名行与覆盖率complete读不出名字对应哪个 provider 类节点——重名时索引不足以区分。类清点读解析后元数据不生成源码能读出完整展示类型、字段、内部类名codegen 隐藏的 synthetic 成员也会出现dex_descriptor来自冻结的 JADX 方法元数据展示名可能是 JADX 别名描述符本身不是完整原始 DEX 方法 ID。源码位置始终未知。方法检查能读出表示形式Java 或 smali、回退标记、body_status与完整/部分文本。normalizeJadxText识别上游截断标记并把状态标为partial——完整文本结果不等于完整语义更不是字节级重建该操作在 Evidence 中记为confidence: derived其余操作为observed。无函数体的 native/abstract 方法返回body_status: not_available不推断是哪个实现标志导致的。静态初始化器clinit返回带static_initializer_disassembly标记的 smaliJava 反编译可能把其指令挪进字段声明反汇编体才是那部分指令的可靠来源。引用结果reference_unit恒为using_node——total计的是包含引用的 JADX 节点不是 invoke 指令条数一个方法里两次调用只记一条方法引用的direct_invokes列匹配的 DEX invoke 指令及其码元偏移空数组表示该节点内无匹配null表示原始代码不可用source_line与dex_offset显式为null。能读出 provider 节点间的入向静态关系读不出运行时调用——这些不是观测到的调用虚调用也不建立其运行时实现。Evidence 保留原始请求、APK SHA-256、实际引擎 JAR SHA-256、桥 SHA-256、server 名称/版本与每次工具调用的原始响应都在rawResult里JadxSession的rawResult含server、bridge_sha256、jar_sha256、loaded、calls。中途失败时错误的details.partial_observation保留已选路径、摘要、provider 身份版本与失败前收集的全部上游请求/应答——失败后的证据比一行错误多可以复查是谁在第几步返回了什么。边界声明截断被报告而不被提升为完整manifest 与方法文本各有1 MiB上游字节预算超限标记由normalizeJadxText解析为partial分页漂移、成员计数不符、引用total与条目数不符一律AnalysisOutputError。这套显式拒绝而非静默兜底换来的是任何一个返回的计数、文本、索引都可以被引用并回溯到保留的原始响应。会话退役与资源账本复用键、清理触发与预算表rea 对每个实例保留一个序列化会话。工作区是私有的不可变副本POSIX 下为rea-android-前缀的PrivateRuntimeRoot含 APK、引擎 JAR 与元数据桥的拷贝拷贝在 src/android/AndroidTargetSnapshot.ts 中边复制边哈希完成后置0o400只读——准入期间字节变化会报 APK bytes changed after admission。复用与退役规则出自 src/android/JadxProvider.ts复用键是JSON.stringify的APK 路径 APKsha256 JAR 路径 JAR 哈希 桥哈希 Java 可执行 JVM 参数 [JAVA_TOOL_OPTIONS, _JAVA_OPTIONS, JDK_JAVA_OPTIONS, PATH, JAVA_HOME]键不同即先退役旧会话再启动新的清理触发60 秒空闲#scheduleIdle的60_000、目标/配置变化、失败、超时、取消、MCP 断开或服务器关闭一次性 CLI 命令在拿到结果后显式await provider.close()src/cli/androidCommands.ts 的execute总是 join 清理再返回若进程清理无法确认rea 保留工作区并报告位置ProviderCleanupError携带runId与工作区路径该 provider 实例阻塞后续引擎启动直到调用方解决所报告的资源并启动新实例。rea 从不写回原始 APK也不启动目标代码。边界值出处单操作执行期限到达队首后120 秒JadxProvider.ts的OPERATION_TIMEOUT_MS 120_000单次引擎工具调用120 秒JadxSession.ts#tools中callTool的timeout: 120_000上游反编译上限90 秒docs/android-analysis.md Resource and lifecycle limits解码 manifest 与方法文本1 MiB上游字节预算截断被报告JadxProtocol.ts的normalizeJadxText类名分页切片每片 ≤4,096个名称JadxAnalysis.tssearchClasses的pageSize 4096单条协议帧8 MiBJadxMcpTransport.ts的MAX_FRAME_BYTES单操作 stdout/stderr 合计32 MiB超限以诊断失败而非把不完整清单当完整同文件MAX_OPERATION_BYTESJAR 元数据发现读取8 MiBZIP 目录预算JadxConfiguration.ts的JAR_METADATA_READ_MAX_BYTES会话空闲退役60 秒JadxProvider.ts#scheduleIdle的60_000Java 模块探针10 秒/1 MiB输出上限JadxConfiguration.ts的JAVA_MODULE_LISTING_TIMEOUT_MS/JAVA_MODULE_LISTING_MAX_OUTPUT_BYTES边界声明这些是内存安全边界不是文档未声明的结果上限。Evidence 报告的heap_limit_mib是该 worker 观测到的Runtime.maxMemory()向下取整的 MiB原始响应保留精确字节、Java 版本与可见处理器数观测到的可分配堆可能与配置的-Xmx不同尤其 Serial GC且堆不是总 RSS 上限——JVM 还使用 native 内存。独立 REA 实例有独立队列。一行一条命令复现仓库内置的真实引擎验证车道fixture 下载脚本 scripts/fixtures/android/fetch.mjs校验固定 SHA-256、复用匹配文件、拒绝覆盖内容不同的已有文件APK 与 JAR 落在被 git 忽略的_reference/下不进包内容。fixture 为 Appium ApiDemos 6.0.18SHA-256a9eecf37…91f686见 scripts/fixtures/android/apidemos.json。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:androidverify:android对应 package.json 的npm run build:cached node scripts/verify/android/analysis.mjs。scripts/verify/android/analysis.mjs 先断言 APK 与 JAR 的哈希等于 fixture 值与JADX_RELEASE.sha256再对五个操作逐一跑真实 CLI 与 MCP 请求fixture 选定io.appium.android.apis.ApiDemos.onCreate并与合成协议回归相互独立车道还覆盖真实 Java 启动失败、缺失选择器、失败后恢复与 CLI 取消。它不需要 Gradle 构建、模拟器、Android SDK 或 Ghidra——整条车道绕开的所有依赖就是环境契约里那两样调用方供给物。收尾这套工具能回答什么、不能回答什么固定引擎 显式供给 严格校验 证据留痕。能力边界逐条对应 src/android/JadxRelease.ts 的JADX_LIMITATIONS与文档不执行 APK——静态反编译观测不建立运行时行为展示类型是 provider 表示可能是别名dex_descriptor来自冻结元数据重载索引本地于当前引擎与产物类清点读解析后元数据含 synthetic 成员源码位置未知引用总数计 using 节点direct_invokes的覆盖限于这些节点与直接匹配的 invoke不建立反射/动态加载调用点也不建立虚调用的运行时实现无签名校验、无 split APK/AAB、无完整资源表语义、无 native 库分析、无 Android 运行时捕获。判断口径当问题落在这个 APK 声明了什么、方法体长什么样、谁静态引用它、这些结论能否引用到字节级证据时用这套操作当问题落在运行时实际调了什么、签名是否可信、AAB 里有什么、native 库做了什么时这套工具的每个结果字段都已预先声明不回答——用JADX_LIMITATIONS与 Evidence 里的limitations字段作为边界比任何口头承诺都可靠。【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号