【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请求登录。

在这里插入图片描述

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

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

相关文章

arm交叉编译lmbench

一、下载lmbench www.bitmover.com/lmbench 官网下载,http://www.bitmover.com/lmbench/lmbench3.tar.gz 我没有下载下来,找的别人的百度云下载 链接: https://pan.baidu.com/s/1tGo1clCqY-jQPN8G1eWSsg 提取码: f6jd 二、修改makefile 修改三个文件…

maven install命令:将包安装在本地仓库,供本地的其它工程或者模块依赖

说明 有时候,自己本地的maven工程依赖于本地的其它工程,或者manven工程中的一个模块依赖于另外的模块,可以执行maven的install命令,将被依赖的包安装在maven本地仓库。 示例 一个工程包含几个模块,模块之间存在依赖…

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

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

8.6 day07 休息+剑指offer

文章目录 06从尾到头打印链表03数组中重复的数字04二维数组中的查找05 替换空格06重建二叉树背英语单词,看了二十页 06从尾到头打印链表 从尾到头遍历链表 方法一就是用栈来辅助,栈的结构是先进后出的,将链表中的元素加入到栈中去&#xff0…

ACL访问控制列表

ACL介绍 acl: 访问控制列表 步骤: 创建一个访问控制规则调用这个规则 ACL的分类和标识 ACL的匹配顺序以及匹配结果 拓扑图 配置 # 首先通过三层交换的实验做一次 ....## 检测ip地址 display ip interface brief## 在交换机2上做配置 [S2]acl name test ?IN…

【Pycharm2022.2.1】python编辑器最新版安装教程(包含2017-2022的所有版本win/mac/linux)

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 永久安装 Pycharm(2017-2022的win/mac/linux所有版本)/ IntelliJ IDEA也可以, 按照本文教程所写的,具体步骤跟着下面的图文教程一步一步来就行,一分钟即可搞定,过…

【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现2D层层叠叠半透明泡泡_Bubbles】

Shader"ShaderToy/Bubbles" {Properties{}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct ap

Pycharm连接服务器

前提:必须为pycharm专业版才能连接到服务器 以下为pycharm2023专业版 一、连接 系统环境 虚拟环境(前提:已安装anaconda) (1) anaconda环境 (2) 自己创建的虚拟环境 这里为envs下的spotr 二、查看连接情况 选择自动上传

Codejock Skin Framework Visual C++ MFC Crack

Codejock Skin Framework Visual C MFC Crack Codejock Visual CMFC皮肤框架为Windows开发人员提供了一种高度复杂的应用程序皮肤框架技术,该技术是在考虑Windows主题(视觉样式)的情况下开发的。只需几行代码就可以实现一个完全主题化的应用程序。 功能概述 Codejoc…

【css】css实现字母大小写转换

text-transform 属性用于指定文本中的大写和小写字母。 uppercase&#xff1a;将字母转为大写lowercase&#xff1a;将字母转为小写capitalize&#xff1a;将每个单词首字母转为大写 代码&#xff1a; <style> p.uppercase {text-transform: uppercase; }p.lowercase …

Android学习之路(1) App工程的项目结构

一、App工程的项目结构 1.项目下面有两个分类 一个是app(代表app模块)&#xff0c;另一个是Gradle Scripts。其中app下面又有3个子目录&#xff0c;其功能说明如下&#xff1a; manifests 子目录下面只有一个XML文件&#xff0c;即AndroidManifest.xmljava子目录&#xff0c;…

Verilator仿真环境搭建

Verilator简介与使用_Hwang_shuo的博客-CSDN博客 Verilator是一种开源的Verilog/SystemVerilog仿真器&#xff0c;可用于编译代码以及代码在线检查&#xff0c;Verilator能够读取Verilog或者SystemVerilog文件&#xff0c;并进行lint checks(基于lint工具的语法检测)&#xff…

uniapp使用阿里图标

效果图&#xff1a; 前言 随着uniApp的深入人心&#xff0c;我司也陆续做了几个使用uniapp做的移动端跨平台软件&#xff0c;在学习使用的过程中深切的感受到了其功能强大和便捷&#xff0c;今日就如何在uniapp项目中使用阿里字体图标的问题为大家献上我的一点心得&#xff0…

HCIP IPV6

一、IPV6升级特点联系和区别 IPV4--->IPV6 1、全球单播地址 ---- IPV4地址下的公有地址 V6下没nat 2、可聚合性&#xff08;IANA组织对全球的地址进行合理分配&#xff09; 3、多宿主---一个物理接口可以同时拥有多个不同网段的IPV6地址&#xff1b;但不同接口不能在…

神码ai伪原创工具【php源码】

大家好&#xff0c;小编为大家解答python炫酷烟花表白源代码的问题。很多人还不知道html代码烟花特效python&#xff0c;现在让我们一起来看看吧&#xff01; 火车头采集ai伪原创插件截图&#xff1a; 目录 前言 环境准备 代码编写 效果展示 前言 Python实现浪漫的烟花特效 现在…

一 关于idea如何在svn进行项目下载并运行成功

安装svn客户端 如图 安装时请选择该选项&#xff08;Will be installed on local hard drive&#xff09;并选择自己想要安装的目录路径 如图 svn安装成功 如图 注意 安装完成后&#xff0c;使用svn进行一次checkout的项目导出完成以上五步时&…

PHP8条件控制语句-PHP8知识详解

我们昨天说了流程控制的结构有顺序结构、选择结构和循环结构。选择结构就是条件结构。 条件控制语句就是对语句中不同条件的值进行判断&#xff0c;进而根据不同的条件执行不同的语句。 在本文中&#xff0c;学习的是if语句、if…else语句、if…elseif语句和switch语句。 1、…

Clash 意外退出后 chrome / google 谷歌 浏览器无法连接互联网

解决方案&#xff1a; 以管理员模式打开命令行&#xff0c;输入&#xff1a;netsh winsock reset &#xff0c;然后重启电脑 如果还不行的话&#xff0c; 在 chromevs中选中 设置>隐私和安全>安全>使用安全 dns> 使用您当前的服务提供商 即可

flask中写一个基础的sqlHelper类

写一个SQLHelper类&#xff1a; from flask_sqlalchemy import SQLAlchemydb SQLAlchemy()class SQLHelper:staticmethoddef add(record):db.session.add(record)return SQLHelper.session_commit()staticmethoddef add_all(records):db.session.add_all(records)return SQLH…

【Spring Cloud 四】Ribbon负载均衡

Ribbon负载均衡 系列文章目录背景一、什么是Ribbon二、为什么要有Ribbon三、使用Ribbon进行负载均衡服务提供者A代码pom文件yml配置文件启动类controller 服务提供者Bpom文件yml配置文件启动类controller 服务消费者pom文件yml文件启动类controller 运行测试 四、Ribbon的负载均…