Android Https抓包,8.0以上系统也可以

MAC系统下利用 Charles 抓包大家都比较熟悉了,但是在Android 某些系统(AndroidTV)上可能因为无法安装证书,导致常规途径无法抓取https的包,今天给大家介绍下如果有root权限该怎么进行https抓包呢?

答案是直接 push Charles 证书到系统证书安装目录。下面开始讲解如何操作。

前期准备

1.下载 Charles 并进行安装
2.下载 Charles 证书(自行搜索下载),charles-proxy-ssl-proxying-certificate.pem

配置步骤

1) 获取 Charles 证书放置在系统安装证书目录的文件名

openssl x509 -inform PEM -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem | head -1

根据以上命令可以获得类似 34a6819c 的字符串,加上 .0 就是文件名,完整文件名如下:

34a6819c.0

2) root方式连接Android机器,并且 remount

adb connect [ip]
adb root
adb remount

3)将Charles 证书放置于系统安装证书目录

adb push charles-proxy-ssl-proxying-certificate.pem /system/etc/security/cacerts/34a6819c.0

4)修改 Charles 证书权限

chmod 644 /system/etc/security/cacerts/34a6819c.0

权限如下图所示:

image.png

5)重启系统

6)设置代理

adb shell settings put global http_proxy [ip:port]

示例:

adb shell settings put global http_proxy 192.168.1.115:8888

7)打开PC端 Charles 应用,进行 SSL 代理配置

image.png

添加需要抓包的域名

image.png

配置完成就可以进行 https 抓包了

参考

https://www.jianshu.com/p/035f7d7a0f7e

其实在这之前也尝试过不少其他的方案,但有些可行,有些在某些条件下不可行,整体来说不是很好,也记录下之前尝试的方案。

尝试方案

1)下载完Charles证书,拉起证书安装App进行安装

将 Charles 证书放置到sdcard,然后拉起安装

adb shell am start -n com.android.certinstaller/.CertInstallerMain -a android.intent.action.VIEW -t application/x-x509-ca-cert -d file:///sdcard/charles.pem

这种方式因为 certinstaller app没有读取sdcard的权限,一直报 FileNotFoundException,然后猜想应该是没有读取 sdcard 的权限,于是放置到 /sdcard/Android/data/com.android.certinstaller/files/ 目录下面,这个时候可以正常拉起来了,但是点击保存的时候出现问题了,无法保存到 KeyStore 中,这块逻辑放在 Settings.apk 中,应该是被阉割过,宣告失败。

参考:

https://stackoverflow.com/questions/59626101/install-self-signed-certificates-via-adb

2)push 证书到用户证书安装目录(需要root)

adb shell mkdir -p /data/misc/user/0/cacerts-added
adb push certificate.cer /data/misc/user/0/cacerts-added/807e3b02.0

# Maybe these two lines are not strictly necessary...
adb shell chmod 644 /data/misc/user/0/cacerts-added/807e3b02.0
adb shell chown system:system /data/misc/user/0/cacerts-added/807e3b02.0

这种方式在 Android N 以下都可以正常使用,但是在 Android N 之后因为系统更新,不怎么好使,Charles 官网也有说明:

image.png

只有应用配置如上才能实现 https 抓包,但是对于第三方应用就没法处理了,并不是很完美

参考链接:

https://www.tfzx.net/article/994130.html

https://stackoverflow.com/questions/4461360/how-to-install-trusted-ca-certificate-on-android-device

https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

3)通过代码自己安装,不过还没有进行验证

以上就是尝试的方案,虽然失败了,但也算是自己的一种收获,其中还去看过 certInstaller 的源码,也算了解了证书安装的这个过程。

你可能感兴趣的:(Android Https抓包,8.0以上系统也可以)