Skip to content

Android SSL Pinning 绕过 commands/android/pinning.py ​

该模块启动一个作业,hook 常见 SSL Pinning 实现类(OkHttp、TrustManager、Conscrypt 等),替换校验逻辑以绕过证书锁定。它属于 android sslpinning 命令组,CLI 前缀为 android sslpinning disable,是流量抓包的前置步骤。

模块概览 ​

项目值
文件路径objection/commands/android/pinning.py
Agent 实现agent/src/android/pinning.ts
命令组android sslpinning
依赖objection.state.connection、objection.utils.output

解决的问题 ​

  • App 用证书锁定阻止中间人抓包,需一键绕过常见实现。
  • --quiet 抑制 agent 侧的逐条 hook 日志,减少噪声。
  • 以异步作业常驻,hook 完即生效,无需重启 App。

📋 命令清单 ​

命令函数说明
android sslpinning disable [--quiet]android_disable()hook 常见类绕过 SSL pinning

辅助函数:_should_be_quiet()(行 5)。

⚙️ 实现原理 ​

Python 层仅解析 --quiet 标志并透传给 api.android_ssl_pinning_disable(quiet)。agent 侧批量替换 X509TrustManager.checkServerTrusted、OkHttp3/Conscrypt 等校验方法。

android_disable() — 绕过 SSL pinning ​

源码:objection/commands/android/pinning.py:17

无位置参数。调 api.android_ssl_pinning_disable(_should_be_quiet(args))。JSON 模式返回 result={'action': 'ssl_pinning_disabled', 'quiet': ...},warnings 提示作业 id 需经 agent state 查。

python
# objection/commands/android/pinning.py:26-27
api = state_connection.get_api()
api.android_ssl_pinning_disable(_should_be_quiet(args))
python
# objection/commands/android/pinning.py:29-36
if should_output_json(args):
    return output_result(
        CommandResult(
            result={'action': 'ssl_pinning_disabled', 'quiet': _should_be_quiet(args)},
            warnings=['Job id not surfaced; use `agent state` to list running jobs.'],
        ),
        command='android sslpinning disable',
    )

JSON 模式行为 ​

--quiet 既影响 agent 侧日志,也被回填到 CommandResult.result.quiet 供 agent 查阅。因是异步作业,warnings 提示作业 id 不在同步返回里,需 agent state 查询。非 JSON 模式返回 None,agent 侧成功后无额外输出。

🔍 源码索引 ​

符号位置
_should_be_quietobjection/commands/android/pinning.py:5
android_disableobjection/commands/android/pinning.py:17

相关文档 ​

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