Android系统证书或定制系统解放https抓包
1.App为什么https不能抓包
Google在Android 7.0以后的版本中,添加了"网络安全配置(Network security configuration)"的相关配置项。其旨在增强App的安全性,可以避免TargetSDK版本>=N的App内部网络请求在非测试环境下被恶意抓包。
Network Sercurity Configuration对安全性的保证,主要是通过以下几个途径:
是否允许明文http请求(非https)、https证书(区分系统、用户)信任设置、域名以及App的Debug或Release配置,只有符合Manifest中配置的NetworkConfig字段内容下的条件,才可以进行正常的http请求,如果需要使用Charles、Fiddler等工具进行抓包,也需要利用NetworkConfig来配置可以信任的证书,否则https请求在CONNECT阶段,就会返回错误,同时LogCat会打印出类似以下的错误信息:
Caused by: java.security.cert.CertificateException: xxx.
at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:661)
at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:539)
at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:605)
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:495)
at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:321)
at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:113)
at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:87)
at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:116)
at com.huawei.secure.android.common.ssl.SecureX509TrustManager.checkServerTrusted(:105)
at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:212)
at com.android.org.conscrypt.ConscryptFileDescriptorSocket.verifyCertificateChain(ConscryptFileDescriptorSocket.java:404)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:375)
基本的几个思路
(1).反编译apk,修改NetworkConfig相关的xml文件,让App可以信任用户配置的证书
这个方案局限性比较大,现在很多App都对反编译技术(主要是apktool、jeb、jadx、GDA等常用的反编译工具)进行了防御,有的App使用apktool解包以后,就无法成功打包了,还有的用上了各加固厂商(爱加密、梆梆、腾讯、360、几维等加固厂商)加固加壳等防御/反作弊技术,通用的反编译工具是无法直接获取真正Apk内部的文件。不过如果能够使用apktool成功获得解码后的xml文件,且进行修改后能够重新打包成可以运行的Apk,这样做也是可行的。
(2).使用Hook
使用Xposed、frida等Hook框架在App请求过程中进行Hook,依赖的基础仍然是反编译,且Xposed、frida等Hook框架需要建立在Root后的基础上,成功率比较低,且成本还比较高。
(3).修改Android源码
可试读15%