APP反抓包 - 服务端证书验证

案例引入:

app:泡泡聊天

版本:v1.7.4

发送登录请求,抓包发现提示:403 Forbidden

这里就是使用了服务端证书校验,因为charles没有安装证书,所以到达服务器的响应没有通过验证,返回异常。

在这里插入图片描述

美之图:

一,校验逻辑

在安卓开发时,在客户端预设证书(p12/bks),客户端向服务端发送请求时,携带证书信息,在服务端会校验客户端携带过来证书的合法性。

服务端证书的校验逻辑更详细的过程为:

  • 在apk打包时,将 bks 或 p12 格式的证书保存在 assets 或 raw 等目录。

  • 安卓代码,发送请求时 【读取证书文件内容】+ 【证书密码】

    在这里插入图片描述
    在这里插入图片描述

charles想要抓到包,就需要找到集成在app中的bks/p12证书文件+密码,然后在charles中导入证书(bks格式需要转换p12格式),就可以抓到包。

在使用requests发送请求时,也需要携带上证书文件+密码,才可以正常得到响应数据。

注意:有些app,会有双向证书校验,即有客户端证书校验也有服务端证书校验。

**有个疑问:**charles拦截到客户端发送给服务端的证书和密码后,转发不就行了吗!

二,获得证书

**绕过的关键就是得到证书和密码,**可以通过hook keyStore.load() 方法得到,此方法的第一个参数是证书文件的输入流对象,参数2是证书的密码,还可以通过函数内的 this.getType() 得到证书的类型。

在开发时,是将证书文件加载到 InputStream 对象中,后续发送请求时携带。。。

想要获取证书有两种方式:

  • 定位代码,找到加载证书的文件路径,然后去apk中寻找。或者在解压后的apk文件中的assets、raw文件夹中寻找bks、p12文件,不过有些app会对bks、p12文件进行隐藏,改变它们的后缀,使难以找到。

  • 直接Hook证书加载位置,将证书的内容从InputStream写入到自定义文件,实现自动导出**【推荐:更加通用,甚至都不需要任何逆向】。**

2.1 hook导出证书

注意:在手机上一定要先给当前app开启可以操作硬盘的权限(手机的应用信息->权限),否则无法导出证书文件。

推荐使用这种方法,因为KeyStore是系统的包,不会受混淆的影响,因此通用。

Java.perform(function () {
   
    var KeyStore = Java.use("java.security.KeyStore");
    var String = Java.use("java.lang.String");


    KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (inputStream, v2) {
   
        var pwd = String.$new(v2);
        console.log('\n------------')
        console.log("密码:" + pwd, this.getType());

        if (this.getType() === "BKS") {
     // pkcs12
            var myArray = new Array(1024);
            for (var i = 0; i < myArray.length

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】frame与bounds区别

文章目录 前言framebounds两者区别size的区别总结 前言 在学习响应者链的过程中用到了frame与bounds的混用&#xff0c;这两个属性经常出现在我们的开发中&#xff0c;特别撰写一篇博客分析区别 首先&#xff0c;我们来看一下iOS特有的坐标系&#xff0c;在iOS坐标系中以左上…

文档解析与向量化技术加速多模态大模型训练与应用

前言 随着人工智能技术的不断发展&#xff0c;多模态大模型作为一种新型的机器学习技术&#xff0c;逐渐成为人工智能领域的热点话题。多模态大模型能够处理多种媒体数据&#xff0c;如文本、图像、音频和视频等&#xff0c;并通过学习不同模态之间的关联&#xff0c;实现更加…

重生奇迹MU魔法师PK攻略详解

一、加点 力量和智力属性都可以增加命中&#xff0c;但对魔法师来说&#xff0c;力量属性不能增加攻击力&#xff0c;所以不需要点力量。敏捷属性可以提升魔法师的防御力&#xff0c;体力可以增加血量&#xff0c;这里可以选择智力为主&#xff0c;敏捷和体力为辅的加点方式&a…

(五)STM32F407 cubemx IIC驱动OLED(3)软件篇

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

搭建网站式个人网盘-超仿Windows界面

搭建网站式个人网盘-超仿Windows界面 效果图部分源码领取源码下期更新预报 效果图 一款网站式个人网盘源码-Windows界面相等于一个网站式电脑可以放照片&#xff0c;视频-支持在线播放&#xff08;你懂的&#xff09;我觉得式一款很不错的个人网盘提醒&#xff1a;千万不要升级…

Docker学习(带图详细)

一、安装docker 参考官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 查看系统版本 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# [rootlocalhost ~]# uname -a Linux localhost.localdomai…

图生视频,Stable Diffusion WebUI Forge内置SVD了!

在 Stable Diffusion WebUI Forge 版本中内置了一个SVD插件&#xff0c;也就是 Stable Video Diffusion&#xff08;稳定视频扩散&#xff09;&#xff0c;之前我介绍过这个工具的使用方法&#xff1a;图片生成视频&#xff08;独立部署SVD) 但是当时还不能集成到Stable Diffu…

【CSP CCF记录】202012-1 期末预测之安全指数

题目 代码 #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;int sum0;for(int i0;i<n;i){int score0,w0;cin>>score>>w;sumscore*w;}summax(sum,0);cout<<sum;return 0; } 结果

每个开发者都应该拥有的-云服务器!

每个开发者都应该拥有的-云服务器&#xff01; 第一台云服务器ECS言归正传云服务器妙用 每个开发者都该拥有一台云服务器 作为开发者&#xff0c;总是会时不时的跟服务器打交道&#xff0c;不管你是部署应用程序&#xff0c;还是在服务器上面搭建安装基础环境&#xff0c;比如J…

pdf 版面分析与优化策略

1. 简介 版面分析作为RAG的第一步工作&#xff0c;其效果对于下游工作至关重要。 前常见的 PDF 解析方法包括三种 基于规则&#xff1a;根据 PDF 的组织特征确定每个部分的规则&#xff08;风格和内容&#xff09;缺点&#xff1a;不通用&#xff08;PDF格式不固定&#xf…

学校能源消耗监测管理系统,打造智能监测系统

学校能源消耗监测管理系统是一款针对&#xff0c;水、电、煤、气、热等能源的在线监测、分析与处理的系统&#xff0c;为学校管理者提供全面的能源使用情况&#xff0c;为学校管理工作提供了有力的支持。 为什么要建设能源管理系统&#xff1f; 用能需求增加 随着学校的快速…

视频号小店能做吗?聊聊做视频号一年来的感受

大家好&#xff0c;我是电商笨笨熊 做电商这件事&#xff0c;我已经持续了6年多的时间&#xff1b; 面对众多项目&#xff0c;从最初的闲鱼到天猫&#xff0c;再到抖店和视频号小店&#xff1b; 这期间从传统电商到直播电商&#xff0c;也看到了很多玩家的纠结&#xff1b; …

深度学习技术之加宽前馈全连接神经网络

深度学习技术 加宽前馈全连接神经网络1. Functional API 搭建神经网络模型1.1 利用Functional API编写宽深神经网络模型进行手写数字识别1.1.1 导入需要的库1.1.2 加载虹膜&#xff08;Iris&#xff09;数据集1.1.3 分割训练集和测试集1.1.4 定义模型输入层1.1.5 添加隐藏层1.1…

Linux基础之进程-fork()函数的详解

目录 一、前言 二、fork()函数 2.1 fork()函数的基本概念 2.2 问题一的解答 2.3 问题二的解答 2.4 问题三的解答 2.5 问题四的解答 2.6 问题五的解答 一、前言 在上节内容中我们已经学会了使用我们的getpid()和我们的getppid()去查看我们进程的pid&#xff0c;并且学习到…

dockerFile制作镜像、并远程发布

1、FORM 用于指定基础镜像&#xff0c;也就是在指定的镜像上&#xff0c;增加上后续dockerFIle中设置的内容&#xff08;新的软件、新的服务等&#xff09; FROM openjdk:8-jre 在这个容器中&#xff0c;就能直接使用java命令。 2、ENV 用于设置环境变量&#xff0c;在后续的R…

Android Compose 一:基础控件

Flutter 与 Compose 组件辣么像&#xff0c;难道是同一个google团队整的&#xff1b;也未深究&#xff0c;只是猜测。 创建项目 需要使用新版本Android studio&#xff0c;忽略步骤… 项目目录 MainActivity说明 1 系统默认页面 Preview 修饰的方法&#xff0c;只用来供开发…

物联网实战--平台篇之(七)应用界面设计

目录 一、米家APP分析 二、应用展示 三、应用列表 四、新建应用 五、重命名应用 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.…

快速配置 Nginx 来实现 GPT 流式传输

目录 1. Nginx 参考配置2. Nginx 核心参数3. 其他参数 场景&#xff1a;代理 ChatGPT、代理各种 GPT 工具套壳等。 1. Nginx 参考配置 支持 GPT 流式访问的配置如下&#xff0c;请根据实际需求适当取舍即可&#xff1a; server {listen 80;server_name chat.test.com; # 绑…

PCIE协议-2-事务层规范-Message Request Rules-Vendor_Defined Messages

2.2.8.6 厂商定义消息 厂商定义消息允许扩展PCI Express消息功能&#xff0c;可以作为PCI Express规范的一般扩展&#xff0c;也可以是厂商特定的扩展。本节通用地定义了与这些消息相关的规则。 厂商定义消息&#xff08;见表2-25&#xff09;使用图2-28中显示的头标格式。re…