一、简介
Charles 抓包是日常开发当中经常会用到的技术, 目前常见的抓包工具是用fiddler和Charles, 在 Android 6 之前, 手机系统既信任系统内置的证书, 也信任用户自己安装的证书, 但是在 Android 7 之后, 却发生了变化, 手机系统只信任系统内置的根证书。7.0以后我们可以配合xposed的模块把证书验证给设置为可信任的,但是大部分app都会做xposed检测,还是依然抓不到包,当然这是为了手机系统更安全。 但是这样以来, 原来抓包的方法就失效了。本文主要全面讲解 IOS 和 Android 系统如何去配置根证书,彻底解决抓包所遇到的最头疼的问题。
二、准备工作
- 下载
charles
, 官网的地址: https://www.charlesproxy.com - 配置要抓包的主机和端口,
Proxy > SSL Proxying Settings > SSL Proxying
启用 Enable SSL Proxying
, 同时在 Include
当中添加 Location, 如下图所示(这是个通配符配置, 一般状况下, 这个这个已经能够满足绝大数抓包的需求了)。
- 配置代理服务器的端口,
Proxy > Proxying Settings
, 设置端口 默认8888, 各位自己按照喜好设置
三、Android 上安装证书方法
导出 Charles 的证书, 这个证书是抓包的时候安装在手机上的证书. 方法有两种:
方法一:
- 在 Android 手机上配置代理, 主机是你安装 Charles 的主机的 IP (注意: Android 手机需要和安装的Charles的电脑在同一网段下), 端口号是 8888. (这个可以自行百度各种手机的配置方法.)
- 在 Android 手机的浏览器上输入网址
chls.pro/ssl
, 然后下载文件. - 将下载好的文件拷贝到电脑上, 进行如下的操作:
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.crt
charles-proxy-ssl-proxying-certificate.crt 是拷贝的证书文件
上面输出的结果类似于:
f1c8a61c
-----BEGIN CERTIFICATE-----
MIIFUDCCBDigAwIBAgIGAYPLKAxWMA0GCSqGSIb3DQEBCwUAMIGsMT0wOwYDVQQD
....
sUBY7dHZCJd9TkMQvL9UK5Ooy8A=
-----END CERTIFICATE-----
然后将 charles-ssl-proxying-certificate.crt 文件重命名
为 f1c8a61c.0
(f1c8a61c
需要根据你自己生成 的结果进行调整)
方法二:
- Charles 进入
Help > SSL Proxying > Save Charles Root Certificate
, 导出 pem 格式证书. - 然后进行如下的操作:
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem
charles-ssl-proxying-certificate.pem 是导出的证书文件
上面输出的结果类似于:
然后将 charles-ssl-proxying-certificate.pem 文件重命名为 f1c8a61c.0
(f1c8a61c
需要根据你自己生成 的结果进行调整)
- 拷贝文件, 将生成好的证书文件拷贝到
/system/etc/security/cacerts/
目录下, 并且修改文件权限:
# 拷贝文件
adb push f1c8a61c.0 /system/etc/security/cacerts/
# 修改文件权限
adb shell
cd /system/etc/security/cacerts/
chmod 644 f1c8a61c.0
四、iphone 上安装证书方法
- Charles 当中点击
Help > SSL Proxying > Install Charles Root Certificate in ios Simulators
- 点击
iPhone
手机的 Safari 或者 Safari浏览器, 输入网址http://chls.pro/ssl
, 点击下载 charles 的证书. - 进入
iPhone
手机的 Settings > General > Profile(s) 或者 设置 > 通用 > 描述文件:
- 点击 Install 或者 安装, 安装
chls
证书.
- 进入
iPhone
手机的Settings > General > About > Certificate Trust Settings
或者 设置 > 通用 > 关于本机 > 证书信任设置, 启用已经安装好的 Charles Proxy CA 证书.
五、VMOS 上安装证书方法
- 下载应用 VMOS
官网地址是: http://www.vmos.cn
注:
VMOS
应用就是一台 Android 虚拟机, 目前好像只支持 32 位系统, 大部分应用都可以使用, 如果有的应用明确需要 64位系统, 可以使用VMOS Pro
, 当然了这个 root 功能是收费的了.
- 安装证书
与上面Android 安装方式一样
- 拷贝文件
将生成好的证书文件拷贝到 /system/etc/security/cacerts/
目录下, 并且修改文件权限:
# adb 连接到 vmos 虚拟机
adb connect 192.168.50.182:5666
# 拷贝文件
adb push f1c8a61c.0 /system/etc/security/cacerts/
# 修改文件权限
adb shell
cd /system/etc/security/cacerts/
chmod 644 f1c8a61c.0
192.168.50.182:5666 是 VMOS
虚拟机的 adb 连接. 在进入 VMOS
app后, 进入 设置 > 其他设置
当中, 按照下图所示进行设置, 然后重启 VMOS
app 即可生效:
- 设置全局代理
到此为止, 你已经成功了一半, 接下来就需要设置 VMOS 的全局代理地址为当前的 Charles 的代理服务器的地址. 设置操作如下:
# adb 连接到 vmos 虚拟机(如果之前已经连接过可以省略)
adb connect 192.168.50.182:5666
# 设置 vmos 的全局代理
adb shell settings put global http_proxy 192.168.50.14:8888
192.168.50.14:8888
是我的 Charles 的主机IP地址, 这个需要根据自己的情况修改. 这一步很重要的, 如果没有这一步操作, 前面的准备工作都白搭了!
到处为止, 大家就可以愉快的抓包了. 要么去 VMOS 的应用商店下载应用, 要么自己把应用传递到 VMOS 当中. 这个大家自己去探索吧, 是非常简单的操作.
六、问题解答
- IOS手机连接Charles后无法上网,证书和信任都设置了,求问怎么解决?
针对ios自带的app(比如, appstrore), 无法上网是正常的. 但是如果其他第三方的app也无法上网, 又按照操作进行的, 则这个app可能是可能是使用了双向TLS加密, 这个是需要先获取到内置的证书(去Google找解决方法). 然后需要导入内置的证书,最后重新抓包.
- 您好 openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem运行后显示unknown option -subject_hash_old
usage: x509 args请问这个咋解决
升级下 OpenSSL 版本
- 移动文件没有权限,adb: error: failed to copy ‘f1c8a61c.0’ to ‘/system/etc/security/cacerts/f1c8a61c.0’: remote couldn’t create file: Read-only file system
# 先拷贝到/sdcard,再移动
adb push f1c8a61c.0 /sdcard
# 进入手机
adb shell
# 获取root权限
su
# 移动文件
mv /sdcard/f1c8a61c.0 /system/etc/security/cacerts/
评论区