【web逆向】全报文加密及其登录流程的分析案例

aHR0cHM6Ly9oZWFsdGguZWxkZXIuY2NiLmNvbS9zaWduX2luLw
涉及加密库jsencrypt

定位加密点

先看加密的请求和响应:
在这里插入图片描述

全局搜索加密字段jsondata,这种非特定参数的一般一搜一个准,搜到就是断点。起初下的断点没停住,转而从调用栈单步调试来分析,一般情况下就可以走到加密的位置了,结果发现配置了多个拦截器,而这个请求正好没走通过搜索下的断点。
在这里插入图片描述

首先确认加密调用所在的文件app.9ce0f…8be4.js,从网络的发起者和其调用栈里确认一下这个js所处的调用位置,保险从最早进入这个js的调用下断点,也就是doquery这个方法。

在这里插入图片描述

在这里插入图片描述

单步调试注意观察调用栈中帧出入的变化,要在合适的帧上步进关键方法,观察调用栈变化的另一个目的是及时止损,即调用栈如果超出了断点的目标js的范围,就说明错过正确的调试位置了。没出错的话,很快就找到加密的位置,断点位置也就确定了。
在这里插入图片描述

下面就很简单了,步入加密方法中分析加密的方式。
在这里插入图片描述

同样的道理单步进入上一张图中30297行的方法,可以得出分析结果:json数据利用3des ecb加密,其中加密的key是约定长度的随机字串(简单向上审计下这个key即变量n的值生成的函数即可确定生成字串的字符集和base64是一样,因为后期作为key加密时二进制解析用的是base64解码),然后将这个key用rsa算法加密。如此就分别得到了两个加密的参数jsonData和DesKey。
简单记录下该加密库(jsencrypt)下该加密函数(3des)在cyberchef里的烘培料理。
在这里插入图片描述

还有个问题是响应加密,为什么同样给了一个deskey呢,首先这个响应和请求的加密模式大概率一样,即对称加密数据,公钥加密用于加密数据的key。解密的位置也是前端的拦截器里。
在这里插入图片描述

为了确认30316和30317两个方法的具体实现,在这里下断点,这两行代码很明显是解密方法,而前文已经分析了加密的过程,即得解密的加密模式。
tips:调用的方法的对象是m,和请求过程调用加密的对象是一样的,因此在请求过程断点停住时,打印这个对象,并找到对应的方法即可:
在这里插入图片描述

其实前文已经步入加密方法t.c了,加解密方法的具体实现在一个js里,简单翻一下就可以了,无奈前面分析的时候思路被既定的问题卡住了。
那么就得到了(数据的)解密方法t.a和(用于加密数据的对称密钥的)解密方法t.e:
在这里插入图片描述

在这里插入图片描述

注意此处23290行和23292行,实际是为前文提及的rsa加解密实例配置公钥/私钥,但其硬编码的公钥和私钥显然不是一对,即前后端分别掌握一对公钥,用于保证密钥的秘密性。
步入23280行的方法,简单解释下下图13993行的代码,加解密方法都从this,getkey获取的对象里调用,其返回hex编码的加密结果,外层的d是base64的调用。
在这里插入图片描述

步入进行审计即可,如下图,步入方法d后传入的参数e便是上图13993行encrypt方法返回的hex编码的加密结果。再看其方法实现,是通过定义的变量c字符集进行编码,其字符集正好符合base64。
在这里插入图片描述

总结,以上分析得出本系统所加密模式设计如下:
前端硬编码publicKeyA和privateKeyB
后端存储publicKeyB和privateKeyA

1.前端请求

前端参数加密:
jsonData:3des(random(32)->desKeyA,dataA) ;
desKey:rsa(publicKeyA,desKeyA);

2.后端接收请求

后端参数解密:
rsa(privateKeyA,desKey)->desKeyA;
3des(desKeyA,jsonData)->dataA;

3.后端响应请求

后端参数加密:
desMsg:3des(random(32)->desKeyB,dataB) ;
desKey:rsa(publicKeyB,desKeyB);

4.前端接收响应

前端参数解密:
rsa(privateKeyB,desKey)->desKeyB;
3des(desKeyB,desMsg)->dataB;

(后端可能直接传回desmsg和deskey,即3des加密结果和密钥)

登录流程分析

click事件处理,取得登录表单域password值,跟进702行:
在这里插入图片描述

4行queryKey实现了一个接口请求https://health.elder.ccb.com/api/sp/security/newkey?jsonData=Ft4qWHc9Y1t3HTB%2BZVM2wexOibDwkZre&desKey=f2pKDMU3OPsMJ%2FkQTRUVE%2F5EiLZZ6f4olO%2BLanYB%2FPHTBD9sqyZoC2ZL52jEP6XteTiMAEKykE63F9ry85EHgj91gVfd1xXRLiiImSuBPpCjfRoAsakMw%2FB4GHEmsmnC5%2F8Z%2B90js2vzSj1YiWvL5PUPqj%2BX0sFN97mwFF6%2Fldk%3D&_=1691127466956
获取对象形如:
{“id”:“279”,“secKey”:“a09VdERja0dueVBVSWZnWA”,“createTime”:null}
其中jsonData是固定值({“requestPkUser”:“”})的3des加密结果,3des加密的key仍然是随机的32位串,再由硬编码的rsa pub key加密得到deskey
在这里插入图片描述

得到的seckey用于对登录密码的aes/cbc加密,iv是硬编码的。
在这里插入图片描述

 得到一个新的对象

{ “success” : True, “id” : id,“encrypted” : aes(passwd, seckey,iv) }
在这里插入图片描述

这个对象再次被重组名为passwordJson的对象,转字符串作为表单对象中password的新值,最后表单对象由3des加密得到jsondata,3des加密密钥key由rsa加密得到deskey,形如{“jsondata”:”xxx”,”deskey”:”yyy”}的对象用作body请求登录。

在这里插入图片描述

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

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

相关文章

【机器学习1】什么是机器学习机器学习的重要性

什么是机器学习? 简而言之,机器学习就是训练机器去学习。 机器学习作为人工智能(Artificial Intelligence,AI)的一个分支,以其最基本的形式来使用算法通过从数据中获取知识来进行预测。 不同于人类通过分析大量数据手动推导规则和模型,机…

关系型数据库的设计

范式 关系 注意:根据阿里开发规范,不再设置数据库的外键,在应用层保证外键逻辑即可 数据库设计 1:1 1:n 设想学生-班级案例,若在班级中保存所有学生的主键,则表长不好预测,表的数据亢余。 所以是在多的…

【SCSS】网格布局中的动画

效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"container">&l…

BigDecimal

文章目录 BigDecimal 的用处BigDecimal 的大小比较BigDecimal 保留几位小数BigDecimal 的使用注意事项总结 BigDecimal 的用处 《阿里巴巴Java开发手册》中提到&#xff1a;浮点数之间的等值判断&#xff0c;基本数据类型不能用来比较&#xff0c;包装数据类型不能用 equals 来…

机器学习04-数据理解之数据可视化-(基于Pima数据集)

什么是数据可视化? 数据可视化是指通过图表、图形、地图等视觉元素将数据呈现出来的过程。它是将抽象的、复杂的数据转化为直观、易于理解的视觉表达的一种方法。数据可视化的目的是帮助人们更好地理解数据&#xff0c;从中发现模式、趋势、关联和异常&#xff0c;从而作出更明…

Jmeter-获取接口响应头(Response headers)信息进行关联

文章目录 Jmeter-获取接口响应头&#xff08;Response headers&#xff09;信息进行关联使用正则表达式提取器将Set-Cookie的值提取出来在其余接口中关联该提取信息运行查看关联是否成功 Jmeter-获取接口响应头&#xff08;Response headers&#xff09;信息进行关联 获取某一…

MATLAB | 如何绘制这样的描边散点图?

part.-1 前前言 最近略忙可能更新的内容会比较简单&#xff0c;见谅哇&#xff0c;今日更新内容&#xff1a; part.0 前言 看到gzhBYtools科研笔记(推荐大家可以去瞅瞅&#xff0c;有很多有意思的图形的R语言复现&#xff01;&#xff01;)做了这样一张图&#xff1a; 感觉很…

【网络基础实战之路】设计网络划分的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…

Spring Cloud +UniApp 智慧工地云平台源码,智能监控和AI分析系统,危大工程管理、视频监控管理、项目人员管理、绿色施工管理

一套智慧工地云平台源码&#xff0c;PC管理端APP端平板端可视化数据大屏端源码 智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术&#xff0c;通过工地中台、三维建模服务、视频AI分析服务等技术支撑&#xff0c;实现智慧工地高精度动态仿…

字节编码学习

字节编码学习 文章目录 字节编码学习01_字节与ASCII码表02_每个国家都有独特的码表03_国际化UTF-804_编码本和解码本不一致&#xff0c;乱码 01_字节与ASCII码表 public class Demo01 {public static void main(String[] args) {// 计算机的底层全部都是字节 ---- ----// 一个…

Python自动化实战之使用Pytest进行API测试详解

概要 每次手动测试API都需要重复输入相同的数据&#xff0c;而且还需要跑多个测试用例&#xff0c;十分繁琐和无聊。那么&#xff0c;有没有一种方法可以让你更高效地测试API呢&#xff1f;Pytest自动化测试&#xff01;今天&#xff0c;小编将向你介绍如何使用Pytest进行API自…

SpringMVC请求和响应

目录 1、简介 2、数据响应方式 2.1、页面跳转 2.1.1、直接返回字符串 2.1.2、ModelAndView 2.1.3、request域 2.2、回写数据 2.2.1、直接返回字符串 2.2.2、返回对象或集合 3、获得请求数据 3.1、基本类型参数 3.2、获得POJO类型参数 3.3、获得数组类型参数 3.4、…

墨觉Run Plus耳机真的很好嘛?南卡、韶音、墨觉哪个好

随着近年来蓝牙耳机市场的快速变化&#xff0c;耳机的样式也在不断演变&#xff0c;从入耳式发展到无需入耳的骨传导耳机。骨传导耳机因其可以通过骨传导技术进行声音传输&#xff0c;无需贴合耳道即可实现耳机功能&#xff0c;因此备受市场欢迎。尤其是近两年&#xff0c;骨传…

linuxARM裸机学习笔记(6)----UART串口通信和串口格式化函数移植实验

UART串口通信 协议介绍&#xff1a;串口通信协议_ft232和ch340是串口的哪种协议_夜路难行々的博客-CSDN博客 I.MX6U UART UART时钟源选择的是pll3_80m&#xff0c;然后在(bit5:0)设置分频值&#xff0c;设置为1分频 ADBR(bit14) &#xff1a;自动波特率检测使能位&#xff0c…

【C++】类和对象(上)

目录 1. 面向过程和面向对象初步认识 2. 类的引入 3. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7. 类对象模型 8. this指针 8.1 this指针的引出 8.2 this指针的特性 没有坚持的努力&#xff0c;本质上并没有多大意…

Git rebase和merge区别详解

文章目录 变基的基础用法变基过程中的冲突解决冲突后无法push问题更新变基后的代码更有趣的变基用法变基的风险用变基解决变基变基 vs 合并 此文在阅读前需要有一定的git命令基础&#xff0c;若基础尚未掌握&#xff0c;建议先阅读这篇文章Git命令播报详版 在 Git 中整合来自不…

封装动态SQL的插件

最近根据公司的业务需要封装了一个简单的动态SQL的插件&#xff0c;要求是允许用户在页面添加SQL的where条件&#xff0c;然后开发者只需要给某个接口写查询对应的表&#xff0c;参数全部由插件进行拼接完成。下面是最终实现&#xff1a; 开发人员只需要在接口写上下面的查询SQ…

JavaWeb项目工程结构介绍

介绍idea创建Web项目工程下的项目结构&#xff08;新建的web工程&#xff09; 了解目录大致作用 一级目录 :.idea、out、src、web、工程名.iml .idea目录&#xff1a;记录了IntelliJ IDEA 的配置目录&#xff0c;包含项目的配置信息、工程设置、构建配置等。它是用来存储项目…

C++ 派生类成员的标识与访问——作用域分辨符

在派生类中&#xff0c;成员可以按访问属性分为以下四种&#xff1a; &#xff08;1&#xff09;不可访问成员。这是从基类私有成员继承下来的&#xff0c;派生类或是建立派生类对象的模块都无法访问到它们&#xff0c;如果从派生类继续派生新类&#xff0c;也是无法访问的。 &…

Vue系列第七篇:Element UI之el-main,el-table,el-dialog,el-pagination,el-breadcrumb等控件使用

本篇实现主页面功能&#xff0c;包括主页面排版布局&#xff0c;学生管理模块实现&#xff0c;后台接口实现等功能。 目录 1.运行效果 1.1登录页面 1.2主页面 1.3学生管理 - 信息列表 1.4学生管理 - 信息管理 1.5学生管理 - 作业列表 1.6学生管理 - 作业管理 2.前端代码…