26 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-上篇( 二 )


4.骚操作
正常大道走不通 , Android 小道还是有很多的 。社区上有各种轮子可以绕开限制,但和 Fiddler 关系不大,宏哥就不展开说了 。喜欢折腾的同学可以研究一下 。
5.快速解决法我们既然已经清楚了抓不到包的原因和罪魁祸首了,针对其进行解决即可 。
5.1使用低与7.0版本安卓系统用android 7.0以下系统的设备去装应用,是可以正常抓包,但是一般来说,android 7.0以下不管是真机还是模拟器,运行起来都是比较卡的,能接受不那么流畅体验的用户可以尝试,适合小白型用户使用 。
找一个低于 7.0 版本的 Android 设备或者模拟器,即可解决 。但是考虑到:治标不治本,公司本身就没有这样的设备,再加上找了几个模拟器,都是 Android7.0 版本的,所以此方案 , 直接选择放弃 。
然后只好再去找开发,开发研究了半天,结果过来告诉我 , 我的iOS是可以抓包的?。珹ndroid 的就不知道了,一瞬间我都有点想掀桌子了…
5.2targetSdkVersion设置为23把应用apk的targetSdkVersion设置为23及以下,也是可以正常抓包 , 但是假如是抓别人的应用,同时别人又做了防止反编译措施的话,这个方案就不适用了 。
5.3设置信任用户证书设置信任用户证书,也就是自定义可信的CA , 这个也是官方网址:https://developer.android.google.cn/training/articles/security-config  给出的解决方案 。具体操作步骤如下:
1.在源码res目录下新建xml目录,增加network_security_config.xml文件(工程名/app/src/main/res/xml/network_security_config.xml),参考官方文档知道network_security_config.xml文件内容为:
<network-security-config><base-config cleartextTrafficPermitted="true"><trust-anchors><certificates src="http://img.zhejianglong.com/231017/1IH1C14-0.jpg" overridePins="true" /><certificates src="http://img.zhejianglong.com/231017/1IH11410-1.jpg" overridePins="true" /></trust-anchors></base-config></network-security-config>说明:certificates说明的src=https://www.huyubaike.com/biancheng/“system"表示信任系统的CA证书,src=https://www.huyubaike.com/biancheng/“user"表示信任用户导入的CA证书
2.修改项目的AndroidManifest.xml文件 , 在application中增加android:networkSecurityConfig="@xml/network_security_config"
<?xml version="1.0" encoding="utf-8"?><manifest ... ><application android:networkSecurityConfig="@xml/network_security_config"... >...</application></manifest>说明:android:networkSecurityConfig的值指向的就是上一步创建的xml文件
3.然后然后重新编译再打包安装apk即可抓包!前提手机已经要安装了fiddler等CA证书哈?。。?
这个方案也是仅适用于有android基础同时懂反编译的人员使用 。这对开发童鞋来说 , 也很方便 。但是,因为测试的是企业微信小程序,想让企业微信的开发人员帮我这么干,简直是白日做梦,更不用说安全等问题…
6.webview抓包失败上面可以解决android原生抓包问题 , 但在android7.0以上的手机,开着网络代理访问不了webview , 若要抓包webview,需要在webview的WebViewClient中 , 将一行代码给注释掉:
super.onReceivedSslError(view, handler, error)这样是为了忽略掉SSL证书错误,因为开启代理后网络会变得不安全,证书会报错误,webview检测到证书错误之后就不请求任何数据 。注释是为了忽略掉父类的处理 , 默认执行下去 。
6.1警告这样的配置操作是敏感且危险的,只能用于测试环境方便抓包,线上包一定注意要恢复配置 。
6.2拓展通过查找资料,还有一个方法,通过重载WebViewClient的onReceivedSslError()函数并在其中执行handler.proceed(),即可忽略SSL证书错误 , 继续加载页面,代码如下:
WebView webview = (WebView) findViewById(R.id.webview);webview.setWebViewClient(new WebViewClient() {@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 不要调用super.onReceivedSslError,因为其包含了一条 handler.cancel(),第一次访问时无法加载,第二次以后可以加载// super.onReceivedSslError(view, handler, error);// 忽略SSL证书错误,继续加载页面handler.proceed();}}7.小结Android证书分为“用户证书”和“系统证书”两种 , 在设置->安全->"查看安全证书"列表中,可以看到“系统”和“用户”两个列表 。用户通过浏览器下载安装或者通过WLAN高级设置安装的证书均为用户证书 。
关于证书的两个注意事项
(1)安装用户证书必须要设置开机密码,而且设置后就不能取消,除非先删掉所有的用户证书 。如果安装为系统证书就不需要设置开机密码,自动化操作时更方便 。(2)Android 7以上版本APP默认不信任用户证书,只信任系统证书,安装为用户证书,对APP的HTTPS抓包会失败 。安装为全局证书才能被所有APP信任,方可进行HTTPS抓包 。

推荐阅读