# Android 7.0
后更新安全策略,软件可以自身选择是否相信用户导入的证书。所以当我们在手机导入 charles
的证书后,有些软件依旧抓不到 Https
的包。我们需要把证书导入到手机系统里面而非用户里面。
上图是我的 pixel 3xl
(安卓 9.0) 导入成功之后的截图。亲测可以抓到 https
的包。
这里提供四种方案处理证书:
# 正常安装证书,然后把证书移到根目录
adb
命令移动$ adb shell #连接手机进入 shell 模式
su # 进入 root
cd /data/misc/user/0/cacerts-added # 切换到用户证书目录
mount -o remount,rw /system # 将 system 权限改成可读写,不然不行 (magisk root 会有 system 不能 mount 的状况,需要刷 twrp 解决)
mv * /etc/security/cacerts/ # move 证书到系统证书目录
mount -o remount,ro /system # 权限改回只读
使用
MT管理器
或者RE管理器
移动.
# 通过
openssl
生成系统可识别的证书,导入根目录。首先准备
openssl
命令行工具,手机需要root
,证书导出到桌面官网的
openssl
需要配置很多东西,这里我们可以下载其他人做的便捷版安装包 http://slproweb.com/products/Win32OpenSSL.html, 下载对应版本安装好 ,然后配置一下环境变量就可以了。将证书转为
pem
格式。charles
可以直接转为pem
格式,fiddler 需要自己转:openssl x509 -in charles.cer -inform der -out charles.pem # cer 转为 pem
使用
openssl
查看pem
证书的hash
值:openssl x509 -inform PEM -subject_hash_old -in charles.pem
获取一段类似
32d678a2
的字串,将文件名重命名为32d678a2.0
最后把
32d678a2.0
文件放到手机的/system/etc/security/cacerts
目录下,重启手机即可。如果手机 root 了,确没有
system
挂载权限,可以先用adb shell
把文件 push 到/sdcard/Download
里,再用MT管理器
或者RE管理器
移动到指定目录。adb push 32d678a2.0 /sdcard/Download
注意:有时候证书导入到根目录依然抓不到包,用下面指令再获取一个
hash
值,跟之前一样重命名导入到根目录,两个文件一起放进去。openssl x509 -inform PEM -subject_hash -in charles.pem
# 安装
Magisk
,然后从magisk
里安装Move Certificates
插件直接在
magisk
模块页面搜插件名就可以,高版本没有搜索功能,这里是插件地址:https://themagisk.com/move-certificates-magisk-module/然后导入
charles
证书,正常安装到用户目录,当你抓包的时候,插件会自动帮你把证书移到根目录使用,看插件指令就能看出来。
# 使用框架,把
app
添加到框架内,然后用 JustTrustMe 模块。因为
Xposed
官方只支持到 8.0, 对于更高版本可能有不兼容的情况,比如安装太极框架,太极框架兼容xpsoed
的模块m
上图为太极框架界面,手机没 root,只能用太极阴,我这里是太极阳,没关系,这并不影响下面的操作。
点击添加应用,把想要抓包的软件添加到框架里,太极阴需要加载一会并卸载软件重装,装完之后点击模块管理,
把安装的
JustTrustMe
勾选上
- 重新打开需要抓包的软件,就可以进行
https
抓包了
第④种办法应该就是 hook 了软件的证书验证,其实我们也可以使用
frida hook
证书验证,不过需要自己找到证书验证的hook
点,还是直接找大佬造好的轮子用舒服。。。