app逆向抓包技巧:SSL Pinning检测绕过

本篇博客旨在记录学习过程,不可用于商用等其它途径

场景

charles抓包下,某斑马app在注册时发现点击登录毫无反应,看抓包结果提示SSL handshake with client failed,确定是触发了SSL/TLS Pinning(证书锁定)
在这里插入图片描述
在这里插入图片描述

关闭charles抓包后,再次点击登录可以看到有请求成功
在这里插入图片描述

检测原理

SSL/TLS Pinning(证书锁定),也叫作单向认证,其将服务器提供的SSL/TLS证书内置到移动端开发的App客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。

Android7.0以上的系统版本,应用不再信任用户自己安装的用户证书,一般应用只信任系统预装证书或者是自身的内置证书,导致SSL/TLS Pinning(证书锁定),用charles或者fiddler无法抓取数据包。这种情况下,App会返回网络出错,且无法获取数据的信息,也就出现了上面出现的情况了。

不过在需要查看发包情况时,就需要解决SSL/TLS Pinning了

绕过方式

降低系统版本

使用Android7.0以下的系统版本

将服务器证书添加到系统证书

这个需要能拿到服务器证书(比较麻烦),且要添加进系统级证书中(参考:Windows与Android实现Charles证书设置)。

采用Xposed框架和JustTrustMe模块或者sslunpining模块

这两个模块可以通过Xposed仓库下载或者GITHUB下载导入
GITHUB:JustTrustMe、sslunpining
sslunpining模块为例,开启之后需要重新打开app就能绕过检测了。
在这里插入图片描述

Frida Objection绕过

Objection 是基于 Frida 框架开发的一个工具,它提供了一组便捷的功能和脚本,以简化在移动应用程序中使用 Frida 进行动态分析和漏洞利用的过程。
安装:pip install objection

由于Objection依赖Frida,在运行Objection前需要先运行Frida
启动命令:objection -g 包名 explore
题外话:如果不知道报名,可以打印当前activity的信息查看包名adb shell dumpsys activity | grep packageName
在这里插入图片描述
使用Objection控制app后,输入android sslpinning disable后就可以绕过了。
在这里插入图片描述

题外场景

有些app进入后也会提示网络失败或者内容更新失败,比如某咨询app进去后提示以下信息
在这里插入图片描述
这个时候不能直接定位为被SSL/TLS Pinning检测,需要结合抓包情况分析。根据抓包结果可以确定实际能法宝成功,只是响应结果failed了,实际原因是没有登录服务器没有返回数据,登录后就可以成功拿到数据了。
在这里插入图片描述

而像某新闻app进去页面便是以下情况
在这里插入图片描述

实际上也不是被SSL/TLS Pinning检测了,根据抓包结果分析应该是进入页面前的请求返回的数据拦截了后续的发包请求,这种用上面的绕过方式是解决不了的,需要看它返回的内容根据情况做反检测处理。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot 属性加载机制】

SpringBoot 属性加载 一个 SpringBoot 应用的配置属性可以有多种不同的来源, 比如可以来自操作系统的环境变量, 比如可以来自 application.yaml 文件; 每一种不同的属性来源, 都会被 SpringBoot 封装成一个PropertySource对象, 保存在 Environment 对象的 PropertySources 类型…

数据采集工具之Canal

本文主要介绍canal采集mysql数据的tcp、datahub(kafka)模式如何实现 1、下载canal https://aliyun-datahub.oss-cn-hangzhou.aliyuncs.com/tools/canal.deployer-1.1.5-SNAPSHOT.tar.gz canal的原理类似于mysql的主从复制,canal模拟的是从节点拉取主节点的binlog数…

LeetCode 热题 HOT 100 (015/100)【宇宙最简单版】

【栈】No. 0155 最小栈【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持! …

深入了解核函数:连接机器学习与统计学的桥梁

引言 在机器学习中,支持向量机(SVM)是一种强大的监督学习模型,特别适合处理分类问题。然而,SVM最初被设计用于线性可分的数据集,现实中的数据往往不是线性可分的。为了解决这一问题,我们引入了…

共享之道——享元模式(Python实现)

共享之道——享元模式(Python实现) 大家好,今天我们继续来讲结构型设计模式,上一期我们介绍了外观模式,这一期我们来讲享元模式(Flyweight Pattern)。 享元模式(Flyweight Pattern…

Bitwise 首席投资官:忽略短期的市场波动,关注加密货币的发展前景

原文标题:《The Crypto Market Sell-Off: What Happened and Where We Go From Here》撰文:Matt Hougan,Bitwise 首席投资官编译:Chris,Techub News 加密货币市场在周末经历了大幅下跌。从上周五下午 4 点到周一早上 7…

优质电器/机械岗位推荐:经验不限大厂直招,薪资最高30K!

本周优质电器/机械岗位推荐,涵盖C、自动化、开发、安卓开发、项目管理等岗位,经验不限,更有大厂直招岗位,薪资最高30K!! 抓紧投递,早投早入职! 👇点击职位名称查看详情…

PHP + Laravel + RabbitMQ + Redis 实现消息队列 (三) 消费队列在RabbitMQ和redis中的发布和订阅

发布订阅(Pub/Sub) 对于消息队列传统的模式来说,一个消费者消费一条消息,这条消息被消费之后就不会再次被其它的消费者消费。但是在发布订阅模式中,一条消息是可以被多个消费者消费的,这些消费者其实相当于…

前端构建工具|vite快速入门

认识vite vite组成部分 Vite是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成: 一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。一…

C++——类模板经典案例——自定义通用数组类

案例:自定义数组类 需求: 1,对内置数据及自定义数据类型的数据存储 2,将数组中的数据存储到堆区 3,构造函数中可以存入数组的容量 4,提供对应的拷贝构造函数和运算符重载防止浅拷贝问题的发生 5&#xff0c…

基于Springboot + Vue的宿舍管理系统

前言 文末获取源码数据库 感兴趣的可以先收藏起来,需要学编程的可以给我留言咨询,希望帮助更多的人 精彩专栏推荐订阅 不然下次找不到哟 Java精品毕设原创实战项目 作者的B站地址:程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csd…

vue3+axios请求导出excel文件

在Vue 3中使用axios请求导出Excel文件,可以发送一个GET或POST请求,并设置响应类型为blob或arraybuffer,然后使用new Blob()构造函数创建一个二进制文件,最后使用URL.createObjectURL()生成一个可以下载的链接。 先看代码 import…

Stable Diffusion绘画 | 必备插件安装推荐

新手必备安装的插件推荐如下: 汉化语言包:汉化插件GitHub地址;双语对照插件GitHub地址无边图库:无边图库插件GitHub地址ControlNet:已默认安装 插件安装 最推荐的安装方式:通过「可下载」、「从网址安装…

Qt Modbus 寄存器读写实例

一.线圈状态寄存器读写 项目效果如下 1. 写单个寄存器 MODBUS_API int modbus_write_bit(modbus_t *ctx, int coil_addr, int status); int addrui->spinBoxwirte_addr->value();int dataui->spinBoxwirte_data->value();int ret modbus_write_bit(mb,addr,d…

学习c#-4语句 ,条件,循环

代码: string name "小赵"; //条件判断 if (name "小赵") { Console.WriteLine("我是小赵"); } else { Console.WriteLine("我不是小赵"); } // switch条件判断 switch (name) { case "小…

5.3 匿名函数:Python编程中的隐士大师

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

嵌入式初学-C语言-十七

#接嵌入式初学-C语言-十六# 函数的递归调用 含义: 在一个函数中直接或者间接调用了函数本身,称之为函数的递归调用 // 直接调用a()->a(); // 间接调用a()->b()->a();a()->b()->..->a();递归调用的本质: 本是是一种循环…

【QT】Qt 音视频

Qt 音视频 Qt 音视频1. Qt 音频2. Qt 视频 Qt 音视频 在 Qt 中,音频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只支持播放 wav 格式的音频文件。也就是说如果想要添加音频效果,那么首先需要将非 wav 格式的音频文件转换为 wav 格式。 通…

JavaWeb之servlet关于Ajax实现前后端分离

一、什么是Ajax: AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部…

Nuxt2:强制删除window.__NUXT__中的数据

一、问题描述 在以前的一篇文章《Nuxt3: 强制删除__NUXT_DATA__的一种方式》中曾介绍了在Nuxt3中如何删除存在于页面id为__NUXT_DATA__的script节点中的数据。 此次,Nuxt2与Nuxt3不同在于它的数据是存在于window.__NUXT__,那么该如何处理呢?…