目录
前言
众所周知,Android7.0以后系统不再信任用户的证书.这一改动使得我们在抓包的时候产生了诸多不便。
解决方法:
通过将证书移动至系统证书目录,来解决不信任证书造成的无法抓包问题。
(1). 导出证书
这里根据你的抓包工具来自行导出,但是你需要注意的是,现阶段的Android有效时间超过两年的证书。所以你导出的来的证书最好有效期不要超过这个时长,以避免不必要的麻烦。
(2).转换证书格式
使用OpenSSL对cer证书进行格式转换,变为pem格式
openssl x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.pem
注意自己替换证书路径
在转换成pem格式后查看证书的hash值
复制代码 隐藏代码
openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem
记住hash值,这个hash值就是最后转换出来的文件的文件名。
此时我们直接将转换好的pem证书进行重命名即可,如果你想用命令的话,Windows下可以用ren命令
ren FiddlerRoot.pem e5c3944b.0
如果你在Linux操作或者Android中使用终端模拟器的话就用mv命令
最后你将获得一个e5c3944b.0文件
(3).推送证书
将转换好的证书推送到Android的 /system/etc/security 目录下并赋予文件可读权限即可,这个目录就是系统证书的目录。
推送方法1:使用adb进行推送
首先Android端打开adb调试,这里我是用的网络调试,也可以自己接线,如果是模拟器的话,也可以用模拟器的办法连接模拟器的adb。
PC端使用adb命令连接设备
首先与设备进行配对
adb pair 192.168.2.43:41053
随后连接设备
adb connect 192.168.2.43:37877
最后进入shell环境
adb shell
注意上面连接设备时输入的ip和端口,是与设备截图中一一对应的。
连接好设备后,来到目标目录
cd /system/etc/security
注意这里的目录权限,是755
而我们想要往目录中存放文件需要写的权限,此处采用adb临时赋予777
权限
chmod 777 cacerts
这里可能会失败,由于我是真机且已经获取了root,所以直接su
获取权限给目录加上了777
如果你是带root的模拟器,一般不需要专门su获取权限
如果碰到==提示Read-only file system==,可以使用mount -o remount,rw /system
,将系统文件夹挂载为可读写。然后再用chmod赋予777权限。
修改好权限后,输入exit
退出shell(如果你su了需要两次exit才能退出)。再用adb命令来推送证书文件
adb push E:\Desktop\e5c3944b.0 /system/etc/security/cacerts
这里的证书文件目录记得自己替换
如果你是模拟器的话,经过上边的操作应该已经推送成功了,不过我这里是真机所以无法直接推送到/system下,所以我这里稍微绕一下,先推送到手机内存中,然后再进入shell转移到cacerts目录下
adb push E:\Desktop\e5c3944b.0 /sdcard/
su
mv /sdcard/e5c3944b.0 /system/etc/security/cacerts
这里还要检查下你把文件推送过去,一定要给读的权限,不然在已信任的证书中是看不到这个证书的
chmod 666 e5c3944b.0
同样是真机的话记得推送完文件以后把目录的权限改回755
推送方法2:Root权限直接转移
既然你已经有了root权限,完全可以通过软件直接在Android端直接进行转移
图示为使用MT管理器直接将证书移动到系统证书目录中
总结:
不管你用什么办法,只要把证书文件移动到/system/etc/security/cacerts
这个目录下,并赋予证书文件可读的权限即可.