1.说明
想要对手机抓包,最关键的是需要设置好根证书,用户证书在安卓7.0
之后就不受信任了,想要对手机app抓包,就需要把用户证书设置为系统证书(根证书)
注意,想要设置为根证书,你的安卓需要获取到root权限
,但是root会有风险,很大app(如银行类app)都不能在已root的设备上运行,所以一般推荐使用模拟器操作,此处以雷电模拟器9和charles为例进行演示
2.charles设置
设置ssl抓包类型,菜单栏Proxy--SSL Proxy Settings,勾选"Enable SSL Proxying",新增一个类型,IP端口都设置为"*"(表示全部)
设置远程端口,菜单栏Proxy--Proxy Settings,Http Proxy这里设置一个端口号,例如8888,勾选下面两个传输类型
查看远程安装证书信息,点击菜单栏Help--SSL Proxying--Install Charles Root Certificate on a Mobile Device or Remote Browser,它弹出一个窗口,显示本机代理的IP端口(我这里是10.10.66.1:8888),以及证书下载URL(chls.pro/ssl
)
3.模拟器设置
打开模拟器的设置页面,找到root选项把它开启,大多数模拟器都支持root,都是在设置界面可以打开root开关,如果有写入设置也需要开启
打开系统设置,找到WLAN设置,然后把点击当前网络右上角的编辑按钮,把代理设置为Charles帮助信息显示的IP端口即可
4.设置用户证书
打开系统自带的浏览器,它会弹出证书不受信任的问题,不管它,一路点击"继续"知道不弹出提示。现在访问一下chls.pro/ssl
,此时Charles那边应该会有一个确认按钮,确认之后模拟器就会下载证书,下载完完成之后点击安装,模拟器会提醒设置一个锁屏(图案或pin都可以),这时候就可以安装证书了,证书名可以随便写
5.设置系统证书
现在设置的是用户证书,在安卓7之后app是不信任用户证书的,所以我们还需要把它设置为系统证书,其实就是把这个证书文件复制到系统证书目录里就行
用户证书目录:/data/misc/user/0/cacerts-added/
系统证书目录:/system/etc/security/cacerts/
这个操作很容易,只要获取到root权限就行,你可以直接在文件管理器里把系统证书复制到用户证书的文件夹里,证书是一个.0结尾的文件,我这里是ca499da3.0,如果以前没有安装过用户证书,那用户证书文件夹里只有一个文件,很好找到的
如果你有adb,也可以使用adb的shell操作
shell
adb devices
adb shell
su
mount -o remount,rw /system
cp /data/misc/user/0/cacerts-added/ca499da3.0 /system/etc/security/cacerts/
另外我们可以发现,其实证书文件的文件名就是一个哈希值,你也可以直接从charles导出证书,然后复制到安卓的证书文件夹里就行,但这种做法前提是你能使用openssl
首先,导出Charles证书文件(pem格式)
然后使用openssl生成哈希(证书文件名)
shell
openssl x509 -subject_hash_old -in 证书文件路径
之后把Charles证书文件改名为哈希.0
,最后使用adb把它push到对应的证书文件夹里即可