Skip to content

objection 是什么 ​

objection 是一个运行时移动端安全测试工具包(Runtime Mobile Exploration Toolkit),底层由 Frida 驱动,专门用于评估 iOS / Android 应用的安全姿态——而且不需要越狱(jailbreak / root)。

一句话定义 ​

objection = 把 Frida 的动态插桩能力,封装成一套面向安全测试人员的交互式命令行。

它的本质 ​

移动端安全测试有两类典型手段:

手段做法局限
静态分析反编译 APK / IPA,阅读代码、找漏洞代码被混淆/加壳后难以为继;看不到运行时实际行为
动态分析让 App 跑起来,在运行时观察、干预它的行为需要能注入代码到目标进程

objection 做的就是动态分析。它把一个用 TypeScript 写的 agent(agent/src/,编译成 agent.js)注入到目标 App 进程中,agent 在进程内部通过 Frida 的 Java / Objective-C 桥接直接调用系统 API、替换方法实现、读取内存,从而让你能:

  • 绕过 SSL Pinning,抓到加密流量;
  • 列举并 Hook 任意类与方法;
  • Dump 钥匙串、Keystore 里的凭证;
  • 搜索堆上的对象实例并调用其方法;
  • 读写进程内存;
  • 探索应用的沙盒文件系统;
  • ……

与 Frida 的关系 ​

很多人会问:既然底层是 Frida,为什么不直接用 Frida?

Frida 是引擎,objection 是建在引擎上的驾驶舱:把"绕过证书校验""Hook 某方法""Dump 钥匙串"这些高频、重复的任务做成了开箱即用的命令,并提供 REPL、任务管理、插件机制、HTTP API 等工程化能力。你可以把它理解成 Frida 的"应用层脚手架"。

谁在用 objection ​

  • 移动端渗透测试人员:快速评估 App 安全姿态;
  • 安全研究员:验证漏洞、研究加壳/混淆 App 的运行时行为;
  • App 开发者:自测自己 App 的防护是否真的有效(如 SSL Pinning 是否能被绕过);
  • CTF 选手:移动端题目的常备工具。

项目速览 ​

  • 语言:Python(CLI 与逻辑层)+ TypeScript(Frida agent)
  • 支持平台:iOS、Android
  • 许可:GPL-3.0-or-later
  • 安装:pip install objection

🧱 objection 在测试工作流中的位置 ​

把 objection 放进一个完整的移动端安全评估工作流,它的位置更清楚。下面这张 ASCII 框图画的是从拿到 APK/IPA 到出具发现的全流程,标出 objection 介入的环节:

text
┌─────────────── 移动端安全评估工作流 ───────────────────────────────────┐
│                                                                         │
│  ① 拿到样本                                                             │
│     APK / IPA                                                           │
│       │                                                                 │
│       ▼                                                                 │
│  ② 静态分析(反编译/看清单)      ── objection 不介入 ──┐              │
│     jadx / class-dump                                   │              │
│       │                                                 ▼              │
│  ③ 决定动态测试策略                          (了解结构、找疑点)       │
│       │                                                                 │
│       ▼                                                                 │
│  ④ 部署运行时插桩  ◀── objection 介入 ──┐                              │
│     ├─ root/越狱设备 → frida-server       │  objection attach          │
│     └─ 普通设备 → patchapk 植入 gadget    │  objection patchapk        │
│       │                                  ┘                              │
│       ▼                                                                 │
│  ⑤ 运行时探测  ◀── objection 主战场                                     │
│     ├─ 绕 SSL Pinning → 抓 HTTPS 流量(配合 Burp)                      │
│     ├─ Hook 关键方法 → 看入参/出参/调用栈                                │
│     ├─ Dump Keychain/Keystore → 取凭证                                  │
│     ├─ 堆搜索 → 拿实例调方法                                            │
│     ├─ 内存搜索/读写 → 找硬编码密钥                                     │
│     └─ 文件系统 → 翻沙盒里的 DB/plist                                   │
│       │                                                                 │
│       ▼                                                                 │
│  ⑥ 结合流量+运行时证据 → 形成发现                                       │
│       │                                                                 │
│       ▼                                                                 │
│  ⑦ 报告                                                                 │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

要点:

  • objection 不做静态分析:第 ② 步用 jadx/class-dump 等专用工具。objection 的价值在第 ④⑤ 步——把"运行时观察与干预"工程化。
  • 与 Burp 互补:objection 绕掉 Pinning 后,加密流量才进得来 Burp;Burp 看请求响应,objection 看方法调用与内存——两层证据互证。
  • 两种部署路径:第 ④ 步依设备是否 root 选 frida-server 或 gadget,这正是 objection 提供 attach 与 patchapk 两条路径的原因。

🔄 objection 与 Frida 的能力分层 ​

"既然底层是 Frida,为什么不直接用 Frida"——下图把 objection 在 Frida 之上加的每一层都标出来,回答这个问题:

每一层解决一个"直接用 Frida 会重复造轮子"的问题:

  • agent 层:把"Hook SSLContext 的 7 处校验点"这种高频封装固化,免去每次手写。
  • 命令层:把"调 agent RPC → 格式化输出 → 注册 Job"的编排模板化。
  • UX 层:REPL、补全、历史、Job 管理让交互式测试高效。
  • Agent 接口层:统一 JSON schema + 事件流让脚本/AI Agent 能可靠驱动——这是直接用 Frida 完全没有的。

🆚 与同类工具对比 ​

把 objection 放进移动端安全工具谱系:

工具定位形态与 objection 关系
Frida运行时插桩引擎引擎 + CLIobjection 的底层
frida-tools通用 Frida REPL/trace轻量 CLIobjection 是其上的应用层脚手架
Burp SuiteHTTPS 中间人代理桌面应用与 objection 互补:objection 绕 Pinning 让流量进 Burp
jadx / class-dump静态反编译桌面/CLIobjection 不做静态,互补
XposedAndroid 框架级 Hook需刷框架objection 用 Frida 运行时插桩,不需刷框架;Gadget 模式更轻
MobSF自动化移动安全扫描Web 平台自动化扫描;objection 偏交互式深度测试,可被 MobSF 类工具编排
BridaFrida + Burp 桥插件轻量脚本集合;objection 提供更完整的命令/输出/Job 体系

objection 的差异化:Frida 引擎之上,针对移动安全高频场景的命令化封装 + 双模式输出(人类文本 / Agent JSON)——既服务渗透测试者的交互式测试,又服务 AI Agent 的可编程驱动。

⚖️ 设计权衡 ​

决策选择替代方案权衡理由
底层选 FridaFrida自研插桩 / XposedFrida 跨 iOS+Android、不需刷框架、生态成熟。objection 把精力放在应用层而非重造引擎。
双模式输出人类文本 + Agent JSON只服务一类一套命令实现同时服务渗透测试者与 AI Agent,最大化复用。代价是命令函数要兼顾两种输出。
交互式 REPL 为主REPL + 命令纯脚本/纯 HTTP移动安全测试高度探索式,REPL 的即时反馈最契合。HTTP/CLI 子命令作为自动化补充。
Gadget 模式支持普通设备patchapk 植入 gadget只支持 root 设备扩大可用设备范围,企业测试机不一定方便 root。代价是需重打包重签名。

接下来,建议先看 它能解决什么问题,理解为什么需要运行时测试;再看 整体架构。

基于 GPL-3.0-or-later 许可发布