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

1.简介

众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用发起的https请求,然后你在Fiddler就会看到一堆200 HTTP Tunnel to xxx.xxx.xxx:443的请求日志,这些都是没有成功抓取的https请求,下面重点介绍一下各种解决方案,相信总有一款解决方案适合你~

在抓包测试中,相信很多人都遇到过 Android 高版本(Android7.0 以上)系统无法抓包的问题。

由于在测试过程中对分析定位问题很不方便,所以就想找开发的同学帮忙,结果开发也说搞不定,那只能自己解决了。

2.现象

Android6.0 及以下系统手机可以抓取https包,而 Android7.0 及以上系统手机不能抓取https包(安装了https证书也不行)。

3.原因

Android7.0+ 的版本新增了证书验证(系统证书),所以 App 内不再像原来一样默认信任用户的证书。

谷歌在安卓7.0修改了安全策略,安卓系统大于7.0时,应用不在信任用户安装的证书文件。用户添加的 CA 证书不能再用于安全连接,对于 https 传输的数据就抓取不到了。

Android 7.0+的版本不能抓包,缘由Android 更新了网络的安全性配置api >24,默认不信任用户导入的CA证书,所以需要配置文件,来信任用户导入的证书。

 如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386     

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337

官方说明文档:[https://developer.android.google.cn/training/articles/security-config.html](https://www.cnblogs.com/du-hong/p/谷歌在安卓7.0修改了安全策略,安卓系统大于7.0时,应用不在信任用户安装的证书文件。用户添加的 CA 证书不能再用于安全连接,对于 https 传输的数据就抓取不到了。Android 7.0+的版本不能抓包,缘由Android 更新了网络的安全性配置api >24,默认不信任用户导入的CA证书,所以需要配置文件,来信任用户导入的证书。 官方说明文档:https://developer.android.google.cn/training/articles/security-config.html)

By default, secure connections (using protocols like TLS and HTTPS) from all apps trust the pre-installed system CAs, and apps targeting Android 6.0 (API level 23) and lower also trust the user-added CA store by default.

果然,在Android 6.0 (API level 23)及以前,APP默认信任系统自带的CA证书以及用于导入的CA证书,Android 6.0 (API level 23)以后,APP默认只信任系统自带的CA证书,对于用户导入的不予理会。

也就是说,关于 [network-security-config],在Android 6.0 (API level 23)及以前默认是这样的:

<base-config cleartextTrafficPermitted="true">
 
    <trust-anchors>
 
        <certificates src="system" />
 
        <certificates src="user" />
 
    </trust-anchors>
 
</base-config>

Android 7.0 (API level 24) 及以后是这样的:

<base-config cleartextTrafficPermitted="true">
 
    <trust-anchors>
 
        <certificates src="system" />
 
    </trust-anchors>
 
</base-config>

同时在上面的链接中,Google也给出了办法,怎么在Android7.0及以后的系统中,让APP信任我们手工导入的CA证书。就是宏哥在后边的5.3小节中介绍的内容。

4.Android 版本越高,HTTPS 报文越难抓

在Android 安装证书,宏哥觉得这个步骤意义不大,根本原因在于:用户自己安装的 CA 证书没有 ROOT 权限。

我们先看一张图,这个是 Android 的证书信任页面:

从上图可以看出,Android 系统把证书信任分为两大块:

  • 系统 CA 证书:基本拥有所有权限

  • 用户 CA 证书:用户自行安装,权限很低

我们自己安装的 Charles 证书都属于用户 CA 证书。除了证书的权限问题,Android 的不同版本对权限的处理规则也不一样:

✅:Android 7.0 以下:信任用户 CA 证书,可以简单的理解为我们安装的证书直接获得 ROOT 权限

✅:Android 7.0 以上, targetSdkVersion < 24:信任用户 CA 证书

❌:Android 7.0 以上, targetSdkVersion >= 24:不信任用户 CA 证书

通过以上的分析,我们可以得出几个让 Android 信任 Fiddler 证书的方案:

1.ROOT

直接 ROOT Android 手机,把 Fiddler证书放到系统证书里,实现证书洗白。

2.准备一个低于 Android 7.0 的手机

Android 7.0 是 2016 年的系统,按照 Android 手机两年一换代一年一更新的速度算,这种手机很难找到了。

3.准备一个 targetSdkVersion < 24 的 APP 安装包

Google Play Store要求今年 8 月之后上线、11 月之后更新的 App 必须升级到 Target API 28,升级说明网址:https://docs.msdk.qq.com/v5/zh-CN/FAQS/fe2df04a168059a153dcd0f18f75d789/b801ba90b273389d8e588d46343efb37.html 。没有办法老大说话了,国内各大应用市场手机APP纷纷响应号召在2019 年统一要求 APP API 版本必须大于 28,这种安装包很难找到了,而且互联网产品迭代这么快,不一定能保证安装包可用。

4.骚操作

正常大道走不通,Android 小道还是有很多的。社区上有各种轮子可以绕开限制,但和 Fiddler 关系不大,宏哥就不展开说了。喜欢折腾的同学可以研究一下。

5.快速解决法

我们既然已经清楚了抓不到包的原因和罪魁祸首了,针对其进行解决即可。

5.1使用低与7.0版本安卓系统

用android 7.0以下系统的设备去装应用,是可以正常抓包,但是一般来说,android 7.0以下不管是真机还是模拟器,运行起来都是比较卡的,能接受不那么流畅体验的用户可以尝试,适合小白型用户使用。

找一个低于 7.0 版本的 Android 设备或者模拟器,即可解决。但是考虑到:治标不治本,公司本身就没有这样的设备,再加上找了几个模拟器,都是 Android7.0 版本的,所以此方案,直接选择放弃。

然后只好再去找开发,开发研究了半天,结果过来告诉我,我的iOS是可以抓包的啊,Android 的就不知道了,一瞬间我都有点想掀桌子了…

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="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>

    </base-config>

</network-security-config>

 说明:certificates说明的src=“system"表示信任系统的CA证书,src=“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() {
    @Override
    public 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抓包。

默认情况下,针对 Android 7.0+ (API level 24+) 的应用不再信任用户或管理员添加的CA证书来进行安全连接。(之前我们其实是将安全证书安装到安卓手机上作为用户信任安全证书,新版本如果APP开启了设置我们的代理请求会被认为是不安全的。) Android的系统证书的存储位置是/system/etc/security/cacerts,证书文件必须是PEM格式,而且文件命名必须符合系统证书规范。

好了,今天时间也不早了,就讲解和分享到这里,感谢你耐心地阅读!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/58106.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于图像形态学处理的停车位检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 图像预处理 4.2. 车辆定位 4.3. 停车位检测 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ......................................…

Python-Python基础综合案例:数据可视化 - 折线图可视化

版本说明 当前版本号[20230729]。 版本修改说明20230729初版 目录 文章目录 版本说明目录知识总览图Python基础综合案例&#xff1a;数据可视化 - 折线图可视化json数据格式什么是jsonjson有什么用json格式数据转化Python数据和Json数据的相互转化 pyecharts模块介绍概况如何…

企业既要用u盘又要防止u盘泄密怎么办?

企业在日常生产生活过程中&#xff0c;使用u盘交换数据是最企业最常用也是最便携的方式&#xff0c;但是在使用u盘的同时&#xff0c;也给企业的数据保密工作带来了很大的挑战&#xff0c;往往很多情况下企业的是通过u盘进行数据泄漏的。很多企业采用一刀切的方式&#xff0c;直…

Flutter环境搭建踩坑集锦

Flutter 背景准备工作先检查一下自己的电脑&#xff0c;看一下是不是满足配置要求下载安装配置环境下载安装JDK下载安装Android studio下载Flutterflutter doctor故障Android license status unknownNetwork resources 故障 后记 背景 发现一个不错的框架Flutter&#xff0c;听…

Dockerfile构建LNMP镜像(yum方式)

目录 Dockerfile构建LNMP镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试&#xff1a; Dockerfile构建LNMP镜像 1、建立工作目录 [roothuyang1 ~]# mkdir lnmp/ [roothuyang1 ~]# cd lnmp/ 2、编写Dockerfile文件 [roothuyang1 …

【第一阶段】kotlin的range表达式

range:范围&#xff1a;从哪里到哪里的意思 in:表示在 !in&#xff1a;表示不在 … :表示range表达式 代码示例&#xff1a; fun main() {var num:Int20if(num in 0..9){println("差劲")}else if(num in 10..59){println("不及格")}else if(num in 60..89…

FFmepg视频解码

1 前言 上一篇文章<FFmpeg下载安装及Windows开发环境设置>介绍了FFmpeg的下载安装及环境配置&#xff0c;本文介绍最简单的FFmpeg视频解码示例。 2 视频解码过程 本文只讨论视频解码。 FFmpeg视频解码的过程比较简单&#xff0c;实际就4步&#xff1a; 打开媒体流获取…

人工智能发展的五个主要技术方向是什么?

人工智能主要分支介绍 通讯、感知与行动是现代人工智能的三个关键能力&#xff0c;在这里我们将根据这些能力/应用对这三个技术领域进行介绍&#xff1a; 计算机视觉(CV) 自然语言处理(NLP) 在 NLP 领域中&#xff0c;将覆盖文本挖掘/分类、机器翻译和语音识别。 机器人 1、…

人工智能与物理学(软体机器人能量角度)的结合思考

前言 好久没有更新我的CSDN博客了&#xff0c;细细数下来已经有了16个月。在本科时期我主要研究嵌入式&#xff0c;研究生阶段对人工智能感兴趣&#xff0c;看了一些这方面的论文和视频&#xff0c;因此用博客记录了一下&#xff0c;后来因为要搞自己的研究方向&#xff0c;就…

vscode 第一个文件夹在上一层文件夹同行,怎么处理

我的是这样的 打开终端特别麻烦 解决方法就是 打开vscode里边的首选项 进入设置 把Compact Folders下边对勾给勾掉

【工具使用】git基础操作1

目录 一.拉取git代码1.首次拉取命令2.使用图形化拉取代码3.Idea 开发工具拉取代码 二.查看当前状态1.查看在你上次提交之后是否有对文件进行再次修改 三.创建分支3.1.创建分支3.2.创建分支并切换至分支3.3.提交分支至远程仓 远程没有自动创建 四.查看分支4.1.查看本地分支 当前…

如何开启一个java微服务工程

安装idea IDEA常用配置和插件&#xff08;包括导入导出&#xff09; https://blog.csdn.net/qq_38586496/article/details/109382560安装配置maven 导入source创建项目 修改项目编码utf-8 File->Settings->Editor->File Encodings 修改项目的jdk maven import引入…

偶数科技发布实时湖仓数据平台Skylab 5.3版本

近日&#xff0c; 偶数发布了最新的实时湖仓数据平台 Skylab 5.3 版本。Skylab包含七大产品&#xff0c;分别为云原生分布式数据库 OushuDB、数据分析与应用平台 Kepler、数据资产管理平台 Orbit、自动化机器学习平台 LittleBoy、数据工厂 Wasp、数据开发与调度平台 Flow、系统…

2023年人工智能技术与智慧城市发展白皮书

人工智能与智慧城市是当前热门的话题和概念&#xff0c;通过将人工智能技术应用在城市管理和服务中&#xff0c;利用自动化、智能化和数据化的方式提高城市运行效率和人民生活质量&#xff0c;最终实现城市发展的智慧化&#xff0c;提升城市居民的幸福感。 AI技术在城市中的应…

《金融数据保护治理白皮书》发布(137页)

温馨提示&#xff1a;文末附完整PDF下载链接 导读 目前业界已出台数据保护方面的治理模型&#xff0c;但围绕金融数据保护治理的实践指导等尚不成熟&#xff0c;本课题围绕数据保护治理的金融实践、发展现状&#xff0c;探索和标准化相关能力要求&#xff0c;归纳总结相关建…

【JAVA】正则表达式是啥?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言正则表达式正则表达式语法正则表达式的特点捕获组实例 前言 如果我们想要判断给定的字符串是否符合正则表达式的过滤逻辑&#xff08;称作“匹配”&#xff09;&#xff0c…

设计模式之中介者模式

中介者模式 用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变他们之间的交互。 电脑主板的功能就类似于一个中介者 经典中介者模式UML 例子 经典的中介者模式 package com.tao.Ya…

485modbus转profinet网关连三菱变频器modbus通讯触摸屏监控

本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式&#xff0c;使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关&#xff0c;用户可以有效地管理和监控设备&#xff0c;从…

2023网络安全学习路线 非常详细 推荐学习

首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习 linux 系统及命令的路上&#xff0c;更多的人会倒在学习语言上&#xff1b; 2、知识点掌握程度不清楚 对于网络安…

zabbix

ZABBIX 安装 Zabbix z-sever yum list | grep nginx # 查看 nginx 版本 &#xff0c;这里使用 1.20 nginx.x86_64 1:1.20.1-10.el7 epel yum install -y nginx# 安装 php https://webtatic.com/packages/php72/ # 源的官…