App 抓包提示网络异常怎么破?

2023-11-11

背景

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

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

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

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

没错,就是证书的问题,但跟你想象中的证书有点不同,不是 Fiddler 内置证书的问题,而是 App 内置证书的问题 -- SSL Pinning 机制(也可称为证书绑定)

什么是 SSL Pinning?

首先,在 https 的建立连接过程中,当浏览器向服务端发送了连接请求后,服务器会发送自己的证书(包括证书有效期、颁发机构等)给浏览器,浏览器首先在本地根证书区域寻找是否有这个服务器证书的 CA 机构的根证书。如果有继续则下一步会进行验证服务器端的证书,如果没有弹出警告。验证通过后经过一系列服务器和客户端的信息交换,双方最终建立了通讯。

那么为什么 Fiddler 能够抓得到浏览器的 https 请求呢?

原因就是在浏览器面前 Fiddler 伪装成一个 https 服务器,用户可以自由的将 Fiddler 的伪装证书导入到浏览器内置的根证书中。此时 Fiddler 作为中间人在真正的服务器面前伪装成浏览器的角色。

明白上述一点之后,我们再回到 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/Charles 证书安装到系统默认预置的 CA 证书区域中

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

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

  • 有些 APK 加了壳,需要先进行脱壳处理
  • 再通过 apktool 等工具进行反编译
  • 在源码的 res/xml 目录添加 network_security_config.xml 文件,内容如下:
  <?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
          <!-- 信任系统预置CA 证书 -->
          <certificates src="system" />
          <!-- 信任用户添加的 CA 证书,Charles 和 Fiddler 抓包工具安装的证书属于此类 -->
          <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>
  • 修改 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>

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

方案四: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 请求能抓到

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

App 抓包提示网络异常怎么破? 的相关文章

  • 如何使用Fiddler监听asp.net开发服务器(即cassini)?

    我正在尝试使用 Fiddler 调试 RESTful WCF 应用程序 我通过 VS IDE 运行我的项目 它在 ASP NET 开发服务器 又名 Cassini 中启动我的应用程序 然后 我启动 Fiddler 并在 请求生成器 选项卡中
  • 更改fiddler代理服务器的用户名和密码[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在使用 Fiddler 设置代理服务器 但在规则菜单下启用 需要代理授权 时 用户名 密码始终为 1 如何更改用户名 密码 我尝试更改 oSession X AutoAuth 用
  • 运行 Fiddler 作为 HTTP 到 HTTPS 反向代理

    我的机器上正在运行一项服务 该服务在 HTTPS 上发布 在 HTTP 上启动似乎有点复杂 某个远程计算机通过 HTTP 对我的计算机执行调用 这不受我的控制 我想对我的服务执行一些非性能关键的测试 看起来最简单的方法是使用有点像 HTTP
  • 获取使用 HttpWebRequest/HttpWebResponse 发出的 HTTP 请求和响应以在 Fiddler 中显示

    有什么方法可以连接 Fiddler 来捕获使用 NET HttpWebRequest 和 HttpWebResponse 发出的请求和响应吗 Fiddler FAQ 给出了这个问题的答案 您本质上是通过 Fiddler 路由 HTTP 流量
  • 如何使用Fiddler监控WCF服务

    我有一个 WCF 服务 它接受复杂类型并返回一些数据 我想使用 Fiddler 来查看对服务的传入请求是什么样的 客户端是 net 控制台应用程序 它使用服务引用代理 Fiddler 可以做到这一点吗 我是这个工具的新手 过去只使用它通过请
  • Fiddler2:解密 HTTPS 流量和到主机的隧道:443

    我使用Fiddler2来分析一些使用https连接的页面 我启用了 HTTPS 解密 但我的日志中仍然看到一些 Tunnel to host 443 条目 我可以在日志中看到解密的 HTTPS 流量 因此我假设解密有效 我认为 打开连接时
  • fiddler 将 https 重定向到本地主机

    我有一个连接到 Azure 中 HTTPS 服务的 iPhone 应用程序 我想通过 Fiddler 将 iPhone 呼叫重定向到http 本地主机 19703 http localhost 19703我在本地计算机上运行相同的服务以进行
  • 如何使用Firebug或其他查看WS/WSS Websocket请求内容?

    有没有办法查看Websocket流量 首次握手时仅可见 Websocket 标头 响应后一切都消失了 Connection Upgrade Sec WebSocket Accept EQqklpK6bzlgAAOL2EFX nx8bEI U
  • 如何在帖子正文到达服务器之前更改帖子正文?

    尝试编写我的第一个小提琴脚本 如何在帖子正文到达服务器之前更改帖子正文 我的意思是 我填写表格 单击提交 然后暂停以更改我想要的内容 最后发送到服务器 我发现这个脚本可以更改响应 但我想更改请求 if oSession HostnameIs
  • windows对微信及小程序抓包:Burp+Fiddler+Proxifier

    本文由掌控安全学院 zbs 投稿 话不多说 直接先上个效果图 新新的版本哈 好好的抓包哈 然后直接说我如何配置的 准备好三个工具 bp fiddler proxifier 也可以用其他的进行代理 bp proxifier正式课件有 fidd
  • 为什么从iis调用XMLRPC时fiddler没有捕获请求?

    我有一个用 NET 编写的 Web 应用程序 它利用 CookComputing XmlRpcV2 进行 xmlrpc 通信 当我在 Visual Studio 2008 中调用单元测试时 fiddler2 成功捕获实际的 xmlrpc 请
  • fiddler可以抓取什么样的流量?

    当我打开fiddler时 可以捕获来自浏览器的http流量 我用 net HttpWebRequest写了一个程序 也可以捕获流量 同样使用 python urllib2 fiddler 捕获 http 流量 当我打开 fiddler 而不
  • Fiddler 4.6 无法连接强 SSL?

    Error Fiddler The connection to
  • Silverlight 请求、失败和 Fiddler

    我有一个发出跨域请求的 Silverlight 应用程序 clientaccesspolicy xml 文件存在于我发出请求的服务器上并且配置正确 我知道它配置正确 因为当我使用该应用程序发出请求时我的机器我收到了没有问题的回复 当大约 3
  • 使用 Fiddler 限制网络速度不起作用

    我面临的问题几乎类似于以下线程 尽管有自定义规则 仍无法使用 fiddler 控制网络带宽 https stackoverflow com questions 20513610 unable to control the network b
  • Fiddler 测试 API Post 传递 [Frombody] 类

    我有一个非常简单的 C APIController 名为 TestController 其 API 方法如下 HttpPost public string HelloWorld FromBody Testing t return t Nam
  • 无法在fiddler中捕获jmeter流量

    我创建了 JMeter 记录 但当我开始测试时 我在 Fiddler 中没有看到任何请求 我改变了 Fiddler 中的端口号为 8080 我在 JMeter 中使用该端口号 Steps 创建线程组 将Http请求添加到线程组并输入URL
  • WCF - 进行多次调用时随机客户端超时

    我有一个WPF客户端通过以下方式请求数据WCF服务托管于IIS 7 服务方法调用存储过程 SQL 2012 using EF检索一些数据 由于需要加载大量数据 因此客户端会多次调用服务方法 以 分解 数据加载并避免大量负载和超时 我们使用生
  • Fiddler 导致我的互联网访问停止工作

    我的计算机上安装了 Windows 8 1 并经常使用 Fiddler 捕获网络流量 然而 最近 当我打开 Fiddler 并让它捕获网络流量时 我的互联网连接中断了 我打开 IE 时收到的错误是 无法显示此页面 在 Chrome 中 我收
  • 有没有办法配置 Fiddler 来拦截来自 Windows 服务的 HTTP 调用?

    我们正在替换使用 VS2005 构建的进行 HTTP GET 调用的旧的 5 年以上 Windows 服务应用程序 有几个因素使这变得困难 例如 Web 服务器位于客户的网络上 我们无法直接连接到它 不幸的是 我们不希望拆除正在运行的系统以

随机推荐

  • 做你自己

    2017 03 06 2017 03 10将彼得 巴菲特的书籍 做你自己 个股神巴菲特送给儿子的人生礼物 读完了 感受颇深 沃伦 巴菲特的名言 出生时嘴里含着的金汤匙 最后可能会变成扎在背上的金匕首 考虑不周的赠与会浇灭一个人的雄心并枯竭他
  • Android update api

    修改公共api后 需要 make update api 比较framework base api 下的current xml跟原始x xml 比如2 2为8 xml 2 3 3为10 xml 同时修改x xml 然后make
  • Windows 0x80190001错误解决

    Windows 0x80190001错误 笔者使用的系统版本为win10 2004 若同学们正在使用的系统为Windows 11 请移步这篇文章 Windows11 0x80190001错误解决 windows出现这样的错误 初步判断为wi
  • numpy的两个属性的详解 →→→→arange()和reshape()

    arange 简单的说就是创建了一个数组 print 默认是一维为数组 np arange 5 参数表示从0到5截至 不包括5 print 自定义起点一维数组 np arange 1 5 参数表示从1到5截至 不包括5 print 自定义起
  • mongodb 关于 整数类型 和 字符串类型 索引的比较

    想看看到底是 整数类型的索引快呢 还是字符串类型的索引快 到底快多少呢 内存分别占多少呢 今天就来测试一下 配置 华硕飞行堡垒6 500G 的 SSD 准备数据 a 是 for 循环的变量 id a name abcdefg a 2千万的数
  • python英寸和厘米互换_将厘米转换为英寸的Python程序

    python英寸和厘米互换 There are many problems where we have to calculate the distance in inches at the end but initially the mea
  • Impala链接报错

    impala集成Kerberos链接报错 操作命令 impala shell i 10 250 122 40 19005 k s e3base Error connecting TTransportException Could not s
  • Windows 编程概述(使用 C++)

    Windows 编程概述 使用 C 1 命令行 控制台 应用程序 2 本机桌面客户端应用程序 3 COM 组件 4 通用 Windows 平台应用程序 5 桌面桥 6 游戏 7 SQL Server 数据库客户端 8 Windows设备驱动
  • Qt:QProcess实现cmd命令,带参数.exe程序

    首先引入都文件 include
  • C#系列-set,

    using System public class cls private int book 定义一个域 也可以叫变量 只是面向对像里都这么叫 使用起来也更加方便 public int Book get Console WriteLine
  • DateTimeFormatter、LocalDateTime 的使用

    由于SimpleDateFormat是线程不安全的 所以在多线程中可以使用线程安全的DateTimeFormatter 代替 SimpleDateFormat 阿里巴巴java开发手册推荐 如果是 JDK8 的应用 可以使用 Instant
  • printk,printf 打印调试

    includelinux kernel h define KERN EMERG lt 0 gt 紧急事件消息 系统崩溃之前提示 表示系统不可用 define KERN ALERT lt 1 gt 报告消息 表示必须立即采取措施 define
  • Docker----DockerSwarm集群环境弹性服务动态扩缩容

    详细内容见 DevOps技术社区文章 Docker DockerSwarm集群环境弹性服务动态扩缩容
  • 新词发现

    新词发现是 NLP 的基础任务之一 通过对已有语料进行挖掘 从中识别出新词 新词发现也可称为未登录词识别 严格来讲 新词是指随时代发展而新出现或旧词新用的词语 同时 我认为特定领域的专有名词也可归属于新词的范畴 何出此言呢 通常我们会很容易
  • osgfbo(六)从pass的角度考虑,改写fbo(二)

    什么是pass 这个问题 看似简单 也让我头疼 看了osgdefered pass定义为osg Camera 杨石兴的osg视频教程定义为osg Group 我认为一个passRoot可以定义为一个Group 包含三部分 到目前pass为止
  • RT-Thread Smart 用户态开发体验

    背景 RT Thread Smart 是基于 RT Thread 操作系统上的混合操作系统 它把应用从内核中独立出来 形成独立的用户态应用程序 并具备独立的地址空间 自 V5 0 0 起 rt smart 分支已合并至 master 分支上
  • QT从入门到放弃------制作QT界面

    QT从入门到放弃 一 制作QT界面 创建工程 点击New Project 依次点击下图的Application QT Widgets Application Choose 根据自己的需求选择工程名和存放路径 路径千万不要有中文 路径千万不要
  • QT从入门到实战x篇_01_如何在qtcreator中创建一个程序?(MSVC编译器)

    1 按照如下顺序选择 我这里没有选择console的是因为我只是自己创建界面 不需要控制台的出现 2 命名及选择地址 选择下一步 3 选择基类 是否需要系统自动生成ui文件 基类中有三种选项分别为QWideget QMainWindow Q
  • Linux三级 学习笔记(二)计算机体系结构与操作系统-操作系统

    1 4 操作系统的基本概念 1 4 1 操作系统的定义和作用 操作系统的作用可以从用户和系统俩个不同角度来看 用户视角 系统视角 1 用户视角 操作系统为用户提供的服务有 程序开发 程序运行 I O设备访问 文件访问 系统资源访问 错误检测
  • App 抓包提示网络异常怎么破?

    背景 当你测试 App 的时候 想要通过 Fiddler Charles 等工具抓包看下 https 请求的数据情况 发现大部分的 App 都提示网络异常 无数据等等信息 以 贝壳找房 为例 Fiddler 中看到的请求是这样的 你可能开始