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") {  // pkcs12var myArray = new Array(1024);for (var i = 0; i < myArray.length

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

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

相关文章

flink cdc,读取datetime类型

:flink cdc&#xff0c;读取datetime类型&#xff0c;全都变成了时间戳 Flink CDC读取MySQL的datetime类型时会转换为时间戳的问题&#xff0c;可以通过在Flink CDC任务中添加相应的转换器来解决。具体来说&#xff0c;可以在MySQL数据源的debezium.source.converter配置项中指…

AI仿站源码教程

AI仿站源码教程 随着AI技术的不断发展&#xff0c;仿站技术已经越来越成熟&#xff0c;通过AI一键仿站&#xff0c;开发者们可以更快速、更高效地搭建网站。传统的前端开发过程中&#xff0c;需要大量的手工编码和设计&#xff0c;而AI仿站技术可以通过截图或视频&#xff0c;…

智慧公厕:数据驱动的公共厕所智慧化管理

公共厕所作为城市基础设施的重要组成部分&#xff0c;对于城市居民的生活质量和城市形象有着不可忽视的影响。然而&#xff0c;传统的公共厕所管理模式存在诸多问题&#xff0c;如设施老化、卫生状况不佳等&#xff0c;严重限制了公众对于公共厕所的使用体验。随着大数据和智能…

计算机毕业设计系列~~~基于SSM的宠物销售网站

目录 一、项目介绍 二、开题报告 三、项目截图 一、项目介绍 本项目是一款基于SSM的宠物销售网站&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1. 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2. …

【笔记】从零开始做一个男性人体的流程/躯干篇(补充)

1.做手臂和腿部都记着【关键节点】的重要性

2024年得物搬砖项目:轻松上手的高利润副业选择

越来越多的人都开始将目光转向互联网&#xff0c;无论是商家还是消费者&#xff0c;都已经习惯网上卖货和购买 其实&#xff0c;其主要原因还是因为如今的生活节奏快&#xff0c;现在的消费主力军转移到了90、00后身上。他们往往忙于工作或者是家庭&#xff0c;无暇去逛商场&a…

jQuery-2.鼠标焦点事件、节点操作、遍历元素、效果

鼠标事件 鼠标事件是当用户在文档上移动或单击鼠标时而产生的事件&#xff0c;常用的鼠标事件&#xff1a; 方法 描述 执行时机 click() 触发或将函数绑定到指定元素的click事件 单击鼠标时 mouseover() 触发或将函数绑定到指定元素的mouse over事件 鼠标移过时 mous…

《一“企”谈》∣企企通走进『鹏辉能源』,探索百亿储能上市企业如何实现供应链数字化转型

随着运营模式的升级和市场竞争的加剧&#xff0c;采购数字化已成为企业提升竞争力的关键。通过整合人工智能、大数据、云计算和物联网等先进技术&#xff0c;采购流程正逐步实现智能化、协同化和绿色化&#xff0c;大幅提升采购效率和决策质量。 广州鹏辉能源科技股份有限公司&…

mysql与idea连接

1、安装mysql&#xff0c;确保电脑中有sql数据库&#xff1b; 2、在‘服务’中开启mysql; 3、将mysql-connector-java-8.0.16.jar包放入web/WEB-INF/lib并配置&#xff1b; mysql-connector-java 5及以下&#xff0c;配置的是com.mysql.jdbc.Driver驱动mysql-connector-java 6…

webpack如何自定义一个loader

我们在使用脚手架的搭建项目的时候往往都会帮我们配置好所需的loader&#xff0c;接下来讲一下我们要如何自己写一个loader应用到项目中&#xff08;完整代码在最后&#xff09; 1. 首先搭建一个项目并找到webpack配置文件&#xff08;webpack.config.js&#xff09; 在modul…

免费PDF批量加密工具

最近在找PDF批量加密的软件来着&#xff0c;发现很多都是需要收费的&#xff0c;当然如果平时工作需要用的比较多&#xff0c;支持一下还是ok的&#xff0c;但是多数人还是偶尔用一下所以没有必要买。 工作用的话&#xff0c;一般企业文件、个人隐私资料、重要合同...所有重要文…

RK3568外置RTC芯片PCF8563T(或替代型号)实验

RK3568 外接 PCF8563 RTC Chapter0 RK3568 外接 PCF8563 RTC1 menuconfig中打开pcf8563驱动2 设备树DTS3 修改驱动 Chapter1 【正点原子Linux连载】第三十一章 外置RTC芯片AT8563T实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南第三十一章 外置RTC芯片AT8563T实验3…

炫酷渐变官网源码

炫酷渐变官网源码 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title…

ThreadLocal 源码详解

概述 ThreadLocal是一个java提供的本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射&#xff0c;各个线程之间的变量互不干扰&#xff0c;在高并发场景下&#xff0c;可以实现无状态的调用&#xff0c;特别适用于各个线程依赖不通的变量值完成操作…

PSFR-GAN复现

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言快速开始安装依赖权重下载及复原 训练网络数据集训练脚本 代码详解训练BaseOptio…

NSSCTF | [SWPUCTF 2021 新生赛]caidao

打开题目&#xff0c;只有一个图片&#xff0c;图片中间是一个一句话木马的一部分&#xff0c;意思是服务器可以执行通过POST的请求方式传入参数为wllm的命令&#xff0c;那这就是典型的命令执行&#xff0c;当然&#xff0c;也可以使用蚁剑或者菜刀连接这个木马 一句话木马的…

DOM API

DOM 基本概念 DOM 全称为 Document Object Model&#xff0c;就是文档对象模型。html 的每个标签都可以映射到 js 中的一个对应对象上。 DOM 树 一个页面的结构是一个树形结构, 称为 DOM 树 . 树形结构在数据结构阶段会介绍. 就可以简单理解成类似于 " 家谱 &q…

全场景智能终端RK3288主板在智能垃圾回收项目的应用,支持鸿蒙,支持全国产化

全场景智能终端主板AIoT-3588A推出的智能化垃圾回收项目&#xff0c;旨在解决城市化进程中日益突出的垃圾处理问题。智能垃圾分类箱具备触屏操作、自动称重、分类投放以及电子语音播报提示等多项功能&#xff0c;居民能够经过分类积分卡、手机扫码、人脸识别等多种途径进行投放…

【小笔记】streamlit使用笔记

【小笔记】streamlit使用笔记 1.streamlit是什么&#xff0c;为什么要用它&#xff1f; 一句话&#xff0c;这个东西是一个python的可视化库&#xff0c;当你想要给你的程序添加个web界面&#xff0c;而又不会或不想用前端技术时&#xff0c;你就可以考虑用它。 类似的可视化库…

uni-app(四):原生插件开发(Android)

原生插件开发 原生插件开发module1.创建模块2.解决报错3.修改依赖4.编写插件代码5.添加插件配置6.引入模块7.调用插件代码8.运行 component1.创建模块2.解决报错3.修改依赖4.编写插件代码5.添加插件配置6.引入模块7.调用插件代码8.运行 原生插件开发 主要分为两类扩展: Module:…