解决这个问题比较复杂,需要花费大量时间来解决这个问题,如果没有耐心是不能成功的.可以说这里解决的每一步都有坑
在安卓7.0及以上的版本,即使安装了charles证书,也会导致抓取https包失败
如图 https 包出现 unknow 报错
Android6.0网络默认配置:
Android 7.0到 Android 8.1的默认配置:
Android 9及更高版本应用的默认配置:
简单解释一下这几个参数的意思:cleartextTrafficPermitted
是否允许http明文传输certificates src="system"
信任系统证书certificates src="user"
信任用户安装的证书
通过几个版本对比可以看出,从 安卓7.0版本开始系统已经不再信任用户安装的证书,而安卓9.0 后系统默认禁止了http明文传输
上面所说的配置都是在安装包里面没有配置网络的情况下,系统默认的网络配置是这样的,如果有安装包里面的网络配置,那么优先执行安装包里面的网络配置. 即安装包配置的优先级高于系统默认配置
所以解决这个问题的办法,可以修改或添加apk中的网络配置来信任用户安装的证书,然后重新打包签名,这样抓包就不会报错了
1.解包(反编译)
使用 apktool 来进行反编译,不同系统的安装的方法大致相同
反编译
apktool d 安装包名字
这一步可能会遇到各种错误,不过大部分原因都是由于 apktool.jar版本导致的,优先使用最新版本,如果解包失败,那么更换几个apktool.jar的版本
2.修改网络配置文件
在安装包同级目录下会生成一个与安装包名字相同的文件夹,里面就是apk反编译后的内容了,首先在 AndroidManifest.xml 添加网络配置选项
在 application标签中添加配置
android:networkSecurityConfig="@xml/network_security_config"
然后在res/xml/
路径下 新建network_security_config.xml
文件(如果没有对应文件夹可以建立对应文件夹)
文件内容:
3.打包和签名
打包:
apktool b 文件夹名字
打包后的apk存在于dist文件夹下
签名:
签名我这里用的是signapk.jar
使用命令进行签名:
java -jar signapk.jar testkey.x509.pem testkey.pk8 旧安装包 新安装包
之后就可以安装新安装包(签名后的)
再次进行抓包就不会出现问题了
其实不如买一个 安卓7.0以下的手机进行抓包,或者直接使用苹果手机进行抓包
转载自:https://blog.csdn.net/chouzhou9701/article/details/105408761/