工程师必备 APP 抓包技能

范家鹏

简要

一台上网电脑就能完成 APP 抓包分析一条龙服务。这是一篇 APP 抓包分析总结性文章,采用 APP 模拟器与 Web 调试代理工具组合玩法。从此 APP 抓包分析能力变得游刃有余,告别脚忙手乱。

工程师必备 APP 抓包技能

本篇文章在 macOS 10.15.7 和 Windows 10 专业版环境测试通过,文章素材大部分以 Mac 环境为主。您只需要拥有一台能上网的电脑就能实现 APP 抓包分析,连实物手机都可以不需要了。适用于 APP 功能测试、APP 安全测试、APP 开发、后端开发、以及对 APP 抓包感兴趣的人员。

第一步:安装 Android 模拟器

国内 Android 模拟器数量有很多,我们需要挑选支持 WiFi 代理设置的模拟器,以下两款是我个人常用的(排序乱序):

模拟器名称支持平台官网默认监听端口号
网易 MuMu 模拟器Windows、Machttps://mumu.163.comWin: 7555 Mac: 22471
夜神模拟器Windows、Machttps://www.yeshen.comWin: 62001 Mac: 62001

本文随机选择的是网易 MuMu 模拟器,两款模拟器都在多环境下测试通过。
本文也分享了一种在 Android 7.0 以上正确抓取 HTTPS 数据包方法。

安装 MuMu 模拟器

由于 MuMu 模拟器安装非常简单,所以省略掉安装过程。
image

启动 MuMu 模拟器

image

第二步:在模拟器上安装 APP

界面化方式安装 APP

网易 MuMu 模拟器,安装 APP 非常简单,安装过程支持全界面化操作。
APP 安装途径有 MuMu 模拟器内置的 "应用中心" 和 "本机 APK 安装",当然也支持 "adb" 命令行方式进行安装。

比如:安装了一款新应用,桌面上会新增一个应用图标,并且在图标的左边出现一个小红点。

image

命令行方式安装 APP

安装 adb

首先安装 adb (Android Debug Bridge)命令行工具,adb 用户指南 https://developer.android.google.cn/studio/command-line/adb

在 Mac 环境下,安装 android-platform-tools。

$ brew cask install android-platform-tools

在 Windows 环境下,安装 Android 命令行工具,下载地址: http://tools.android-studio.org/index.php/sdk,在这里省略掉了 adb 安装过程。

连接 MuMu

以下 adb 命令在 Mac、Windows 环境下通用。

Windows 查看 TCP 端口监听状态

C:\Users\fanjiapeng>netstat -ano|findstr 7555
  TCP    127.0.0.1:7555         0.0.0.0:0              LISTENING       11160

Mac、Linux 查看 TCP 端口监听状态

$ lsof -i:7555

在 Mac 环境下,连接 MuMu 模拟器

$ adb connect 127.0.0.1:22471

查看已连接的所有设备

$ adb devices
List of devices attached
emulator-5554    device
本地安装 APK
$ adb -s emulator-5554 install /Users/fanjiapeng/Downloads/360freewifi_beta.apk 

image

第三步:安装 Web 调试代理工具

推荐两款常用 Web Debugging Proxy Tool(排序乱序):

Tool Name官网支持平台
Charleshttps://www.charlesproxy.comWindows、Linux、Mac
Fiddler Everywherehttps://www.telerik.com/fiddlerWindows、Linux、Mac

抓包工具1:Charles

由于软件安装非常简单,所以省略掉安装过程。不得不称赞一下,Charles 软件图标非常漂亮,打开 Charles 界面如下图所示。
image

模拟器设置 Charles 代理

代理设置步骤:
打开 MuMu 模拟器 → 系统设置 → 选择 WLAN →(长按出弹框)选择修改网络 → 填写代理服务器信息 → 保存。

下图例子注解:

  • 红框 1,填写的是本机的内网 IP 地址。
  • 红框 2,填写的是 Charles 默认的端口号 8888。

image

开启 Charles HTTPS 抓包

首先在模拟器里,安装 Charles 根证书。操作步骤如下:
1.通过浏览器访问 “chls.pro/ssl” ,下载 Charles 根证书。
image

2.点击左上角的 "下载箭头" 图标,安装 Charles 根证书。某些手机需要更改证书后缀名称。
image

3.设置锁屏PIN码或密码才能使用凭证存储。
image

4.证书安装成功。
image

其次在 Charles 软件操作 SSL 代理设置。
配置步骤: Proxy → SSL Proxying Settings → Add 。

图示操作如下所示:
image

Andorid 7.0+ 抓取 HTTPS 包
Android 7.0 版本以下请跳过此小节,不需要多此一举了。

1.Android 系统需要 root 权限
2.下载 Charless 根证书:charles-ssl-proxying-certificate.pem
下载步骤: Help → SSL Proxying → Save Charles Root Certificate...
3.OpenSSL 命令行工具计算 pem 文件 hash 值

$ openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem
45accdf7
-----BEGIN CERTIFICATE-----
证书内容省略

4.把 pem 文件重命名,Android 系统证书格式:<hash>.0

$ cp charles-ssl-proxying-certificate.pem 45accdf7.0

5.(先连接模拟器)把本地证书上传到手机目录中:/system/etc/security/cacerts

$ adb push /Users/fanjiapeng/Desktop/45accdf7.0 /system/etc/security/cacerts

如果出现错误提示:adb: error: failed to copy 'xxx' to 'xxx': remote couldn't create file: Read-only file system。增加以下两步操作,再重新执行步骤 5

$ adb root
$ adb remount
访问控制设置

第一种自动设置方式: 首次从 Android 设备建立连接时,Charles 软件会出现 IP 授权提示框。点击 "Allow",Android 设备 IP 地址将添加到 Charles 中的 "访问控制" 列表中(由于这里使用的是 Android 模拟器,也就是本机 IP 地址)。
image

第二种手动设置方式: 点击右上角小图标 "Settings",在弹出的下拉菜单项中选择 "Access Control Settings",点击按钮 "Add",完成白名单 IP 地址添加。
image

开始 Charles 抓包

注意: 若抓取 HTTPS 包显示 <unknown>,则说明证书配置不正确。
image

抓包工具2:Fiddler Everywhere

由于软件安装方式非常简单化,所以省略掉安装过程。打开 Fiddler Everywhere 界面如下图所示。
image

Live Traffic Columns 功能区说明
名称含义
#Fiddler Everywhere 生成的标识号
ResultHTTP 状态码(英语:HTTP Status Code)
Protocol会话使用的协议(HTTP/HTTPS/FTP)
Host请求发送到的服务器的主机名和端口
URL请求中的 URL 路径,文件和查询字符串
Method发出的请求使用的 HTTP 方法(包括:GET,POST,PUT,DELETE 等)
Body响应正文中的字节数
Caching响应的 Expires 和 Cache-Control 标头中的值
Content-Type响应中的正文数据的格式
Process显示流量源、数据源来自于那个 OS 进程
Comments用于显示您(或共享会话的作者)添加的自定义注释的字段
模拟器设置 Fiddler Everywhere 代理

代理设置步骤:
打开 MuMu 模拟器 → 系统设置 → 选择 WLAN →(长按出弹框)选择修改网络 → 填写代理服务器信息 → 保存。

下图例子注解:

  • 红框 1,填写的是本机的内网 IP 地址。
  • 红框 2,填写的是 Fiddler Everywhere 默认的端口号 8866。

image

开启 Fiddler Everywhere HTTPS 抓包

1.点击右上角小图标 "Settings",选择菜单项 "HTTPS",勾选 "Capture HTTPS traffic"。
image

2.在模拟器里,通过浏览器下载 Fiddler Everywhere 根证书,剩余的安装步骤请参考 Charles 根证书安装:
image

Andorid 7.0+ 抓取 HTTPS 包

Fiddler Everywhere 工具导出的根证书格式为 crt,需要把 crt 证书格式转换成 pem 格式。其它配置步骤请参考 Charles 这章设置。

$ openssl x509 -in FiddlerRootCertificate.crt -inform DER -out FiddlerRootCertificate.pem -outform PEM
开启远程连接

选择菜单项 "Connections",勾选 "Allow remote computers to connect",其它项保留默认设置即可。
image

开始 Fiddler Everywhere 抓包

在 MuMu 模拟器中,操作需要被抓包的 APP,在 Fiddler Everywhere 中 "Live Traffic" 区域显示抓取到的所有 API 请求,点击其中一条 API,在 Fiddler 界面右边区域可以查看 Request、Response 详细信息。
image

最后:总结

虽然文章取材以 Mac 环境为主,若没有特殊注明,则说明在 Windows 和 Mac 环境下安装步骤同质化,只是在安装过程中某些界面显示上会有一些差异,但并不影响整体的安装流程。

本篇文章言简意赅介绍了 MuMu 模拟器安装,adb 工具的安装及使用,APK 多种安装方式,两款抓包工具 Fiddler Everywhere、Charles 的安装及基础性配置。

虽然 APP 抓包还有其它的方式,但 APP 抓包工具这两款依然是首选工具。调试代理工具的介绍不是本章的重点,因为它们的能力远不止于此。

篇幅有限,本章只讲解了 Android APP 抓包,iOS APP 抓包方式是相同的。

延伸话题:关于 APP 抓包与反抓包策略,这是人与人之间的较量,这是一个长期博弈的过程。
阅读 6.2k

范家鹏(冬霜)
人生如梦,沉淀未来。

一个简简单单的程序员,交个朋友吧

18 声望
3 粉丝
0 条评论
你知道吗?

一个简简单单的程序员,交个朋友吧

18 声望
3 粉丝
宣传栏