用charles或fiddler抓app包的https接口必须要安装ca证书,才能正常抓包,
安卓7之前把ca证书安装到用户证书下即可,但安卓7以上只有系统级证书才能被信任,所以为了能正常抓包,需要把ca证书安装到系统证书下
流程:
- 下载OpenSSL
- 制作证书
- 导入到手机
准备工作:
- 电脑安装了OpenSSL
- 电脑安装了Charles(其他抓包工具也是一样的原理)
- 一台已root手机(模拟器也可以,但部分app会检测)
- 电脑安装adb
下载OpenSSL
根据您电脑的操作系统位数选择对应的版本下载
下载安装OpenSSL详细参照此文章Windows下载及安装OpenSSL_windows安装openssl-CSDN博客
没准备好的网上找吧,很多相关内容
Charles基础配置也到网上找吧,只说抓取https的配置
Proxy > SSL Proxying Settings > add *.* 或者*.443
制作证书
- 导出证书
Help → SSL Proxying → Save Charles Root Certificate...
把证书(.pem格式)导出到本地路径,名称为charles.pem, 并到该路径打开cmd
2.计算hash值并修改名称
openssl x509 -inform PEM -subject_hash_old -in charles.pem
将第一行类似 e9352f7c 的8位的hash值进行复制
重命名证书:
格式 哈希值.数字 , 后缀数字用来区分不同版本
ren charles.pem e9352f7c.0
如果嫌麻烦, 可以直接复制下面的内容到一个文本文件,然后重命名成e9352f7c.0
-----BEGIN CERTIFICATE-----
MIIFiDCCBHCgAwIBAgIGAYDVFN3tMA0GCSqGSIb3DQEBCwUAMIHHMVkwVwYDVQQDDFBDaGFybGVz
IFByb3h5IEN1c3RvbSBSb290IENlcnRpZmljYXRlIChidWlsdCBvbiBERVNLVE9QLUJJTUtEQzEs
IDE4IOS6lOaciCAyMDIyKTEkMCIGA1UECwwbaHR0cDovL2NoYXJsZXNwcm94eS5jb20vc3NsMREw
DwYDVQQKDAhYSzcyIEx0ZDERMA8GA1UEBwwIQXVja2xhbmQxETAPBgNVBAgMCEF1Y2tsYW5kMQsw
CQYDVQQGEwJOWjAgFw0wMDAxMDEwMDAwMDBaGA8yMDUxMDcxNTAyNTIzNlowgccxWTBXBgNVBAMM
UENoYXJsZXMgUHJveHkgQ3VzdG9tIFJvb3QgQ2VydGlmaWNhdGUgKGJ1aWx0IG9uIERFU0tUT1At
QklNS0RDMSwgMTgg5LqU5pyIIDIwMjIpMSQwIgYDVQQLDBtodHRwOi8vY2hhcmxlc3Byb3h5LmNv
bS9zc2wxETAPBgNVBAoMCFhLNzIgTHRkMREwDwYDVQQHDAhBdWNrbGFuZDERMA8GA1UECAwIQXVj
a2xhbmQxCzAJBgNVBAYTAk5aMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjwCpakz1
zRLHxUDeXwLXwpspoU1y7ESpYQndaM1bO7/jj3BXVIOO9sYvmR2J9Dx4TRO03rj1ui3FhPkzQ5rU
QdtktCPd+ci6H4BuNxKB7c/g+fYKXDiHtZppRjyhrwJjv6r4u85RSy1YJrr65cWwB5r0vwETyyXA
LGpvW7gC4Z92eWdg6sAPLO0dYtnWDfr1M4ZlgSbqkb7ZRVqsWQg8Ctzg/UzoNhDCxMuAyt4vSjzT
QUgFxjsC3pBypFo293uIGl0Y8b+3RJPfWOnuvjPyDZCIAMrYfJyGuSTLj/0+APQnfjvbkpx6ZyTw
IiWecm2VlXf7MqcDGHAvIc7KMM5fCQIDAQABo4IBdDCCAXAwDwYDVR0TAQH/BAUwAwEB/zCCASwG
CWCGSAGG+EIBDQSCAR0TggEZVGhpcyBSb290IGNlcnRpZmljYXRlIHdhcyBnZW5lcmF0ZWQgYnkg
Q2hhcmxlcyBQcm94eSBmb3IgU1NMIFByb3h5aW5nLiBJZiB0aGlzIGNlcnRpZmljYXRlIGlzIHBh
cnQgb2YgYSBjZXJ0aWZpY2F0ZSBjaGFpbiwgdGhpcyBtZWFucyB0aGF0IHlvdSdyZSBicm93c2lu
ZyB0aHJvdWdoIENoYXJsZXMgUHJveHkgd2l0aCBTU0wgUHJveHlpbmcgZW5hYmxlZCBmb3IgdGhp
cyB3ZWJzaXRlLiBQbGVhc2Ugc2VlIGh0dHA6Ly9jaGFybGVzcHJveHkuY29tL3NzbCBmb3IgbW9y
ZSBpbmZvcm1hdGlvbi4wDgYDVR0PAQH/BAQDAgIEMB0GA1UdDgQWBBS70gNeLVjm0n7tDmtA9HCu
8mhsVzANBgkqhkiG9w0BAQsFAAOCAQEAZECh8ZPGoqa4L/Sircdgu8ctKcQT4pdoHUqlBFjWMAL6
7QKX6H5JpSxugfVx0kg4iSDW2hqllA4RGwnNI9sPlL7fQfBKVFseaIQ5zJcOPbCI4KRCYyZw/GIh
MQpezdGCHUcCcZkexW+WoGO7keMqVf1QV7fpq8q6wI2+PC+lJoqBmeXrUG4LwFCmRyKosxypKBOT
Y8eqFyXVhRPDptoYW9ZfIeFT8NFCGI3wgS7Yj98w1P54Td78plOdmYzSbq6ezjGRJ5L81BfL4LBr
IjYed7tdVBqWanl18nH3HJz+HPKpcI/KjF2KzjgWghHFU3Q+o0ZgYJTUBhNDO5+hDI42mA==
-----END CERTIFICATE-----
证书导入到手机
执行以下adb命令将证书导入到/system/etc/security/cacerts/
adb root
adb remount # 用root用户重新挂载为rwx权限, 这两步必须在shell外部执行
adb push e9352f7c.0 /sdcard/
adb shell
su
mount -o rw,remount /system
mv /sdcard/e9352f7c.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/e9352f7c.0
注意:如果是模拟器,除了开启root, 可能还需要打开system分区的读写功能, 我试了雷电模拟器6.0.67需要开启,别的模拟器需要自己尝试
雷电模拟器:设置 → 性能设置 → 磁盘共享 → System.vmdk可写入
雷电模拟器:mount: ‘/system‘ not in /proc/mounts
报错:Read-only file system
报错原因:/system 是以只读的形式挂载上来的,所以无论你怎么chmod都无法修改其权限。
解决办法:重新挂载,挂载读写执行权限
gracelte:/ $ su
# 重新挂载/system 文件夹
:/ # mount -o rw,remount /system
mount: '/system' not in /proc/mounts
报错:mount: '/system' not in /proc/mounts
# 在windows窗口运行以下命令,不要进到adb shell 里面运行
D:\platform-tools> adb root
# 解锁分区(需要升级到最新版本adb,才有disable-verity工具)
D:\platform-tools> adb disable-verity
# 重新挂载,没加权限 表示rwx全部挂上
D:\platform-tools> adb remount
雷电9模拟器:
# 在windows窗口运行以下命令,不要进到adb shell 里面运行
D:\platform-tools> adb root
# 雷电模拟器,直接在设置打开磁盘写入功能
# 重新挂载,没加权限 表示rwx全部挂上
D:\platform-tools> adb remount
# 进入adb shell
D:platform-tools>adb shell
2021-03-10 Android '/system' not in /proc/mounts
1.修改chmod '/etc/hosts' to 100777: Read-only file system报错
2.执行mount -o rw,remount -t auto /system还是报错'/system' not in /proc/mounts
3.改为mount -o rw,remount -t auto /
验证成功,之后就可以修改hosts文件权限了
最后
可以到设置中查看是否有对应的证书, 不同手机位置可能不同
miui9开发版: 系统设置 → 更多设置 → 系统安全 → 加密与凭证 → 信任的凭据
雷电模拟器(Android9): 设置 → 安全性和位置信息 → 加密与凭证 → 信任的凭据
参考文章:
给Android7及以上的手机安装系统级证书,实现Fiddler或者其他程序的HTTPS的抓包