APP反抓包 - 客户端证书验证

一,校验的原理

下图为HTTP协议的请求过程:传输过程中都是明文数据
在这里插入图片描述

下图为HTTPS协议的请求过程:
在这里插入图片描述

注意:公钥加密的数据只能通过对应的私钥才能解密,就算是进行加密的公钥也不能进行解密。

上述的请求过程看似复杂,实际就是两部分:

  1. 通过公钥与私钥同步对称密钥
  2. 使用对称密钥对传输数据进行加密

加入charles后的流程如下:
在这里插入图片描述

对于HTTP请求,charles不需要做什么配置,即可抓到包。

对于HTTPS请求,charles如果不进行设置,抓到的包是经过了加密的。如果想进行解密,就需要得到对称密钥,而获得对称密钥的方法通过charles抓包是实现不了的。要想获得对称密钥,charles就需要构造自己的公钥和私钥替换服务端的公钥和私钥与客户端发送数据,因此还需要在手机上安装charles的证书/公钥。

对于客户端验证,与HTTPS的请求过程相比,增加了客户端对公钥的判断。在app中会预留一个证书/公钥,这个证书/公钥就会用于判断是否公钥是被信任的。

当charles未解决客户端证书校验时,现象是app中加载不出来信息,charles可以抓到包,响应状态码是200,但就是获取不到最终的结果,报错信息一般和 SSL Pining(证书锁定) 有关。

二,绕过的方法

了解了以上内容,如何进行客户端证书校验的绕过呢?

**本质上是去修改客户端进行证书校验的代码。**在形式上有几种方法:

  1. 可以直接hook某些用于校验证书的API,不管证书是否可信,都直接返回true,从而绕过校验。可以利用Xposed、Fride等工具,基于它们实现hook操作。
  2. 通过反编译的方式还原App代码,修改AndroidManifest.xml文件或者代码中用于校验证书的逻辑,修改后重新打包签名。不过由于App打码不好完全还原,该方法的可行度并不高。

2.1 frida hook

hook的关键是找到验证的函数位置,这个位置搞开发的了解,但我不知道。不过,网上有写好的hook脚本可以拿来直接用,hook脚本有很多,这里介绍两个:

1:https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/

2:https://github.com/WooyunDota/DroidSSLUnpinning/blob/master/ObjectionUnpinningPlus/hooks.js

将里面的内容复制放在一个 hook.js 文件中,运行下面的脚本,即可完成对客户端证书校验的绕过顺利抓取到有效的信息:

frida -U -f APP包名 -l hook.js  

2.2 Xposed + justtrustme.apk

Frida框架是写JavaScript代码,Xposed框架是写Java代码,justtrustme.apk 本质上是xposed的Hook脚本,只不过可以打包安装在手机直接运行。

操作步骤:

  • 安装 Magisk 面具(手机root)
  • 在面具中刷入 LSPosed框架
  • 安装 JustTrustMe
  • 在LSPosed框架中配置并启动 JustTrustMe

2.2.1 Magisk面具

请根据自己手机的机型去root并安装面具,参考链接:

https://www.bilibili.com/video/BV1Ly4y1u7YE/
https://www.bilibili.com/video/BV1er4y1C7wU
https://magiskcn.com/

提示:后续的操作均使用的Magisk面具 24.0 版本。

2.2.2 刷入LSPosed

  • Riru-LSPosed

    - 先刷Riru            https://github.com/RikkaApps/Riru/releases
    - 在刷Riru-LSPosed    https://github.com/LSPosed/LSPosed/releases
    
  • Zygisk-LSPosed(推荐)

    - 刷Zygisk-LSPosed   https://github.com/LSPosed/LSPosed/releases
    

注意:在面具中可以根据是否开启 Zygisk,来切换和生效。
在这里插入图片描述

示例1:红米8A

在这里插入图片描述

在这里插入图片描述

问题:LSPosed无图标

刷入成功后,就可以看到 LSPosed 的图标,如果没有出现的话,就去手机的 /data/adb/lspd/目录下找apk包,然后再点击安装即可。
在这里插入图片描述

问题:LSPosed未激活

正常安装完LSPosed会直接激活,如果LSPosed显示未激活,请点击 图1 中Magisk安装,根据步骤点击安装,之后LSPosed就可以激活了。

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

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

相关文章

【C++】优先级队列与仿函数

🔥个人主页:北辰水墨 🔥专栏:C学习仓 本节内容我们来讲解优先级队列和仿函数。文中会附上优先级队列模拟实现的源码。 注意:本节我会把最大优先级队列和大堆名词混着用,他们两个本质是一样的。 一、priori…

Java并发编程:Thread原理解析和协程介绍

文章目录 一、java中的thread和操作系统中的Thread对应关系二、协程 一、java中的thread和操作系统中的Thread对应关系 在java中用户线程和内核线程是1:1的形式: 其中java层面创建的线程为用户线程,其对应的底层线程为内核线程。 Java生成线程的流程如…

使用GitLab自带的CI/CD功能在本地部署.Net8项目(二)

前置内容: 通过Docker Compose部署GitLab和GitLab Runner(一) 目录 一、创建代码仓库 二、创建GitLabRunner 三、注册Runner 四、配置Runner,绑定宿主Docker 五、创建.Net8WebApi项目进行测试 六、总结 一、创建代码仓库 …

【Redis7】10大数据类型之Stream类型

文章目录 1. Stream简介2. 生产消息命令(XADD)3. 查询相关命令3.1 获取指定范围内的消息(XRANGE)3.2 逆序获取指定范围内的消息(XREVRANGE)3.3 返回消息的数量(XLEN) 4. 删除消息命令(XDEL)5. 截取消息命令(XTRIM)6. 消费消息命令(XREAD)7. 消费者组管理命令7.1 创建消费者组(X…

考研数学|24像张宇那样的题?李林880和李永乐660不够用了?

以前的卷子就不说了,就说说最近的24年的考研数学题 24年考研数学真题评价: 首先数学二在计算量上超过了数学三,尤其是在高等数学的选择题部分,这使得数学二的难度可能略高于数学三,尽管两者之间并没有本质的差异。与…

【基础绘图】 10.饼图

效果图: 主要步骤: 1. 数据准备:自己赋值的随机数 2. 图像绘制:绘制饼图 详细代码:着急的直接拖到最后有完整代码 步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马&#…

java项目之车辆管理系统(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的车辆管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 车辆管理系统的主要使用者分…

【Unity UI系统介绍】

Unity UI系统介绍 想了解更多游戏开发知识,可以扫描下方二维码,免费领取游戏开发4天训练营课程 Unity UI 是 Unity 引擎中的一套用户界面(UI)系统,允许开发者创建和管理游戏的用户界面。 Canvas:Canvas 是 Unity UI 的核心组件…

零基础又怎样?教你这样高效拿下HCIE!

HCIE认证是网络技术领域内权威的认证之一,对于零基础的学员来说,这似乎是一项几乎不可能完成的任务,很多人想转行都望而却步。 然而,只要策略得当,零基础的学员同样可以高效地迈向HCIE的殿堂。 今天就聊聊&#xff0…

CAD绘制3维场景图记录

文章目录 1.给三维体每个面上不同的颜色1.1 软件设置1.2 着色面 2.在长方体上画圆柱体 1.给三维体每个面上不同的颜色 1.1 软件设置 这里必须改为真实,否则之后的面上色只能显示更改了线条颜色 1.2 着色面 如果你菜单栏没有显示,在上面小倒三角那里…

windows@注册表介绍@注册表的查看和编辑操作

文章目录 abstractrefs注册表的主要组件包括根键极其缩写名称👺子键特性 查看注册表👺使用powershell查看路径下的子路径声明概念Get-ChildItem查看注册表路径下的项Set-Location进入注册表路径举例说明查看文件系统某个路径下的项查看某个注册表路径的项…

图和网络笔记

文章目录 1. A X 0 AX0 AX02. A T Y 0 A^TY0 ATY03. A X 0 AX0 AX0和 A T Y 0 A^TY0 ATY0的关系 1. A X 0 AX0 AX0 一个图可以由节点和边组成,假设我们有一个节点notes :n4,边edges:m5的有向图,表示如下 通过以上电路…

Pycharm使用Anaconda虚拟环境

一、前置 安装 Pychram安装 Anaconda,并配置虚拟环境 参考: Anaconda虚拟环境 anaconda虚拟环境pytorch安装 二、在Pycharm中使用Anaconda的虚拟环境 打开 Pycharm的命令行可以看到 Anaconda 的虚拟环境已经启动。 三、问题集合 (1&…

多模态产品在智能文档处理应用的展望------以TextIn模型为例

前言发展现状TextIn 文档解析技术文本向量化展望合合信息 前言 第十四届视觉与学习青年学者研讨会(VALSE 2024)于5月5日-7日在山城重庆渝北区悦来国际会议中心举办。大会聚焦计算机视觉、模式识别、多媒体和机器学习等领域的国际前沿和热点方向。大会中,合合信息智能…

限流算法(令牌桶漏桶计数器)

📝个人主页:五敷有你 🔥系列专栏:Spring⛺️稳中求进,晒太阳 业务重的三种情况:突发流量、恶意流量、业务本身需要 限流: 是为了保护自身系统和下游系统不被高并发流量冲垮,导致系统雪崩…

数据中心--AI时代的“炼油厂”

数据中心正在成为AI时代的“炼油厂”! 众所周知,AI的高歌猛进催生了对数据的海量处理需求。为了满足蓬勃的算力需求,全球开启了新一轮的数据中心建设热潮,数据中心业务正在以指数级的速度疯狂扩张。 此番情景,和第二…

Git系列:git grep 被忽视的操作细节

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

java面试题(常见集合)

算法复杂度分析 时间复杂度分析 时间复杂度分析:来评估代码的执行耗时的 大O表示法:不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势 空间复杂度 空间复杂度的全称是渐进空间复杂度,表示算法占用…

webpack5以下的项目,前端引入node的path模块需要额外配置

webpack5以下的项目,前端import * as path from path时需要额外配置,这里以vue.config.js为例 刚开始引入时报错 其实就是在打包前端项目的时候,将path模块替换成 path-browserify 模块,所以还需要安装 path-browserfify 模块 …

【Linux】磁盘文件

思维导图 学习目标 了解磁盘的物理结构和存储结构,并将其存储结构进行抽象!! 一、了解一下磁盘及其物理结构 1.1 计算机只认识二进制 什么是二进制??0,1是被规定出来的,在计算机里面我们用高低…