Skip to content

Android 代理设置 commands/android/proxy.py ​

该模块在目标 App 进程内设置 HTTP 代理(IP + 端口),常配合 SSL pinning 绕过做流量抓包。它属于 android proxy 命令组,CLI 前缀为 android proxy set。

模块概览 ​

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

解决的问题 ​

  • 系统 Wi-Fi 代理对部分 App 无效(App 忽略系统代理或走直连),需在进程内强制设置。
  • 抓 HTTPS 流量时,配合 android sslpinning disable 形成完整链路。
  • 为自动化测试提供结构化 JSON 输出。

📋 命令清单 ​

命令函数说明
android proxy set <ip> <port>android_proxy_set()在 App 内设置 HTTP 代理

⚙️ 实现原理 ​

强制要求恰好 2 个位置参数(IP、端口)。校验通过后调 api.android_proxy_set(args[0], args[1]),agent 侧 hook 网络栈或 System.setProperty 注入代理。

android_proxy_set() — 设置代理 ​

源码:objection/commands/android/proxy.py:9

len(args) != 2 即报错(不限于缺失,多给参数也拒)。JSON 模式缺参返回 status='error'、exit_code=1、含 human_text。成功返回 result={'action': 'proxy_set', 'host', 'port'}。

python
# objection/commands/android/proxy.py:17-32
if len(args) != 2:
    if should_output_json(args):
        return output_result(
            CommandResult(
                result={'error': 'expected <ip address> <port>'},
                status='error',
                human_text='Usage: android proxy set <ip address> <port>',
                exit_code=1,
            ),
            command='android proxy set',
        )
    click.secho('Usage: android proxy set <ip address> <port>', bold=True)
    return None

api = state_connection.get_api()
api.android_proxy_set(args[0], args[1])

JSON 模式行为 ​

参数数量不对时返回带 error/human_text/exit_code 的错误 CommandResult,agent 可据 error 字段判断。成功时返回 proxy_set 动作与 host/port 回显。注意:该模块源码本身可用且完整,实际可用性取决于 agent 侧 android_proxy_set 的实现是否覆盖目标 App 的网络栈——不同 App 框架(OkHttp/Cronet/原生 socket)支持程度不一,需实测验证。

🔍 源码索引 ​

符号位置
android_proxy_setobjection/commands/android/proxy.py:9

相关文档 ​

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