跨网络抓包方案:基于mitmproxy与ADB反向代理的完整实践

7 阅读4分钟

1. 方案概述

在移动应用开发、测试或逆向分析过程中,经常需要对移动设备的网络流量进行抓包分析。传统抓包方法通常要求抓包设备与移动设备处于同一Wi-Fi网络,但在某些场景下(如公共网络无法控制代理设置、网络环境隔离等),这一条件难以满足。本文介绍一种基于 mitmproxy​ 和 ADB反向代理​ 的跨网络抓包方案,通过USB数据线建立稳定的抓包通道,无需依赖设备与电脑在同一局域网,有效避免了一些应用检测Wi-Fi代理的问题。

  • 跨网络抓包:不依赖同一Wi-Fi网络,通过USB线完成流量转发
  • 灵活性高:可针二开mitmproxy来实现特定的需求
  • 功能强大:借助mitmproxy的拦截、重放、脚本定制等能力

2. 核心原理

2.1 技术架构

[安卓设备] --(USB数据线)--> [ADB反向代理] --(本地回环)--> [mitmproxy] --> [目标服务器]

2.2 工作流程

  1. 建立USB隧道:通过adb reverse命令将设备上的端口映射到本地
  2. 流量转发:设备上配置代理指向映射端口,流量经USB隧道转发至mitmproxy
  3. 中间人处理:mitmproxy作为中间人拦截、解析和记录HTTP/HTTPS流量
  4. 数据存储/分析:流量数据可保存为文件或实时分析

3. 实施步骤

3.1 环境准备阶段

3.1.1 所需工具

  • 安卓设备:开启开发者模式+USB调试

  • 电脑环境:安装Python、ADB工具、mitmproxy

  • 必要软件

    # 安装mitmproxy
    pip3 install mitmproxy
    
    # 验证ADB
    adb version
    

3.1.2 软件配置

  1. mitmproxy基础配置

    # 启动mitmproxy
    mitmweb --mode regular --listen-host 0.0.0.0 --listen-port 8080
    

    启动后可通过http://127.0.0.1:8081访问Web界面。

  2. ADB环境检测

    # 连接设备检测
    adb devices
    # 应显示已连接设备标识
    

3.2 抓包通道建立

3.2.1 ADB反向代理设置

# 将设备的8080端口映射到电脑的8080端口
adb reverse tcp:8080 tcp:8080

# 验证映射是否成功
adb reverse --list
# 应显示:UsbFfs tcp:8080 tcp:8080

3.2.2 设备代理配置

方法一:全局代理设置

# 通过ADB设置全局HTTP代理
adb shell settings put global http_proxy 127.0.0.1:8080

方法二:模拟Wi-Fi代理(无Root)

  • 手动配置设备Wi-Fi代理为127.0.0.1:8080
  • 适用于大多数HTTP流量,但可能被某些应用忽略

3.3 证书安装(HTTPS抓包关键)

3.3.1 获取mitmproxy CA证书

  1. 设备浏览器访问http://mitm.it
  2. 下载Android证书(通常为mitmproxy-ca-cert.cer

3.3.2 安装证书

常规安装(用户证书)

  1. 将证书文件传入设备
  2. 设置→安全→加密与凭据→安装证书
  3. 选择CA证书,找到文件并安装

3.4 启动抓包与验证

3.4.1 启动抓包服务

# 终端1:启动mitmproxyweb界面
mitmweb --mode regular --listen-host 0.0.0.0 --listen-port 8080

# 终端2:建立ADB反向代理(保持运行)
adb reverse tcp:8080 tcp:8080

3.4.2 流量验证

  1. 在设备上进行网络操作(如浏览网页)
  2. 观察mitmweb界面是否显示相应流量
  3. 确认HTTPS流量能否正常解密(锁图标显示为解锁状态)

5. 故障排查指南

5.1 常见问题与解决方案

问题现象可能原因解决方案
mitmproxy无流量显示ADB反向代理未成功检查adb reverse --list,重新执行映射命令
HTTPS流量无法解密证书未正确安装确保证书安装为系统证书(Root设备)
应用无法联网代理设置错误检查应用是否遵循系统代理,尝试强制代理
连接时断时续USB连接不稳定更换数据线或USB端口

5.2 诊断命令集

# 检查设备连接
adb devices

# 验证端口映射
adb reverse --list

# 检查设备网络状态
adb shell netstat | grep 8080

# 测试mitmproxy本地服务
curl -x http://127.0.0.1:8080 http://example.com

6. 方案总结

本方案通过ADB反向代理建立了USB抓包通道,结合mitmproxy的强大抓包能力,实现了在不依赖同一Wi-Fi网络条件下的跨网络抓包。该方案特别适合以下场景:

  1. 开发调试:移动应用网络请求分析与调试
  2. 安全测试:应用安全漏洞检测与分析
  3. 网络排查:解决特定网络连接问题
  4. 逆向分析:理解应用通信协议与数据流

6.1 方案局限性

  • 需USB连接:设备需通过数据线连接电脑
  • 应用限制:某些应用可能采用高级反代理措施

6.2 延伸应用

本方案可进一步扩展为:

  • 自动化测试平台:集成到CI/CD流程中
  • 多设备监控:同时监控多台设备的网络流量
  • 流量录制/回放:结合mitmproxy的录制功能实现流量回放测试

通过本方案的实践,可以有效解决传统抓包方法中的网络环境限制问题,为移动应用开发测试提供更灵活的抓包能力。