Android / 进阶 / 阅读约 18 分钟

REA Android 分析:这个 APK 把请求发到了哪里?

使用 REA 分析 Android APK,定位构建请求的代码,追踪调用方,并区分候选端点与实际网络流量。

本页内容
你将获得

一条从具体功能到请求构造器的带注释调用链,包含候选主机、路径和参数。

你需要

可供分析的 APK、完整的 JDK 17+,以及已安装的 jadx-headless-mcp 0.7.1 JAR。请检查分析后端是否支持你的主机平台。

01. 选择一个界面或操作

“列出所有 API”通常范围过大。先从可见操作开始,例如加载公开目录。记录 APK 版本和界面名称。目标是构建该请求的代码,而不是软件包中所有看起来像 URL 的字符串。

这是静态分析,不会启动 APK。内嵌字符串可能包含废弃主机、测试环境,或需要与运行时配置拼接的路径。

向编程智能体提问
使用 REA 分析 /absolute/path/app.apk。定位加载公开目录的代码。从可能的界面类或 Repository 类追踪到网络方法。报告候选主机、路径、HTTP 方法和参数,并提供类与方法证据。区分静态声明和已确认的运行时流量。

02. 连接 Android 分析后端

使用包含编译器模块的完整 JDK。将 REA 指向已经安装的分析后端 JAR。如果 REA 通过智能体运行,为该服务器配置相同环境并重启;在另一个终端设置变量,不会更新现有进程。

终端
export REA_JADX_MCP_JAR="/absolute/path/jadx-headless-mcp-0.7.1-all.jar"
npx -y rea-agents@6.4.0 inspect-android-package "/absolute/path/app.apk" --json
npx -y rea-agents@6.4.0 search-android-classes "/absolute/path/app.apk" Catalog --json

03. 先查看类,再选择方法

类搜索匹配类名,并不搜索方法体内的任意字符串。试试功能名和常见网络名称,例如 Api、Service 或 Repository。混淆后的软件包可能需要其他入口,例如从 manifest 中的 activity 追踪依赖。

将下方类名替换成搜索返回的完整名称。选择方法前先查看成员。同名方法存在重载时,使用类成员清单返回的重载索引。

终端
npx -y rea-agents@6.4.0 inspect-android-class "/absolute/path/app.apk" com.example.CatalogRepository --json
npx -y rea-agents@6.4.0 inspect-android-method "/absolute/path/app.apk" com.example.CatalogRepository loadCatalog --json

04. 分别追踪请求构造和调用方

分别阅读请求的构建位置和方法调用位置。固定的基础 URL 只是其中一环:构建器可能替换它,拦截器可能添加参数,原生库也可能隐藏部分流程。记录每个边界。

入向引用显示分析引擎已知的静态关系。反射和动态加载代码可能不在其中。如果结果返回 smali 而非 Java,应把它视为同一方法的另一种表示,并明确分析它。

终端
npx -y rea-agents@6.4.0 trace-android-references "/absolute/path/app.apk" com.example.CatalogRepository --method-name loadCatalog --json
  • 哪个调用方将这个方法与选定功能关联?
  • 基础 URL 是字面量、资源、配置值,还是运行时结果?
  • 哪些字段确实加入了请求?
  • 静态追踪在哪里停止?

05. 把发现写成小型规格说明

编写表格,包含候选方法、URL 构造、参数名和支持结论的方法引用。只能在运行时确定的值保留为未知。用本地模拟服务器,按这份规格制作你自己的客户端原型。

静态端点列表不等于成功捕获请求。要得出这样的结论,需要在合适的测试环境中,对匹配版本的应用另行运行并记录。本教程提供分析流程,不声称已测试某个 APK 或捕获 API 响应。

命令已对照 REA 6.4.0 核对。具体结果取决于分析对象和后端。 查看上游来源与范围 →

继续分析选择下一篇教程 →

第一次使用这个工具? REA 是什么? · 我们如何核查教程