一般来说在Android7以上的系统版本,系统会严格的区分系统证书和用户证书,而一些安全性较好的apk会禁止在Android7以下的系统版本运行,这就对安全测试的同学们产生了一定障碍。本文会图文介绍在Android7以上导入系统证书实现抓包
以下是本篇文章正文内容
1)已root的Android设备
2)adb
3)burpsuite
将Burp证书设置为Android手机的系统证书一般来说中有两种方法,但是这里需要注意,第一种方法适合Android模拟器用户,而第二种adb方法比较通用,推荐用第二种方法
1)Android挂Burp代理,访问http://burp下载证书,此时,Burp的证书会下载到sdcard/Download/目录中,这个目录是手机浏览器的默认下载目录。
2)使用adb将下载下来的证书push到存有系统证书的目录,详细命令如下:
adb shell
su
mv /sdcard/Download/<cert>.0 /system/etc/security/cacerts/
cd /system/etc/security/cacerts/
chmod 644 <cert>.0
chgrp root <cert>.0
1)打开Proxy下的Options标签行,按照如下所示导出证书
2)更改证书格式:
使用openssl的x509指令进行cer证书转pem证书 和 用md5方式显示pem证书的hash值
openssl x509 -inform DER -in cert.cer -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem
3)把证书push到用户目录中去
(1)User(root后)版本需要先把证书导入到用户目录中,再进入超级管理用户,把这个证书导入到系统证书目录。
输入如下命令
adb shell
su
#挂载system分区,可写一般情况/system分区是只读的,需要挂载为读写。
mount -o rw,remount /system
mv /sdcard/Download/<cert>.0 /system/etc/security/cacerts/
cd /system/etc/security/cacerts/
chmod 644 <cert>.0
chgrp root <cert>.0
(2)Userdebug版本(完全root的开发版本)用户不用有User版本的中转操作,直接adb超级权限就可以导入证书,一般来说各大windows平台的Android模拟器都是Userdebug版本的,具体命令如下:
# 每次开机需要输入一次
adb root
# 每个设备只需输入一次
adb disable-verity
# 每次开机需要输入一次
adb remount
adb push <cert>.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/<cert>.0
adb shell chgrp root /system/etc/security/cacerts/<cert>.0
在Android设备上已经可以抓取成功抓取加密数据包。
中间是遇到一些坑的,以前在Android模拟器上是不需要用Openssl转换证书格式的,但是在真机测试时出现了问题,发现.der证书不太能用,踩了些坑。