HTTP抓包小记
最近处理一些对第三方应用中HTTPS请求抓包工作。杂七杂八挺烦琐,又容易遗忘。记录之,备不时之需。
抓包工具
抓包工具有很多,选一个顺手的就行。我用的是 whistle。启动方式如下:1
2
3
4
5
6
7
8
9
10
11whistle run
[i] whistle@2.6.3 started
[i] 1. use your device to visit the following URL list, gets the IP of the URL you can access:
http://127.0.0.1:8899/
http://172.30.209.45:8899/
http://172.20.209.88:8899/
Note: If all the above URLs are unable to access, check the firewall settings
For help see https://github.com/avwo/whistle
[i] 2. configure your device to use whistle as its HTTP and HTTPS proxy on IP:8899
[i] 3. use Chrome to visit http://local.whistlejs.com/ to get started
Press [Ctrl+C] to stop whistle...
启动后直接在浏览器中打开对应地址开始抓包。
HTTPS 抓包
抓 HTTP 一般不会遇到什么问题,这里要说的主要是 HTTPS 抓包时遇到的问题。
问题一:Android/iOS安装和信任证书
- Android 直接下载后从 SD 卡安装即可。安装成功后在
设置 > 受信任的凭据 > 用户
中查看 - iOS 使用 Safari 浏览器打开证书链接来安装。安装成功后在
设置 > 通用 > 描述文件与设备管理
中查看。注意iOS上需要手动设置信任第三方证书
经过如上设置后,可以抓到部分应用中的 HTTPS 请求了。但另一些应用的 HTTPS 请求,仍然无法抓取。大致可以归纳为两种原因(部分APP无法代理抓包的原因及解决方法(flutter 抓包)一文总结得不错):
- HTTP 客户端没有走系统代理。这种情况比较少见,一个典型的例子是 Flutter
- HTTP 客户端不信任第三方证书。这种情况比较多见,例如 Android 平台上滴滴出行、微信(7.0版本之后)
接下来看Android系统中如何避免应用不信任第三方证书。
问题二:应用不信任第三方证书
两个解决办法:
- 模拟器(开启root) + 安装系统证书
- 真机(无root) + VirtualXposed + JustTrustMe
方法一
有多种模拟器可供选择。这里推荐两个自带root功能,并且可成功运行大部分主流应用的模拟器。
- Windows 上可以使用夜神模拟器
- Mac 上可以使用 MuMu模拟器
第一步,将whistle 证书下载到电脑上,名字是 root.crt
。执行如下命令得到类似 b4a43da9
这样的字符串。1
openssl x509 -subject_hash_old -in getssl.crt
第二步,将 root.crt
重命名成 b4a43da9.0
,安装到模拟器上。1
adb push b4a43da9.0 /system/etc/security/cacerts/
第三步,设置 > 受信任的凭据 > 系统
中检查证书是否安装成功。
将 whistle 证书安装成系统证书后,就可以正常抓取部分应用中的 HTTPS 请求。
方法二
- 安装 VirtualXposed.apk 和 JustTrustme.apk
- 给 VirtualXposed 足够的权限
- 在 VirtualXposed 中安装 JustTrustme 和需要抓包测试的应用
- 重启 VirtualXposed
- 在 VirtualXposed 中打开待抓包的应用