【抓包https请求网络异常/无数据怎么破】

news/2024/12/2 13:30:01/

当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。

当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息。

以“贝壳找房”为例:

图片

Fiddler中看到的请求是这样的:

图片

你可能开始找证书的问题:是不是Fiddler/Charles的证书没有导入的手机中去?配置一遍又一遍,又开始对比web端浏览器的https发现没问题。这时候你可能已经开始怀疑人生了。

那么究竟是不是证书的问题?

没错,就是证书的问题,但跟你想象中的证书有点不同,不是Fiddler内置证书的问题,而是App内置证书的问题 -- SSL Pinning机制

图片

什么是SSL Pinning?

图片

首先,在https的建立连接过程中,当客户端向服务端发送了连接请求后,服务器会发送自己的证书(包括公钥、证书有效期、服务器信息等)给客户端,如果客户端是浏览器,则使用内置的CA证书去校验服务器证书是否一致。

那么为什么Fiddler能够抓的到浏览器的https请求呢?原因就是在于用户可以自由的将第三方的证书导入到浏览器内置的CA证书集中。

图片

明白上述一点之后,我们再回到App客户端,App默认是信任系统(Android or IOS)用户第三方安装的的CA证书集的,有一些App能够通过Fiddler抓到包的原因是因为:我们可以在系统的用户CA证书集中添加Fiddler的证书。这样App就能信任证书是安全的,放心的发送请求了。

图片

但是现在随着系统的更新,Google or Apple认识到安全越来越重要,所以就引入SSL-Pinning技术:开发者预先把证书相关信息预置到App中再打包,这样在https通讯过程中App本地可以与服务器返回的证书可以做对比,如果发现不一致,那么可能就是由于中间人攻击(比如Fiddler/Charles抓包工具),App客户端可以终止https链接。

而在新版本的系统规则中,应用只信任系统默认预置的CA证书,如果是第三方安装的证书(比如Fiddler安装的)则不会信任:

图片

图片

解决方案

图片

上面的都是一些理论方面的内容,到底该如何突破SSL Pinning机制能够抓到App的https请求包呢?

方案一:使用Android7.0以下的系统

目前已验证在Android 7.0或以上的系统有启用了对第三方证书的限制。但是在Android 7.0以下还是依旧可以将Fiddler/Charles的证书安装在用户的CA集中抓取https请求。

方案二:将Fiddler/Chales证书安装到系统默认预置的CA证书区域中

此种办法前提是需要root权限,但是现在很多新款手机获取root权限困难,所以此办法并不推荐。

方案三:反编译APK,修改AndroidManifest.xml文件

  • 有些APK加了壳,需要先进行脱壳处理

  • 再通过apktool等工具进行反编译

  • 在源码的res/xml目录添加network_security_config.xml文件,内容如下:

图片

修改AndroidManifest.xml文件,在application标签中增加:

android:networkSecurityConfig="@xml/network_security_config"

图片

此种方案比较适用于对反编译比较熟练的童靴

方案四:VitualXposed框架+JustTrustMe模块(推荐)

VitualXposed介绍:

Use Xposed with a simple APP, without needing to root, unlock the bootloader, or flash a system image

官网下载地址:https://vxposed.com/


简单来说,VitualXposed可以在不需要设备root的情况下,修改App的行为。此应用的工作原理类似于应用分身功能,会将应用安装到一个虚拟独立的环境当中,其内部会自带一个已经激活了的Xposed工具。

JustTrustMe介绍:

An xposed module that disables SSL certificate checking for the purposes of auditing an app with cert pinning

JustTrustMe是Github上面的一个开源项目,是xposed中的一个模块,用于禁止SSL证书验证。

官方链接:https://github.com/Fuzion24/JustTrustMe

操作流程:
  • 将VitualXposed安装到真机中,点击应用按钮->添加应用,将要调试的App、JustTrustMe.apk进行安装

    图片

  • 打开Xposed,选择左上角导航栏->模块,勾选JustTrustMe

    图片

  • 重启VitualXposed应用,打开贝壳找房,通过Fiddler抓包,可以看到App请求正常,https请求能抓到

    图片

    图片


http://www.ppmy.cn/news/1140121.html

相关文章

【eigen】解决报错 return type of RCmpEQReturnType Eigen::operator== is not ‘bool’

文章目录 1. 发现问题2. GPT 分析问题3. 解决问题 1. 发现问题 在 c 项目中使用了 C 20 编译标准(GCC10),结果 eigen 中出现报错 /usr/include/eigen3/Eigen/src/Cholesky/LDLT.h:372:58: error: return type of ‘const RCmpEQReturnType …

华为OD机考算法题:分班

题目部分 题目分班难度易题目说明幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。 小朋友的编号为整数,与前一位小朋友同班用 Y 表示,不同班用 N 表示…

【星海出品】ansible入门(三) 深入playbook

Ansible playbook常用到模板驱动jinja2 都是python编写的。Jinja2 需要至少 Python 2.4 版本来运行。 jinja2过滤器 Jinja2中的过滤器可以把一个模板表达式转换为另一个.Jinja2附带了很多这样的功能。 jinja2源码 https://github.com/pallets/jinja/blob/main/基本 API 使用 …

数字人直播软件排名推荐,铭顺科技数字人品牌抢占“日不落”流量新技能

在今年的618中,相信大家能明显感受到,现如今已经有越来越多的品牌商都在使用AI营销工具,如AI营销工具、AI电话、AI虚拟主播。据京东战报显示,在今年的618中,使用AI数字人直播比去年双11增幅近5倍。 7*24小时不间断直播…

vue3前端开发-flex布局篇

文章目录 1.传统布局与flex布局优缺点传统布局flex布局建议 2. flex布局原理2.1 布局原理 3. flex常见属性3.1 父项常见属性3.2 子项常见属性 4.案例实战(携程网首页) 1.传统布局与flex布局优缺点 传统布局 兼容性好布局繁琐局限性,不能再移动端很好的布局 flex布…

吃鸡达人必备!超实用干货激爽分享!

大家好!作为一名专业吃鸡行家,今天我将为大家分享一些关于提高游戏战斗力和分享顶级游戏作战干货的秘诀,还有一些方便吃鸡作图、装备皮肤库存展示和查询的技巧! 首先,让我们来介绍一些吃鸡作图工具推荐。无论是新手还是…

华为云云耀云服务器L实例评测|部署私有网盘 Nextcloud

华为云云耀云服务器L实例评测|部署私有网盘 Nextcloud 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 应用场景 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Nextcloud3.1 Nextcloud 介绍3.2 Docker 环境搭建3.3 Nex…

ElasticSearch新增IK扩展词后,让历史数据生效方法

ElasticSearch新增IK扩展词后,让历史数据生效方法 一、前言 ES词库新增一个关键词、同义词、简繁体和停止词之后,发现只有新数据进入到索引才会生效,对于之前已经存储到索引的数据,还是按照之前的方式来做分词,这个问题应该如何…