Fiddler对安卓高版本进行抓包解决方案以及分析 进阶二
今天是2021年的最后一天了,多分享一些干货吧!看过上一章节教程后会有同学疑惑,我也一步一个脚印的,跟着流程走也设置了代理以及安装了证书,有的同学会发现 为什么手机不能够连接网络了呢?细心一点的同学会发现抓包抓的全部都是http协议的请求,没有一个https协议请求呢?然而有的同学却能够进行正常的抓取app得包呢?
从最最最基本得开始吧,
HTTP 协议发展至今,已经有二十多年的历史,整个发展的趋势主要是两个方向:效率 & 安全。
• 效率方面,从 HTTP1.0 的一次请求一个连接,到 HTTP1.1 的连接复用,到 SPDY/HTTP2 的多路复用,到 QUIC/HTTP3 的基于 UDP 传输,在效率方面越来越高效。
• 安全方面,从 HTTP 的明文,到 HTTP2 强制使用 TLSv1.2,到 QUIC/HTTP3 强制使用 TLSv1.3,越来越注重数据传输的安全性。总而言之,HTTP 协议的发展对,用户是友好的,但是对开发者而言却不那么友善。
• 抓包是每个程序员的必修技能之一,尤其是在接口调试和程序逆向方面具有广阔的用途。但是,随着越来越多的通信协议使用加密的 HTTPS,而且系统层面也开始强制规定使用 HTTPS,抓包似乎是显得越来越难了。
一、抓包原理
几乎所有网络数据的抓包,都是采用中间人的方式(MITM),包括大家常用的 Fiddler、Charles 等知名抓包工具,HttpCanary 同样是使用中间人的方式进行抓包。

从上面这个原理图,可以看出抓包的核心问题主要是两个:
MITM Server 如何伪装成真正的 Server;
MITM Client 如何伪装成真正的 Client;
第一个问题,MITM Server 要成为真正的 Server,必须能够给指定域名签发公钥证书,且公钥证书能够通过系统的安全校验。比如 Client 发送了一条 https://www.baidu.com 的网络请求,MITM Server 要伪装成百度的 Server,必须持有 www.baidu.com 域名的公钥证书并发给 Client,同时还要有与公钥相匹配的私钥。
MITM Server 的处理方式是从第一个 SSL/TLS 握手包 Client Hello 中提取出域名 www.baidu.com,利用应用内置的 CA 证书创建 www.baidu.com 域名的公钥证书和私钥。
创建的公钥证书在 SSL/TLS 握手的过程中发给 Client,Client 收到公钥证书后会由系统会对此证书进行校验,判断是否是百度公司持有的证书,但很明显这个证书是抓包工具伪造的。为了能够让系统校验公钥证书时认为证书是真实有效的,我们需要将抓包应用内置的 CA 证书手动安装到系统中,作为真正的证书发行商(CA),即洗白。这就是为什么,HTTPS 抓包一定要先安装 CA 证书。
第二个问题,MITM Client 伪装成 Client。由于服务器并不会校验 Client(绝大部分情况),所以这个问题一般不会存在。比如 Server 一般不会关心 Client 到底是 Chrome 浏览器还是 IE 浏览器,是 Android App 还是 iOS App。
当然,Server 也是可以校验 Client 的,这个后面分析。
二、Android6.0 及以下系统可以抓包,而 Android7.0 及以上系统不能抓包( 因为Android7.0+ 的版本新增了证书验证,所以 App 内不再像原来一样默认信任用户的证书)
三、解决方案
1、让安卓开发解决,重新打包,对于安卓开发同学来说无非是多加几行代码的事,但是如果要想抓取别人产品的HTTPS包,那这种方式就行不通了。
2、换一部Android6.0以下的手机/用系统6.0一下的模拟器安装app,可以解决这个问题
3、Fiddler + VirtualXposed + JustTrustMe【主要讲解第三种方案】
四、解决过程以及方法
APP内置了对自家证书的校检,因此抓包时,会因为检测到自签名证书而拒绝联网。而Xposed能使用hook的方式来绕过它,所以VirtualXposed是一个免root的不错选择。
首先进入 Github 下载如下两个 Page(实在不行通过app浏览器下载VirtualXposed 以及 JustTrustMe ,很方便)
- VirtualXposed:https://github.com/android-hacker/VirtualXposed
- JustTrustMe:https://github.com/Fuzion24/JustTrustMe


1.使用如下 adb 命令分别安装两个 pages
adb -s C7YVB20413007239 install D:\chomeDow\VirtualXposed_0.18.2.apk
adb -s C7YVB20413007239 install D:\chomeDow\JustTrustMe.apk
2.安装完成进入 VirtualXposed apk 应用,点击 6 个小点进入设置页面

- 3.进入设置页面,点击模块管理,勾选 JustTrustMe(我这里没有找到它,可能是我这个版本不需要在手动选择了,安装之后自动识别到了)重启之后我们重新进去设置页面,添加我们需要抓包的应用即可,我这里选择的钉钉做案例。

4.点击添加应用,选择需要抓包的软件安装:

5.配置 Fiddler 抓包
6.回到 VirtualXposed 上滑解锁,打开我们之前安装的企业微信,则发现 charles 已经成功抓取到钉钉的 HTTPS 的数据包
五、总结概述
总之一句话,如果能给开发商量让开发加几行代码,如果不指望开发那么就自己下载一个模拟器,降低安卓版本,都不想操作就安装 VirtualXposed 能使用hook的方式绕过它。
Fiddler对安卓高版本进行抓包解决方案以及分析 进阶二的更多相关文章
- fiddler的安装以及使用同时对Android 与IOS 抓包配置进行分析 进阶 一
由于工作方向的原因,很久没有用过APP抓包工具了,有那么一天遇到了bug需要协助开发工程师进行定位分析,然后又重新梳理了一下之前常用的抓包工具,这里重点介绍一下目前市面上最流行的几款抓包工具,根据自己 ...
- 使用fiddler对手机上的程序进行抓包
用fiddler对手机上的程序进行抓包,网上有很多的资料,这里写一下来进行备用. 前提: 1.必须确保安装fiddler的电脑和手机在同一个wifi环境下 备注:如果电脑用的是台式机,可以安装一个 ...
- 计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验)
计算机网络实验 Labexercise1-1 Protocol Layers(Wireshark抓包与协议分析实验) 前言:本博客包含Windows10下安装wget.Wireshark. 一些有用的 ...
- Fiddler—PC上实现手机的抓包
PC上安装Fiddler之后,可以抓取各种浏览器的请求,通过一些设置可以获取iPhone.安卓手机.windows phone的请求.具体的工作原理我也不多说(哼,绝对不是因为我不懂XD),主要说下如 ...
- 使用Fiddler调试手机端页面请求/抓包
简介 Fiddler作为一个强大的抓包工具,也是非常强大的http(s)协议分析工具,我们通常用它跟踪请求,PC端使用这里暂不做介绍(这里前提是熟悉PC端的使用),使用很简单. 那么我们如何来用它来跟 ...
- Fiddler——PC上实现手机的抓包(转载 http://www.jianshu.com/p/13f8a81d7c7c)
Fiddler是15年初,在千牛中做超级促销插件时,发现没有root的Android机和没有越狱的iPhone无法修改host,因此没办法测试.为了让我这个磨人的PD也能看到,开发推荐了Fiddler ...
- 使用Fiddler针对Android手机网络请求抓包
本文转载自大牛Trinea的博文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信. ...
- 使用Fiddler完成Android和IOS手机抓包Https
实现原理 Fiddler是PC端有名的HTTP抓包工具,利用它我们可以轻松实现对主机上所有http/https网络请求的捕捉.查看和修改操作. 同时它也提供了代理模式,其它主机由它代理发送的网络请求也 ...
- Fiddler系列教程2:手机抓包图文教程
上篇Fiddler教程,我们教了大家Fiddler安装配置及如何使用Fiddler进行基本的Http抓包及模拟请求,今天给大家介绍下如何使用Fiddler进行手机抓包. 运行环境为Windows 10 ...
随机推荐
- JavaScript中数组的方法和字符串方法总结
数组是首先的一个对象, 可以通过Array构造器创建一个数组,数组方法总结如下 cacat() 链接两个数组 join() 将数组链接成字符串 pop() 删除最后一个元素 shift() 删 ...
- 中小学数学卷子自动生成程序--对G同学的代码分析
前几天,在课程要求下完成了个人项目的项目工程编写,即一个中小学数学卷子自动生成程序. 程序主要功能是用户预设账户登录后可以选择等级进行对应的小中高的数学卷子对应出题生成txt文本. 本文针对partn ...
- 使用SQL的FOR XML PATH('')将字段用逗号隔开
FOR XML PATH('') 将查询结果显示为XML 经常用来将查询结果按逗号分隔后显示至某一字段 select * from Area结果 添加FOR XML PATH('')后 select ...
- findmnt、lsblk、mount 命令查看磁盘、目录挂载、挂载点以及文件系统格式等情况
findmnt 展示出了目标挂载点( TARGET ).源设备( SOURCE ).文件系统类型( FSTYPE )以及相关的挂载选项( OPTIONS ),例如文件系统是否是可读可写或者只读的.根( ...
- Protoc安装
系统:linux 记住,千万别混乱版本,一般protoc可执行文件在/usr/local/bin/或/usr/bin/下 个人这里使用3.13版本示例,下面两部分命令可以写入shell脚本,记住执行要 ...
- fs本地文件系统
node 中有一个内置模块,fs全称flie system 文件系统,可以对本地文件执行增删改查操作(以下为异步相关API) 先引入内置模块 var fs=require('fs') 1,增: w ...
- 在边缘计算场景中使用Dapr
Dapr 是分布式应用程序可移植.事件驱动的运行时, 这里有几个关键字,我们拆开来看一下: 分布式: 代表共享或是分散,在云原生应用上体现为微服务,在边缘计算场景中代表分散的模块,可以做积木式拼接. ...
- 前端性能优化之js,css调用优化
规则1:减少HTTP请求 把多个JS请求合并为一个JS请求,把多个CSS请求合并为一个CSS请求.从而减少从客户端向服务器端的请求数. 规则3:添加Expires头 用http ...
- Java语言学习day30--8月5日
###10String类的其他方法 * A:String类的其他方法 * a: 方法介绍 * int length(): 返回字符串的长度 * String substring(int beginIn ...
- Java高可用集群架构与微服务架构简单分析
序 可能大部分读者都在想,为什么在这以 dubbo.spring cloud 为代表的微服务时代,我要还要整理这种已经"过时"高可用集群架构? 本人工作上大部分团队都是7-15人编 ...