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 安装后界面如下,下图部分软件为本人自己安装的。

image-20221112145644738

2、配置证书

想要成功抓包,安装信任证书必不可少。Burp 开启监听,监听地址为连接 WIFI 后的本机 IP,非 127.0.0.1

image-20221112150053906

Burp 中设置监听代理为本机 IP

image-20221112150945417

image-20221112151153064

将 Burp 证书 安装到安卓模拟器中去,这里下载证书依然使用电脑浏览器下载,使用模拟器直接下载个人感觉不太好操作。浏览器设置 192.168.1.102:9000 代理。

image-20221112151340657

访问 http://192.168.1.102:9000 ,下载CA 证书,下载后证书名为 cacert.der,我们需要将其证书名后缀改为 .cer 然后安装到安卓模拟器中,即 cacert.cer

image-20221113164208412

安装详细步骤如下:

打开模拟器文件共享文件夹,把 CA 证书拉取进去

image-20221112151943004

image-20221112152233341

打开文件管理器,进入 $MuMu共享文件夹找到该证书点击进行安装

image-20221112152423683

image-20221112152437313

image-20221112152450976

image-20221112152511065

3、配置代理

⚠️ 注意,APP抓包无论是模拟器还是真机,连接的网络必须是同一WIFI,所以 Burp 监听才会设置为本机 IP,而非 127.0.0.1。上面已经配置好 Burp 抓包所需配置,下面我们只需要配置模拟器代理即可进行抓包。

image-20221112152907673

image-20221112152944897

配置网络与 Burp 代理一致

image-20221112153028958

这里随便打开一个软件,成功抓取到 https 流量

image-20221112153433552

对了,模拟器如何安装 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 >

image-20221112171452091

解决方案如下,手机进入 fastboot 模式,电脑插入连接手机的 USB 后,打开电脑设备管理器

image-20221112171645895

选择其他设备-》鼠标右键更新驱动-》浏览我的电脑以查找驱动程序

image-20221112171755530

image-20221112171819591

image-20221112172012733

image-20221112172044274

image-20221112172119508

重新执行命令,成功刷入面具,即成功 ROOT,然后重启手机即可。

image-20221112172210871

2、Fiddle 抓包

Fiddler 下载链接:https://telerik-fiddler.s3.amazonaws.com/fiddler/FiddlerSetup.exe

配置抓取 HTTPS 流量,Tools-》Options-》HTTPS

image-20221112211747086

勾选 HTTPS

image-20221112211915851

勾选后会弹出安装证书的提示,根据提示一直点击 是 安装即可。

image-20221112212110415

配置代理端口 Tools — Options — Connections,端口选择 9000(可随意更改),勾选 Allow remote computers to connect ,点击 OK,重启 Fiddle 使配置生效

image-20221112212121623

配置手机端代理与 Fiddler 设置的端口一致,让 APP 流量走 Fiddler。这里手机也是同一 WIFI 下的本机 IP。

image-20221112212429801

配置后,在手机浏览器访问上面设置的 IP 地址和端口号,我这里是 192.168.1.102:9000(这里要根据实际情况),然后 FiddlerRoot certificate 进行下载证书,并自行安装配置

image-20221112213636603

image-20221112213435342

随便打开一个 APP 抓包成功

image-20221121200703789

3、Fiddler + Burp 抓包

由于常年使用 Burp ,突然转到 Fiddler 会不习惯,所以我们再将 Fiddler 流量转发到 Burp 去,我们只需要在 Fiddler 抓包原有的基础上添加流量转发到 Burp 的配置即可。

Burp开启监听

image-20221112220055883

Fiddler 配置,Tools-》Options-》Gateway-》Manual Proxy Configuration 填写 127.0.0.1:8080 使与 Burp 的监听地址一致。

image-20221112220244632

APP 上点击功能点,流量从 Fiddler 转发到了 Burp,这样就比较直观了,回到熟悉的界面,也比较好操作。

image-20221121200547725

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 软件

  • 安装证书

image-20221121203818209

image-20221121203750042

image-20221121203941186

image-20221121204027908

按照上面安装完成后,无需理会安装根证书抓取SSL数据包提示,点击右下角的小飞机变为绿色即开启抓包,打开APP即可抓取到数据包,根据自己需要进行测试,也可以将 HttpCanary 抓取到的流量包复制到Burp进行重放,就是有点麻烦,根据自身需求选择。

image-20221121204554671

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
2
3
4
5
6
7
https://mp.weixin.qq.com/s/MKwYYjcHiiHNzT4RzRuBZg
https://www.bilibili.com/video/BV1er4y1C7wU/?spm_id_from=333.337.search-card.all.click
https://magiskcn.com/
https://mp.weixin.qq.com/s/2PF9lbIcqPHDBUmiFxX7yw
https://mp.weixin.qq.com/s/f8Lcwz-yjZXCsXiA64gNMg
https://www.52pojie.cn/thread-1593662-1-1.html
https://mp.weixin.qq.com/s/iVsjdjkO5xfqQVHfNEyeUQ