Charles证书安装为安卓系统证书
0.前⾔
⽤charles对⼿机app进⾏抓包时,有些app在使⽤了charles代理的时候会⽆法连接⽹络的情况,即便已经将charles证书安装到⼿机⽤户证书了也不⾏,这个时候⼀般考虑两种情况:
2.app仅信任系统证书。
关于如何区分这两种情况,我并未在⽹上到明确的答案,如果有⼈对这⽅⾯了解的话求给⼩弟指条明路,感激不尽。
本⽂要解决的是第2种情况,出现这种情况的话直接把charles证书安装成系统证书就⾏了。
1.下载charles证书
打开charles,点击Help > SSL Proxying > Save Charles 下载证书到本地
这⾥有个坑,选择下载⽬录后,需要在⽂件夹名后⾯加上" xx"才会把证书下载到该⽬录下的xxx.pem⽂件,否则的话证书会下载到上⼀级⽬录,⽽证书名就是最后⼀级⽬录的名称,⽐如这⾥如果没有加"\chra
les",那证书就会下载到D盘根⽬录的work.pem⽂件。搞的我第⼀次下的时候⽼不到⽂件,重新下⼜说⽂件已存在,蛋疼。
image
2.证书格式化
系统证书和⽤户证书⽂件有很⼤不同,我们先进⼊系统证书⽬录看⼀下系统证书都长什么样,安卓系统证书都在/system/etc/security/cacerts ⽬录下,⽤adb shell进⼊该⽬录,查看⼀下已有的证书
image
可以看到系统证书都是.0格式的,⽽且命名显然也是⼤有讲究的。
证书的名称可以⽤openssl获取,linux或者mac⼀般都有openssl,如果没有的话就⾃⼰装⼀个吧。使
⽤以下命令就可以计算出证书的名字:openssl x509 -inform PEM -subject_hash_old -in xxxx.pem | head -1
1638433493(1).jpg
得到⽂件名之后把证书重命名以下就可以了
mv charles.pem e03d39e3.0
3.将证书放到安卓系统证书⽬录
这⾥需要⼀部拥有root权限的安卓设备,建议使⽤夜神模拟器,直接下载最新版,默认有root权限,并且夜神模拟器⾃带有adb,⽅便下⾯的步骤。
利⽤夜神模拟器的⽂件传输功能将证书传到安卓模拟器,需要把证书先放到电脑夜神模拟器共享⽬录,然后把证书拖动到夜神模拟器窗⼝就完成传输了,⽂件会传到模拟器的共享⽬录。
1638433943.png安卓下载
然后打开cmd,进⼊夜神模拟器adb⽬录,这个要看个⼈的安装⽬录,我的电脑是D:\Program Files\Nox\bin
然后在cmd中依次输⼊以下命令就⾏了
进⼊shell
adb shell
获取超级⽤户权限
su
修改system⽬录读写权限
mount -o remount,rw /system
将安卓共享⽬录中的证书⽂件复制到系统证书⽬录中去
cp /sdcard/Pictures/e03d39e3.0 /system/etc/security/cacerts/
开启证书权限
chmod 644 /system/etc/security/cacerts/e03d39e3.0
1638434473(1).jpg
4.设置charles
Charles默认不开启https抓包,所以我们需要进⾏以下设置
⾸先将Charles证书安装到电脑
点击Help > SSL Proxying > Install Charles Root Certificate,在弹出窗⼝中点击“安装证书”,然后选择安装到本地计算机,点击下⼀页,选择将所有证书都放⼊下列存储,选择受信任的根证书颁发机构,确定。
第⼆步开启https代理
点击Proxy > SSL Proxying Setting,勾选Enable SSL Proxying,添加代理域名/端⼝
1638438695(1).jpg 可以直接两个通配符代理所有https请求
image.png
经过这两步操作就可以开始抓包https请求了
5.设置设备代理
安卓模拟器中点击设置打开wifi,长按wifi修改⽹络
1638434657(1).jpg
填⼊charles代理地址后保存即可,可以在Charles中点击Help > SSL Proxying > Install Charlse Root Cetificate on a mobile device or remote browser看到ip地址和端⼝
image.png
全部流程⾛完,可以愉快的抓包了,可以⽤某灵魂软件去试⼀下,好像旧版有些是ssl pinning的,但我在模拟器安装的是3.98.0版本,⽤这个⽅法就可以抓包了。
欢迎技术交流,互相学习⼀起进步!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。