使用mitmproxy给手机app抓包

工作中经常需要抓取手机 app 的网络报文,比方说某个图片无法访问的问题,只在手机 app 端出现,web 端正常。这个时候你需要抓包快速定位问题原因,通常的操作都是在电脑上面安装个抓包软件用作代理,手机设置连接这个代理,这样手机的网络报文会经过抓包软件,自然就可抓取解析报文细节了。掌握了网络报文细节,就好像 chrome 的调试工具一样,一切无所遁形。

常见的抓包软件为 Charles、Fiddler、Wireshark 等,Charles 和 Fiddler 都是收费软件,Wireshark 适合较底层的网络报文分析,本文推荐 mitmproxy 是个开软件(MIT License), 不用花钱也够用,看 github 的贡献记录这软件是 2016 年才活跃发力。

有必要介绍下名字,mitm 表示 Man-in-the-middle attack(中间人攻击),proxy 即代理,组合起来 mitmproxy,这样更加便于记住。

1. 安装

  • 最简单的安装方式,因为是 python 编写的,可直接 pip 安装(推荐 pip 安装,省事):
1pip install mitmproxy

Linux 用户可以直接去官网下载压缩包,解压即可。

2. 简介

安装完成后,包含三个工具

  • mitmproxy gives you an interactive command-line interface

    命令行界面(CUI?),可以在终端上面完成各种操作。

  • mitmweb gives you a browser-based GUI

    Web 图形界面,类似 chrome 的调试界面,不喜欢命令行的个人建议使用这个

  • mitmdump gives you non-interactive terminal output

    命令行工具,可以简单理解为 tcpdump 类似的工具

3. 搭建抓包环境

环境图示:

how mitmproxy works

电脑上启动 mitmproxy 或者 mitmweb,直接输入命令启动,默认 8080 全网卡监听:

1➜  ~ ss -lnt |grep 8080
2LISTEN 0      100          0.0.0.0:8080       0.0.0.0:*
3LISTEN 0      100             [::]:8080          [::]:*

手机端连接 WiFi,找到代理设置的地方,填上电脑 ip 和 port,意思就是手机访问网络的时候,流量会走代理(即电脑上的 ip:port 服务),这样代理软件才能解析处理。

要点

现在手机 app 大部分都使用 https 了,这涉及到信任证书的问题。 以 iOS 为例,WiFi 设置好代理后,浏览器访问 mitm.it,这个网址 http://mitm.it/,根据页面上面的指引下载对应平台的证书。

CA certificate

安装好证书后(不会安装网上搜下),一定要注意,新版的 iOS 系统还要选择完全信任(这一步很关键,Settings > General > About > Certificate Trust Settings 这样设置)。英文说明如下:

On recent iOS versions you also need to enable full trust for the mitmproxy root certificate:

Go to Settings > General > About > Certificate Trust Settings. Under “Enable full trust for root certificates”, turn on trust for the mitmproxy certificate.

不这样的设置的话,部分 https 流量可能无法分析,握手阶段证书校验不会成功,连接断开。

设置好环境后,即可开始抓包了,手机上开启目标 App,点击后抓包软件就会刷新报文列。

三种方式示例如下:

  • mitmproxy

启动,直接输入命令:

1mitmproxy

命令行界面如图所示,抓取的 B 站。

mitmproxy cui

上方为报文信息,下方为命令指引,报文列移动貌似支持 vim 快捷键(gg G 等),按 Enter 进入详情页,q 退出,也支持鼠标点击,稍微摸索下就会用了,不多解释。

  • mitmweb

启动,直接输入命令:

1mitmweb

会直接开启个浏览器 tab 页,抓取的手机微信。

mitmweb gui

点击报文列,右侧界面会显示请求头、反回头等信息。

mitmweb detail

  • mitmdump

这个感觉有 tcpdump,暂时用不到,需要使用的可以去翻看下官方文档。

最后修改于: Wednesday, February 21, 2024
欢迎关注微信公众号,留言交流。

相关文章:

翻译: