当前位置: 首页 > news >正文

SSL Pining 问题解决方案

实战案例

为了能够更好的复现 SSL Pining 场景,我们对一个 App(https:app4.scrape.center)进行抓包,这个 App 包含了 SSL Pining 的相关设置,如果我们将手机的代理设置为抓包软件提供的代理服务,那么这个 App 在请求数据的时候检测出证书并不是受信任的证书,从而直接断开连接,不继续请求数据,相应的数据就会加载失败

首先,在手机上安装这个App ,此时手机没有任何代理,可以发现数据是正常加载的

接下来就是抓包了,我们还是以 Charles 为例。打开 Charles ,配置好环境,然后重启手机,打开 app4 会出现 “证书验证失败” 的提示

Charle 配置:

写文章-CSDN创作中心

与此同时,Charles 的抓包结果如下图

可以看到这里报了一个错误

FailureSSL handshake with client failed: An unknown issue occurred processing the certificate (certificate_unknown)

此时如果取消代理,然后重新打开App 就又能加载成功了

以上就是 SSL Pining 导致的抓包失败线下

SSL Pining 技术原理

SSL Pining 是一种防止中间人攻击的技术,只针对 HTTPS 协议。在遵循 HHPS 协议的数据通信过程中,客户端和服务端握手建立信任时,有一步是客户端收到服务器返回的证书,然后对该证书进行校验,如果这个证书不是自己信任的证书,就直接断开连接,不再进行后续的数据传输,这就会导致整个 HTTPS 请求失败

为了更好的理解其中原理,我们在电脑上做一个小实验,打开百度首页,在浏览器左上角看一下证书信息

可以看到颁发者是 GlobalSign RSA OV SSL CA 2018 鉴于其权威性,我们认为其颁发的证书是可信的,接下来我们将电脑的全局代理设置为 Charles , 一般在 Charles 的菜单中可以设置,打开 Proxy-----Windows Proxy , 将此选项勾选上即可

注意: 在设置全局代理之前,需要先在电脑上设置 信任 Charle Proxy CA  这个证书颁发机构(这也是一种证书),具体的设置方法 

写文章-CSDN创作中心

找到证书安装,按步骤进行即可

现在刷新一下百度首页,再次查看证书详情

可以看到,当前的证书颁发者变成了 Charles Proxy CA (13 Aug 2024, DESKTOP-ON5T7S2) ,那么此时电脑要不要信任这个证书呢? 答案是要, 因为我们已经信任了,如果没有设置,那现在访问百度首页会出现 SSL 安全提示。

于是我们可以进一步得出结论,在电脑上设置了信任 Charles Proxy CA 的证书后,如果 PC 使用 Charle 的代理来访问 HTTPS 网站, 所有使用的证书都会变成 Charles Proxy CA 颁发的

电脑上是这样,手机上自然也一样。在抓包之前,我么先在手机上设置信任 Charles 的证书,之后手机上使用Charles 代理访问 HTTPS 网站的时候,所有的网站证书都会是 Charles 颁发的,因为手机信任它,所以手机也就能正常访问 HTTPS 网站了

那么问题来了

我们在开头提到客户端(这里指 APP )在获取证书信息后,是可以对证书做校验的,如果不做校验,那么不会有任何问题,但一旦校验,并发现指纹不匹配,就会直接连接中断,请求自然就失败了

那这个校验的过程怎么实现的呢? 校验证书指纹即可。因为使用代理和不使用代理的证书颁发机构不是一个,所以两个证书的指纹不一样,只要证书的指纹跟指定的指纹不一样,就算校验失败。例如当前证书的指纹

在开发阶段,如果知道服务器返回的证书指纹,是可以提前把证书写死在客户端这边的。客户端获取证书后,对比证书的指纹跟写死的指纹是否一致,如果一致就通过校验,否则不通过,中断后续数据传输

这个过程怎么实现的呢?两种方式

1)  对于 7.0 以上的 Android 系统, SDK 提供了原生的支持。 在 APP  开发阶段,会直接将指纹写死在一个 XML 文件里,然后在 AndroidManifest.xml 文件中添加一个 android:networkSecurityConfig 配置,具体可以参考 Android 官方文档 不过要注意 Android 系统的版本

2)  直接将指纹和校验流程写在 Android 代码里, 现在 Android 的很多 HTTP 请求库是基于 OKHttp 库开发的, OKHttp 的 SDK 就提供了对 SSL Pining 的支持,一般可以在初始化 OKHttpClient 对象的时候添加 certificatePinner 这个选项,将信任的证书指纹写死。当然除了 OKHttp ,其他库也提供类似的支持

第二种方式的适用性更广,不局限与特定的 Android 版本,本节也将基于第二种方式实现

至此 SSL Pining 的技术原理就大概清楚了

绕过

明白了原理,那怎样才能绕过这个技术,解除它的限制呢? 

某些 APP 是使用第一种方式实现 SSL Pining ,这种方式对 Android 版本有要求,所以直接使用 7.0 以下的 Android 系统,即可解除

既然客户端会校验证书,那我们直接 Hook 某些用于校验正是的 API , 不管证书是否可信,都直接返回 True , 从而绕过证书的校验过程。可以使用的 Hook 工具: Xposed  Frida 等

通过反编译的方式还原 App 代码, 修改 AndroidManifest.xml 文件或代码中用于校验证书的逻辑,修改完后重新打包签名。不过由于 App 代码不好完全还原,该方案可行度不高

那么, 第二种方案将是最好的

Frida + DroidSSLUnpining

如果想基于 Frida 实现 Hook ,那么可以结合 DroidSSLUnpining 这个开源库,其 Github 地址是 https://github.com/WooyunDota/DroidSSLUnpinning

下载后解压, 解压之后在  DroidSSLUnpinning-master\ObjectionUnpinningPlus 里面有一个叫 hooks.js 的文件, 后面会用到,也可以使用 git 命令下载

启动前的状态:

模拟器: 在首页,不要打开 App 

Charles : 打开,并确定能够 链接 模拟器或真机

打开CMD

frida : 需要指定传递数据的端口: adb forward tcp:27042 tcp:27042

然后启动server:   adb shell  -----  su --- cd data/local/tmp  --- ./frida-server-16.4.8-android-x86 (server 的名字)

新开一个 cmd 窗口

正常是输入: frida -U -f com.goldze.mvvmhabit -l hooks.js --no-pause

不过好像  --no-pause 命令不能用了,有说要改成 -pause  但是会报错

frida: error: argument -p/--attach-pid: invalid parse_target value: 'ause'

然后改成: frida -U -f com.goldze.mvvmhabit -l hooks.js

如果报错: Failed to spawn: need Gadget to attach on jailed Android; its default location is

则需要改成: 

frida -H 127.0.0.1:27042 -f com.goldze.mvvmhabit -l hooks.js

com.goldze.mvvmhabit : 是包名

hooks.js : 这个也可以是 hooks.js 的路径

27042 : 是前面   adb forward tcp:27042 tcp:27042  里面的

我的到这一步 frida 就成功启动了

模拟器也启动 App 了

Charles 这时候也有数据了

中间遇到的报错处理:

Failed to spawn: connection closed

需要将启动 frida-server 的cmd 关掉重新启动,或者使用 kill 命令杀死这个进程

Waiting for USB device to appear

是你的模拟器或者真机没打开,或者没有跟 frida 链接

Failed to spawn: unable to find process with name 'com.goldze.mvvmhabit

包名写错了,或者是命令没写完整,导致找不到 app 包

相关文章:

SSL Pining 问题解决方案

实战案例 为了能够更好的复现 SSL Pining 场景,我们对一个 App(https:app4.scrape.center)进行抓包,这个 App 包含了 SSL Pining 的相关设置,如果我们将手机的代理设置为抓包软件提供的代理服务,那么这个 …...

【Spring Boot】全局异常处理

目录 背景 前言 设计步骤 1.定义异常信息类: 2.自定义异常: 3.创建全局异常处理类 4.在控制器中抛出异常 5.输出 捕获 Valid 校验异常 背景 去面试的时候被问到SpringBoot项目中,如何处理全局异常的,也就是如何捕获全局异…...

安全基础学习-SM3加密算法

SM3是一种广泛使用在中国国家标准中的哈希算法,全称为“中国国家密码算法SM3”。它由中国国家密码管理局制定,主要用于数字签名和消息完整性验证。SM3算法与SHA-256在结构上类似,但其设计具有特定的改进以增强安全性。 SM3算法生成256位的哈希值,使用了32轮的迭代运算,并…...

MySQL中处理JSON数据:大数据分析的新方向

1. 简介 1.1. 概述 在MySQL中处理JSON数据的能力是在MySQL 5.7版本中引入的,并在后续的版本中不断得到增强。这使得MySQL能够直接操作和查询JSON格式的数据,极大地扩展了其处理复杂数据结构的能力。 1.2. 主要特点 灵活性与可扩展性 :JSON允许开发者存储不规则和嵌套的数…...

K8S 容器调度

在Kubernetes中,容器调度是一个自动化的过程,负责将容器(在Kubernetes中称为Pod)分配到集群中的合适节点上运行。这一过程由Kubernetes的调度器(kube-scheduler)控制,它通过一系列算法和策略来确…...

C++ //练习 17.2 定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。

C Primer&#xff08;第5版&#xff09; 练习 17.2 练习 17.2 定义一个tuple&#xff0c;保存一个string、一个vector和一个pair<string, int>。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**********************…...

外观检测设备真的能提高生产效率吗?

零部件外观检测设备是一种专业的设备&#xff0c;用于对各类零部件的外观进行检测和评估。现代制造业中扮演着重要的角色&#xff0c;能够有效提升产品质量&#xff0c;确保产品符合国家标准和客户需求。 首先&#xff0c;零部件外观检测设备具备高精度和高效率的特点。通过采用…...

ant design pro 中用户的表单如何控制多个角色

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的 看上面的图片 当创建或编辑一个用户时&#xff0c;…...

Prometheus监控系统

目录 1.Prometheus概述 1.1 TSDB时序数据库 1.2 Prometheus 的特点 1.3 Prometheus 的生态组件 1.4 Prometheus 的工作模式&#xff1a; 1.5 Prometheus 的工作流程 1.6 Prometheus 的局限性 2.部署Prometheus 2.1 Prometheust Server 端安装和相关配置 2.2 部署 Expo…...

mq-fanout交换机

交换机 交换机是什么?步骤 交换机本身具备路由功能 消息先发到交换机,交换机在路由到队列,消费者监听队列拿到消息 广播模式是什么 是什么 例如:每个微服务创建队列,订单服务只启动1台,1个消费者,订单 怎么创建 创建一个队列 -交换机里type-选择模式(广播模式) 在交换…...

android13禁用打开wifi ap 热点

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 这个文章介绍的是如何禁止用户打开wifi热点,禁止用户安装app后,打开wifi热点。 2.情况分析 android13 应用层打开wifi AP public void setWifiApEnabled(boolean isEn…...

前端宝典之六:React源码解析之lane模型

本文主要内容&#xff1a; 介绍lane模型 一、 lane模型 lane模型就是react优先级的机制&#xff0c;可以用来 可以表示优先级的不同可能同时存在几个同优先级的更新&#xff0c;所以还得能表示批的概念方便进行优先级相关计算 1、表示优先级不同 lane模型使用31位的二进制…...

邦德咖啡线下门店盛大开业,引领国产健康咖啡新风尚

近日&#xff0c;国内咖啡市场迎来了一股清新的绿色风潮&#xff0c;邦德咖啡线下门店正式拉开帷幕&#xff0c;以其独特的健康理念和创新的产品&#xff0c;誓要成为国产咖啡界的一股强劲力量。 邦德咖啡线下门店以阿卡迪亚绿色为品牌主色调&#xff0c;立志打造国产健康咖啡…...

Elasticsearch + Search UI 构建一个文件搜索引擎

目录 Elasticsearch使用优势App Search Search UI配置engine集中管理配置和提供实用工具函数配置和初始化一个基于Elasticsearch的搜索界面应用程序Search UI 基础用法 好书推荐 Elasticsearch 使用优势 使用ElasticSearch的主要好处在于其强大的全文搜索和实时分析能力。Elas…...

机械学习—零基础学习日志(如何理解概率论2)

全概率公式与贝叶斯公式 上面所提到的公式&#xff0c;可以使用上一篇文章的基本公式推导。 使用到了概率的基本运算公式。 完整的公式展示&#xff1a; 习题练习&#xff1a; 剩余的练习&#xff1a; 第二题解析&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 注意&…...

鸿蒙关于手机全局本地文件读取,写入

一.背景 需求是需要操作用户手机中的文件&#xff0c;不是应用沙箱 二.解决方案 这里要注意的一点拿到fsOpen.path的路径再去进行open文件&#xff0c;因为这里还不知道本地文件路径在哪里&#xff0c;需要选择一下路径再拿到路径去请求 1.这里就是进行两个fs.open&#xf…...

嵌入式企业面试真题

1.C语言中指针数组和数组指针的区别是什么? 答:指针数组是指数组的元素都是指针类型的数组。数组指针是指一个指向数组的指针。指向的是数组第一个元素的地址,每次偏移一个数组的大小。 2.讲一下什么是结构体字节对齐? 答:结构体字节对齐是指当结构体中元素的物理内存大…...

开源一款H5自适应留言表白墙php源码下载

开源一款H5自适应留言表白墙php源码下载&#xff0c;优点就是安装简单&#xff0c;功能实用[滑稽][滑稽] 缺点就是UI简陋&#xff0c;功能稀少 第一张是首页&#xff0c;第二张是查看留言 第三张是留言列表(10秒自动刷新)&#xff0c;第四张是表白墙界面...

jmeter引入jar包的三种方式

示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12&l…...

零基础学习Redis(5) -- redis单线程模型介绍

前面我们提到过&#xff0c;redis是单线程的&#xff0c;这期我们详细介绍一下redis的单线程模型 1. redis单线程模型 redis只使用一个线程处理所有的请求&#xff0c;并不是redis服务器进程内部只有一个线程&#xff0c;其实也存在多个线程&#xff0c;只不过多个线程是在处…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...