Mac下使用Charles进行HTTP/HTTPS抓包

Charles是MacOS上的常用的抓包工具,常用于移动端的网络抓包分析。本文将介绍如何使用Charles对安卓/iOS设备的HTTP/HTTPS包进行抓取。

Charles安装与配置

下载

最新的Charles工具,下载地址:https://www.charlesproxy.com/download/

配置代理端口号

Proxy -> Proxy Settings -> Port,port可以随便指定,这里取8888

配置HTTPS证书

添加SSL Proxying

Proxy -> SSL Proxying Settings ->勾选“Enable SSL Proxying”,并点击下方的Add,可以这样配置:

安装Charles证书到Mac

Help–>SSL Proxying→Install Charles Root Certificate

此时会启动“钥匙串访问”APP,搜索框搜所刚安装好的证书,证书名字:Charles Proxy CA。

选中该证书,点击显示简介

更改证书信任权限。更改为始终信任,并关闭窗口输入密码保存

移动复制该证书到“系统”里面

结束!可以抓包了

Android 设置

Android代理设置

以小米+lineageOS为例

设置 -> WI-FI -> 网络详情 -> 编辑

配置代理,IP设为电脑的IP,端口输入之前设置的端口(此为8888),点击存储

(mac 查看ip:ifconfig en0 )

Android 7.0 以下设置

打开Safari浏览器,访问:chls.pro/ssl

手机会提示下载文件,点击安装

Android 7.0 以上设置

Android 7.0及以上为何不能抓取到Https请求的明文数据?

其实Charles上显示确实抓到了包,但是当我们看抓包的详细数据时会发现报错:
“You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu”。

Charles说手机端没有信任Charles的根证书,但是我们手机上已经安装了Charles根证书了,为什么会这样?

原来在Android 7.0(API 24 ) ,有一个名为“Network Security Configuration”的新安全功能。这个新功能的目标是允许开发人员在不修改应用程序代码的情况下自定义他们的网络安全设置。如果应用程序运行的系统版本高于或等于24,并且targetSdkVersion>=24,则只有系统(system)证书才会被信任。所以用户(user)导入的Charles根证书是不被信任的。

方法一:将证书提升为系统证书

参考:android 7.0以上charles https抓包

将手机进行Root

将下载的pem证书文件传到到电脑上,并执行以下命令得到证书的md5值

openssl x509 -subject_hash_old -in <file_name>

第一行: 即为md5值。

将charles-proxy-ssl-proxying-certificate.pem重命名为:<8位md值>.<0>,这里的md5值为上一步得到的。

Android系统根目录下的证书名字格式如下:<8位md值>.<0>

将上面步骤产生证书push到手机目录:/system/etc/security/cacerts

push中如果遇到错误 例如remount of the / superblock failed: Permission denied或者file only read等。

解决办法:

1
2
3
4
$ adb root
$ adb disable-verity
$ adb reboot
$ adb root

在 设置->安全->加密与凭据->信任的凭据 的系统标签页看到你新加入的证书,将其启用即可顺利抓包

按照系统证书的方法,遇到问题:read-only file system android

尝试adb root ,报错 adbd cannot run as root in production builds 安装adbd Insecure 依然不行

方法二:利用VirtualXposed

参考:Android 7.0+使用VirtualXposed+Charles进行抓包

注意,0.18.2以后的VirtualXposed 不支持32位app

iOS 设置

iPhone代理设置

设置→WIFI –>点击Wi-Fi旁边的ⓘ

滑到底部,点击配置代理

配置代理,IP设为电脑的IP,端口输入之前设置的端口(此为8888),点击存储

(mac 查看ip:ifconfig en0 )

iPhone证书安装

打开Safari浏览器,访问:chls.pro/ssl,此时电脑上连接提示,点击allow允许

手机会提示下载描述文件,点击允许

安装完成后,点击 设置–>通用→关于本机,下拉到底部,点击证书 信任设置,把刚信任开关打开。