百趣云 百趣云的博客

Postern + Charles:安卓全局代理抓包的完整方案

为什么系统代理不够用

安卓抓包的标准痛点:在 WiFi 设置里配了代理,但很多 App 根本不走系统代理——OkHttp 可以配 Proxy.NO_PROXY,native 层的网络库(Cronet、自研协议栈)直接无视系统设置。表现就是 Charles 里只能抓到部分请求,目标接口一个都看不到。

解法:VPN 型全局接管。Postern 这类工具在手机上起一个本地 VPN,所有 TCP 流量强制走 VPN,再转发给 Charles——App 无论怎么配置都逃不掉。

方案架构

手机 App → Postern(VPN 接管) → Charles(电脑) → 目标服务器

配置步骤

第一步:Charles 端

  1. Proxy → Proxy Settings:端口 8888,勾选 Enable transparent HTTP proxying
  2. Proxy → SSL Proxying Settings:添加 *:*(对所有域名启用 SSL 解密)
  3. 电脑防火墙放行 8888

第二步:手机端

  1. 安装 Postern(Google Play 或酷安)
  2. 添加代理服务器:Charles 电脑 IP + 8888,类型 HTTP/HTTPS
  3. 配置规则:匹配所有地址 → 通过代理(或按域名精细化:只让目标 App 的域名走代理,其他直连——减少噪音)
  4. 开启 VPN

第三步:证书

Android 7+ 需要 Charles 证书进系统区(方法见"Android 10+ 抓包"篇,Magisk 模块方案)。

精髓一:规则精细化是降噪关键

全局接管后手机所有流量都进 Charles,噪音爆炸。Postern 的规则系统按域名分流:

# 只抓目标 App 的域名,其他直连
api.target.com    → 代理
*.targetcdn.com   → 代理
*                 → 直连(默认规则)

Charles 端再配合 Proxy → Recording Settings 的 include 列表双重过滤,抓包界面就干净了。

精髓二:VPN 型方案抓不到的场景

  1. QUIC/UDP:Postern 只接管 TCP,QUIC 走 UDP 直接绕过。解法:封 UDP 443(路由器或手机防火墙)逼 App 回退 TCP
  2. 证书 Pinning:流量是抓到了但全是 TLS 握手失败。解法:Frida 绕过 Pinning(前文详述)
  3. App 检测 VPN:部分风控检测 VpnService 是否运行。解法:Frida hook ConnectivityManager.getNetworkInfo 等检测点,或换路由器层抓包(tcpdump 方案)

精髓三:替代方案对比

方案优点缺点
Postern免费、规则灵活停更较久,新 Android 版本兼容性一般
HttpCanary手机端独立完成(不需电脑)免费版功能受限,分析能力弱
reqable新工具、UI 现代、双端高级功能付费
路由器透明代理手机零配置、防 VPN 检测配置复杂,需要可刷机的路由器

长期逆向工作流建议:Postern/reqable 做日常,路由器透明代理做兜底(对付检测 VPN 的 App)。

总结

  1. 系统代理可被 App 绕过,VPN 型全局接管是完整方案
  2. Postern 规则按域名分流,配合 Charles 过滤降噪
  3. 三大盲区:QUIC 封 UDP、Pinning 用 Frida、VPN 检测换路由器方案
  4. 日常 Postern/reqable,兜底路由器透明代理

交流微信:run1255

By 百趣云 阅读量:3 On