APP测试系列-Android客户端流量抓包
一、前言
众所周知,Android 从 7.0 开始,系统不再信任用户 CA 证书(应用 targetSdkVersion >= 24 时生效,如果 targetSdkVersion < 24 即使系统是 7.0 + 依然会信任)。也就是说即使安装了用户 CA 证书,在 Android 7.0 + 的机器上,targetSdkVersion>= 24 的应用的 HTTPS 包就抓不到了。文章主要分为三大部分(注:请通读全文再选择合适自己的方法!)
二、安卓模拟器抓包
模拟器抓包的优点就是不需要真实的手机设备,电脑上下载个软件,设置相关配置就可以抓取 APP 流量。但缺点也很明显,模拟器的版本一般选择 Android 7.0 以下,若 APP 应用版本不支持在 Android 7.0 版本以下的手机安装则无法进行抓包,安装了 APP 打开了也只是闪退无法进入界面。模拟器具体抓包操作如下。
1、安装模拟器
电脑上安装安卓模拟器。个人平时测试喜欢使用 MuMu 模拟器,下载地址:https://adl.netease.com/d/g/a11/c/gw 安装后界面如下,下图部分软件为本人自己安装的。
2、配置证书
想要成功抓包,安装信任证书必不可少。Burp 开启监听,监听地址为连接 WIFI 后的本机 IP,非 127.0.0.1
Burp 中设置监听代理为本机 IP
将 Burp 证书 安装到安卓模拟器中去,这里下载证书依然使用电脑浏览器下载,使用模拟器直接下载个人感觉不太好操作。浏览器设置 192.168.1.102:9000 代理。
访问 http://192.168.1.102:9000 ,下载CA 证书,下载后证书名为 cacert.der,我们需要将其证书名后缀改为 .cer 然后安装到安卓模拟器中,即 cacert.cer
安装详细步骤如下:
打开模拟器文件共享文件夹,把 CA 证书拉取进去
打开文件管理器,进入 $MuMu共享文件夹找到该证书点击进行安装
3、配置代理
⚠️ 注意,APP抓包无论是模拟器还是真机,连接的网络必须是同一WIFI,所以 Burp 监听才会设置为本机 IP,而非 127.0.0.1。上面已经配置好 Burp 抓包所需配置,下面我们只需要配置模拟器代理即可进行抓包。
配置网络与 Burp 代理一致
这里随便打开一个软件,成功抓取到 https 流量
对了,模拟器如何安装 app 也简单说一下,可以通过模拟器应用商店直接下载,也可以电脑上获取 apk 包后直接拉进去模拟器进行安装,模拟器底部也有个 APK 安装的选项。
至此,模拟器抓取 APP 流量已经完成。
4、小结
模拟器进行 APP 流量抓取是最为简单有效的方法,本人工作中也是首选这一种,不行才转向真机测试。
三、安卓真机抓包
1、手机 ROOT(小米)
手机需要 ROOT(经实测有些 APP 无需 ROOT 也可以抓取到,安装 CA 证书即可,自己按实际情况去测试是否可行),本人使用的是小米 MIX 2s 作为日常的测试机,通过官方解锁。参考视频:https://www.bilibili.com/video/BV1er4y1C7wU/?spm_id_from=333.337.search-card.all.click ,刷入面具(ROOT)教程:https://magiskcn.com/
具体的刷 ROOT 这里就不展示了,参考视频已经非常详细了,其他机型自行探索。这里简单说一下刷入面具时遇到的一些小问题。在刷入面具时,手机进入 fastboot 后插入 USB 电脑无法识别设备是否插入,导致输入面具时告警:< waiting for any device >
解决方案如下,手机进入 fastboot 模式,电脑插入连接手机的 USB 后,打开电脑设备管理器
选择其他设备-》鼠标右键更新驱动-》浏览我的电脑以查找驱动程序
重新执行命令,成功刷入面具,即成功 ROOT,然后重启手机即可。
2、Fiddle 抓包
Fiddler 下载链接:https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe
配置抓取 HTTPS 流量,Tools-》Options-》HTTPS
勾选 HTTPS
勾选后会弹出安装证书的提示,根据提示一直点击 是 安装即可。
配置代理端口 Tools — Options — Connections
,端口选择 9000
(可随意更改),勾选 Allow remote computers to connect
,点击 OK,重启 Fiddle 使配置生效
配置手机端代理与 Fiddler 设置的端口一致,让 APP 流量走 Fiddler。这里手机也是同一 WIFI 下的本机 IP。
配置后,在手机浏览器访问上面设置的 IP 地址和端口号,我这里是 192.168.1.102:9000
(这里要根据实际情况),然后 FiddlerRoot certificate
进行下载证书,并自行安装配置
随便打开一个 APP 抓包成功
3、Fiddler + Burp 抓包
由于常年使用 Burp ,突然转到 Fiddler 会不习惯,所以我们再将 Fiddler 流量转发到 Burp 去,我们只需要在 Fiddler 抓包原有的基础上添加流量转发到 Burp 的配置即可。
Burp开启监听
Fiddler 配置,Tools-》Options-》Gateway-》Manual Proxy Configuration
填写 127.0.0.1:8080 使与 Burp 的监听地址一致。
APP 上点击功能点,流量从 Fiddler 转发到了 Burp,这样就比较直观了,回到熟悉的界面,也比较好操作。
Fiddler 真机抓包同样也可以应用在模拟器上,步骤相同。
4、小结
其实我们真机可以直接使用 Burp 抓取 App 的流量,只不过有时候由于使用 Burp 抓取的流量从 APP 回流到 Burp 的时间过长,导致 APP 显示无响应,所以我们使用 Fiddler 抓包,相对来说 Fiddler 对于 APP 和小程序的流量抓取会快一点,但由于 Fiddler 与 Burp 相比,功能上和操作上 Burp 又更胜一筹,所以我们就选择使用 Fiddler 抓取流量,然后把 Fiddler 的流量转发到 Burp 上,以达到更优的测试环境。(Fiddler + Burpsuite 串联时 Fiddler 的流量走 Burpsuite 使 Burpsuite 没有了流量解析的过程,只是单纯将 Fiddler 流量转发到 Burpsuite,所以会比较快一点)
四、扩展
1、抓包工具无法抓取到流量,APP 可正常联网使用
APP 使用非 HTTP 协议,如 TCP、UDP 或者私有协议进行数据传输,所以无法通过常规手段进行抓包,需要进行逆向提取其算法进行分析研究。
APP 设置了不走系统代理的配置,导致无法通过系统代理将流量转发到抓包工具上,可通过第三方代理 APP, HttpCanary 进行流量抓取。
根据网上资源收集了几个版本的 HTTPCannary ,请自行选取可用版本。本人自己在没 ROOT 手机上选择了过检版成功抓取到应用流量。
安装步骤:
手机上安装 HttpCanary 软件
安装证书
按照上面安装完成后,无需理会安装根证书抓取SSL数据包
提示,点击右下角的小飞机变为绿色即开启抓包,打开APP即可抓取到数据包,根据自己需要进行测试,也可以将 HttpCanary 抓取到的流量包复制到Burp进行重放,就是有点麻烦,根据自身需求选择。
2、抓包工具无法抓取到流量,APP 无法正常联网使用
当使用 Burp 或者 Fiddler 抓包时,无法抓取到流量包,手机上 APP 也无法正常使用。则考虑为证书信任问题,由于需要分析 HTTPS 流量,我们必定需要安装相应的抓包工具证书,而系统又对该证书无法信任,导致了无法抓取到流量,APP 也无法正常使用。
解决方案:
将用户证书安装到系统证书列表,我们安装证书一般在用户证书列表,我们将其移动到系统证书列表(此步骤需要 ROOT ,ROOT 后用户才能访问系统证书访问的目录),安装步骤如下:
1)转换证书格式
1
2
3
4
5
6// 安装 openssl 转换证书的格式
$ openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM
// 提取证书的hash
$ openssl x509 -inform PEM -subject_hash -in cacert.pem
// Linux 将证书转换格式,注意后缀为.0
$ mv cacert.pem xxx.0使用adb将证书移入/system/etc/security/cacerts/目录下
1
2
3
4
5
6
7// 将证书导入 /data/local/tmp 目录
$ adb push 7bf17d07.0 /data/local/tmp
$ adb shell
android:/ $ su
android:/ # mount -o rw,remount / # 挂载/system目录
android:/ # mv /data/local/tmp/xxx.0 /system/etc/security/cacerts/xxx.0 # 移动证书
android:/ # chmod 644 /system/etc/security/cacerts/xxx.0 # 修改权限2)使用 Android 7.0 以下的手机,无需 ROOT ,即可尝试使用模拟器进行测试
五、总结
经过测试,有些 APP 流量,使用非 ROOT 手机也能通过 Burp 抓取到 HTTPS 流量,只需要安装 CA 证书即可。具体是否能成功得看 APP 证书验证即机制是否严格。抓包方式不局限与文章列举的方法,选择适合自己的方法才是最好的方法。
六、参考
1 | https://mp.weixin.qq.com/s/MKwYYjcHiiHNzT4RzRuBZg |