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

news2024/11/24 18:55:30

一,校验的原理

下图为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.coloradmin.cn/o/1669873.html

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

相关文章

安科瑞工业IT产品及解决方案—电源不接地,设备外壳接地【监测系统对地绝缘电阻】

低压配电系统分类及接地保护方案 国际电工委员会(iec)对各接地方式供电系统的规定规定:(低压:交流1000V以下) 低压配电接地、接零系统分为IT、TT、TN三种基本形式。TN分为TN-C,TN-S,TN-C-S三种…

网络编程UDP

目录 1.什么是网络编程 1.1发送端和接收端 1.2请求和响应 1.3客户端和服务端 1.4常见的客户端服务端模型 2.Socket套接字 2.1Socket概念 2.2三种Socket套接字分类 3.Java数据报套接字通信模型(UDP) 4.Socket编程注意事项 5.UDP数据报套接字编程…

只需三步,教你轻松搞定内网穿透

最近开发过程中又遇到了需要外网访问内部服务接口的需求,比如调用三方服务的各种回调通知、支付成功回调、大模型回调等都需要外部服务器来访问内部的接口,这里有个问题就是如果我们在本地或者测试环境调试的过程中我们使用的是内网环境,那外…

【数据结构课程学习】:队列学习

🎁个人主页:我们的五年 🔍系列专栏:数据结构课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🚗 1.队列的基本概念&#xff1a…

AI地名故事:笔岗村

笔岗村,实际上是由笔村和宏岗村两个古老的村落合并而成的。南宋度宗元年,也就是公元1265年,笔村开始建立。随着时间的推移,到了宋代后期,宏岗村也相继建立。这两个村落各自承载着丰富的历史和文化,最终在历…

(五)STM32F407 cubemx IIC驱动OLED(2)硬件篇

这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。   废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列系统硬件IIC配…

HTML5 Canvas发光Loading动画源码

源码介绍 之前我们分享过很多基于CSS3的Loading动画效果,相信大家都很喜欢。今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的,整个loading动画是发光3D的视觉效果,HTML5非常强大。 …

ICode国际青少年编程竞赛- Python-5级训练场-带参数函数

ICode国际青少年编程竞赛- Python-5级训练场-带参数函数 1、 def get_item(a):Dev.step(a)Dev.step(-a) get_item(4) Spaceship.step(2) get_item(2) Spaceship.step(3) get_item(5) Spaceship.step(2) get_item(3) Spaceship.step(3) get_item(4)2、 def get_item(a): D…

【JavaEE网络】HTTP/HTTPS协议的工作原理与格式详解

目录 HTTP/HTTPSHTTP是什么理解“应用层协议”理解HTTP协议的工作过程HTTP协议格式 HTTP/HTTPS HTTP是什么 应用层,一方面是需要自定义协议,一方面也会用到一些现成的协议 HTTP及HTTPS是应用层重点协议 使用浏览器,打开网站,这…

QT 项目打包(为了后期远程实验用)

一、环境准备 1、一个项目工程 二、步骤 1、将编译器设置调整为Release模式 二、对项目重新编译构建 三、可以看到工程目录这个文件夹 打开工程目录文件夹的Release文件夹,我的路径如下 四、新建一个文件夹,将上述路径文件夹下的exe文件复制到新的文…

【C语言 | 数据结构】栈

文章目录 前言1、栈1.1栈的概念和定义1.1.2栈的基本概念: 1.2栈的方法(接口)1.3栈的实现方法1.4栈的性质1.5栈的应用1.6栈的结构 2、栈的实现2.1 顺序栈2.1.1 顺序栈的结构体2.1.2 顺序栈的初始化2.1.3 顺序栈的销毁2.1.4 顺序栈的入栈2.1.5 顺序栈的出栈2.1.5 顺序…

万兆POE网络变压器90W的性能和作用

万兆POE网络变压器GX82405SP-90W是一种应用于网络设备的电力供应器件,它结合了数据传输和电力供应功能,可以为PoE(Power over Ethernet)设备提供高功率供电。它的性能和作用主要包括: 1. 高功率供电:万兆P…

MyBatis——在WEB中使用MyBatis(MVC架构模式)

一、在 Web 应用中使用 MyBatis 项目目录结构 pojo package org.qiu.bank.pojo;/*** 账户类,封装账户数据* author 秋玄* version 1.0* package org.qiu.bank.pojo* date 2022-09-27-20:31* since 1.0*/ public class Account {private Long id;private String …

邮件代发邮箱API发送邮件时如何正确使用?

邮件代发API发送邮件如何使用?邮件代发的注意事项? 邮件代发邮箱API作为邮件发送的自动化工具,其正确使用对于提高工作效率、保障信息安全具有重要意义。下面,AokSend就来探讨一下在使用邮件代发邮箱API发送邮件时,应…

[数据集][图像分类]抽烟打电话分类数据集6150张3类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):6150 分类类别数:3 类别名称:["normal","phone&…

【JVM基础篇】双亲委派机制介绍

文章目录 双亲委派机制简介案例:自底向上查找案例:自顶向下加载案例:C类在当前程序的classpath中 双亲委派机制的作用如何指定加载类的类加载器?面试题如果一个类重复出现在三个类加载器的加载位置,应该由谁来加载&…

css backdrop-filter 实现背景滤镜

官方给出的定义是:backdrop-filter属性允许您将图形效果(如模糊或颜色偏移)应用于元素后面的区域。因为它适用于元素后面的所有内容,所以要查看元素或其背景的效果,需要透明或部分透明。 大致分为以下10种&#xff1a…

【基于 PyTorch 的 Python 深度学习】5 机器学习基础(2)

前言 文章性质:学习笔记 📖 学习资料:吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2 主要内容:根据学习资料撰写的学习笔记,该篇主要介绍了如何选择合适的激活函数、损失函数和优化器…

【系统架构师】-案例篇(三)NoSQL与分布式对象调用

1、NoSQL 一个基于Web 2.0的大型社交网络系统。就该系统的数据架构而言,李工决定采用公司熟悉的数据架构,使用通用的商用关系型数据库,系统内部数据采用中央集中方式存储。该系统投入使用后,初期用户数量少,系统运行平…

第二证券|北交所股票散户可以买吗?门槛多少?

北交所股票散户能够买,不过一般来说,北交所股票出资风险比较大,不适合资金实力不雄厚的散户。 北交所买卖权限注册条件:请求注册权限前20个买卖日的证券账户和资金账户内的财物日均不低于50万元,其间不包括经过融资融…