某网站DES加密逆向分析实战
文章目录
- 一、抓包分析
- 二、加密分析
- 一、重写加密
一、抓包分析
分析站点:
aHR0cDovL2VpcC5jaGFuZmluZS5jb20v
首先我们提交一下登陆信息:

搜索j_password查看加密函数:

把上图搜索到的encryptPassword函数拿出来分析一下:
function encryptPassword(){ document.forms[0].j_password.value = desEncrypt(document.forms[0].j_password.value);
}
- 根据desEncrypt函数名推测是DES的对称加密方式
- desEncrypt函数参数是用户填写的,加密函数只需要一个参数
二、加密分析
我们根据断点提示进入desEncrypt函数:

代码如下:
function desEncrypt(value, xForm, type) {if (_0(xForm)) {return value} else {var keyObj = {};if (type == null || "aes" == type.toLowerCase()) {keyObj = SECURITYKEY.get();value = CryptoJS.AES.encrypt(value, CryptoJS.enc.Utf8.parse(keyObj.key), {iv: CryptoJS.enc.Utf8.parse(keyObj.iv)}).toString()} else {keyObj = SECURITYKEY.get('des');value = CryptoJS.DES.encrypt(value, CryptoJS.enc.Hex.parse(keyObj.key), {iv: CryptoJS.enc.Hex.parse(keyObj.iv)})}return keyObj.security + value}
}
一看确定是DES加密方式,通过分析上面的代码可知,在里面只使用了第一个参数即value,xForm和type都没有使用,根据上面代码逻辑分析,只需要把上面的代码进行改写成需要的即可
虽然我们只需要传一个密码明文,但是在上面加密函数里面还需要keyObj.key和keyObj.iv两个参数,而这两个参数值皆来源于keyObj,即SECURITYKEY.get()
在上面代码的上文中找SECURITYKEY.get()相关的代码如下所示:
_2: function() {$.ajax({async: false,dataType: "script",url: Com_Parameter.ResPath + "js/session.jsp?_=" + new Date().getTime()});var str = "";if (window.getSessionId) {str = getSessionId()}return str},supportEncodings: function() {return ["aes", "des"]},get: function(encodeType) {var str = SECURITYKEY._2();if (encodeType == null || encodeType == 'aes') {if (str.length < 32) {str += "abcdefghijklmnopqrstuvwxyz1234567890"}str = str.toUpperCase();var key = {};key.key = str.substring(0, 16);key.iv = str.substring(16, 32);key.security = "\u4435\u5320\u4d35"} else {if (str.length < 16) {str += "abcdefghijklmnopqrstuvwxyz"}str = str.toUpperCase();var key = {};key.key = SECURITYKEY.toHexString(str.substring(0, 8));key.iv = SECURITYKEY.toHexString(str.substring(8, 16));key.security = "\u4445\u5320\u4d45"}return key},
通过上面的代码可知,SECURITYKEY.get()返回的是一个key对象,而key这个对应保存了key,iv和security,这三项就是加密所需要用到的
key,iv和security的值通过下面的代码可以确定:
var key = {};key.key = str.substring(0, 16);key.iv = str.substring(16, 32);key.security = "\u4435\u5320\u4d35"而str字符串则是由SECURITYKEY._2()生成的。SECURITYKEY._2()对应的代码是:if (window.getSessionId) {str = getSessionId()}
也就是说str是它的SessionId,如下图所示:

这个网站用的是DES对称加密方式,加密时用到两个参数key和iv,以及把加密后的字符串与security拼接成最终加密字符串,而这三个相关的参数是把该网站的SessionId进行处理得到的。所以,最终要实现加密只需要通过python的requests打开登录页面获取SessionId值就行
一、重写加密
改写加密函数代码:
function getPwd(value)
{var str = '46D6F0AC53B420C83D055ED3486F601F';var key = str.substring(0, 16);var iv = str.substring(16, 32);var security = "\u4435\u5320\u4d35"if (str.length < 32) {str += "abcdefghijklmnopqrstuvwxyz1234567890"}value = CryptoJS.AES.encrypt(value, CryptoJS.enc.Utf8.parse(key), {iv: CryptoJS.enc.Utf8.parse(iv)}).toString()return security + value
}
也可以把整个文件代码复制过来,然后调用里面的加密函数。这样更省事
如下扣取加密代码:

把文件aes.js整个代码复制过来放到getPwd(value)函数上面进行调用
好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章
相关文章:
某网站DES加密逆向分析实战
文章目录 一、抓包分析二、加密分析一、重写加密 一、抓包分析 分析站点: aHR0cDovL2VpcC5jaGFuZmluZS5jb20v 首先我们提交一下登陆信息: 搜索j_password查看加密函数: 把上图搜索到的encryptPassword函数拿出来分析一下: function encryptP…...
面向对象的理解
想要对象了?没问题,new一个就好了。 但是,new太多对象,对象也会生气的哦。 你瞧,她来了 从两段代码发现端倪 我们来计算一个矩形的面积,看看这两段代码有什么区别呢? 第一段: con…...
java ssl加密发送邮件
通过25端口发送邮件不安全,改为ssl加密方式发送邮件,比较常见的2中实现类发送邮件如下所示。 1、JavaMailSenderImpl 类 使用该实现类发送邮件,ssl加密使用端口号为465,借助Properties类设置ssl的各种配置。 SysUserEntity user…...
SpringBoot-yml配置文件的使用与优势
目录 一、什么是yml配置文件? 二、如何在SpringBoot中使用yml配置文件? 三、如何在SpringBoot中注入yml配置文件的属性? Value注解 ConfigurationProperties注解 四、yml配置文件与properties配置文件的区别和优势 区别 优势 五、总结…...
Layer Normalization(层规范化)
详细内容在这篇论文:Layer Normalization 训练深度神经网络需要大量的计算,减少计算时间的一个有效方法是规范化神经元的活动,例如批量规范化BN(batch normalization)技术,然而,批量规范化对小批…...
redisson参数配置
文章目录 pom配置链接配置建议 pom <!-- 引入spring-data-redis组件 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 因springboot2.x…...
【基于Arduino的仿生蚂蚁机器人】
【基于Arduino的仿生蚂蚁机器人】 1. 概述2. Arduino六足位移台–蚂蚁机器人3D模型3. 3D 打印零件4. 组装Arduino六足位移台5. Arduino蚂蚁机器人电路图6. 为Arduino Hexapod设计PCB7. 组装电路板8. 系统代码9. Arduino蚂蚁机器人安卓应用程序在本教程中,我将向您展示如何构建…...
angular12里面FormGroup做多个项目的相关check
FromFroup在鼠标失去焦点时做相关check,可以在group方法第二个参数的位置加一个对象参数 { validator: this.checkPasswords } 在Angular 12中,可以使用formGroup来进行两个密码是否一致的检查。以下是一个示例: 首先,在组件的…...
TypeScript 的发展与基本语法
目录 一、为什么什么是TypeScript? 1、发展历史 2、typescript与javascript 3、静态类型的好处 二、基础语法 1、基础数据类型 2、补充类型 3、泛型 4、泛型的高级语法 5、类型别名&类型断言 6、字符串/数字 字面量 三、高级类型 1、联合/交叉类型…...
macOS - 上编译运行 risc-v (spike)
文章目录 一、说明二、安装步骤三、测试 一、说明 本文根据以下文章改编: RISC-V 环境配置 https://decaf-lang.github.io/minidecaf-tutorial/docs/step0/riscv_env.html 相关链接: riscv-gnu-toolchain GNU toolchain for RISC-V, including GCC ht…...
Linux--线程地址空间
1.程序地址空间 先来就看这张图 这是一张程序地址分布的图,通过一段代码来证明地址空间的分布情况 编译结果: 可以看出的是,父子进程中对于同一个变量打印的地址是一样的,这是因为子进程以父进程为模板,因为都没有对数…...
华为OD机试 - 最佳植树距离 - 二分查找(Java 2023 B卷 100分)
目录 一、题目描述二、输入描述三、输出描述四、备注说明五、二分查找六、解题思路七、Java算法源码八、效果展示1、输入2、输出3、说明 一、题目描述 按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。 由于…...
RNN+LSTM正弦sin信号预测 完整代码数据视频教程
视频讲解:RNN+LSTM正弦sin信号预测_哔哩哔哩_bilibili 效果演示: 数据展示: 完整代码: import torch import torch.nn as nn import torch.optim as optim import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.preprocessing import…...
如何自己实现一个丝滑的流程图绘制工具(四)bpmn-js开启只读状态
背景 流程图需要支持只读状态和编辑状态 翻看官方案例源码,扒拉到了禁用的js代码 DisableModeling.js const TOGGLE_MODE_EVENT toggleMode const HIGH_PRIORITY 10001export default function DisableModeling(eventBus,contextPad,dragging,directEditing,e…...
字节跳动 Git 的正确使用姿势与最佳实践
版本控制Git 黑马&尚硅谷 Git的前世今生 方向介绍 为什么要学习Git 1.0 Git是什么 1.1 版本控制 1.1.1 本地版本控制 1.1.2 集中版本控制 1.1.3 分布式版本控制 我们已经把三个不同的版本控制系统介绍完了,Git 作为分布式版本控制工具, 虽然目前来讲…...
龙迅LT7911UX TYPE-C/DP转MIPI/LVDS,内有HDCP
1. 描述 LT7911UX是一种高性能的Type-C/DP1.4a到MIPI或LVDS芯片。HDCP RX作为HDCP中继器的上游端,可以与其他芯片的HDCP TX协同工作,实现中继器的功能。 对于DP1.4a输入,LT7911UX可以配置为1/2/4车道。自适应均衡使其适用于长电缆应用&#…...
Spearman Footrule距离
Spearman Footrule距离是一种用于衡量两个排列之间差异的指标。它衡量了将一个排列变换为另一个排列所需的操作步骤,其中每个操作步骤都是交换相邻元素。具体而言,Spearman Footrule距离是每个元素在两个排列中的排名差的绝对值之和。 这个指标的名字中…...
docker 安装 Wordpress 用lnmp搭建出现的故障
第一个故障就是mysql出现的故障了 你起mysql镜像是这么起的导致pid号用不了 docker run --namemysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 mysql:lnmp 解决方法 docker run --namemysql -d --privilege…...
【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)
阅读导航 前言一、继承的概念及定义1. 继承的概念2.继承的定义⭕定义格式⭕继承关系和访问限定符⭕继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、复杂的菱形继承及菱形虚拟继承⭕单…...
【Spring框架】Spring事务的介绍与使用方法
⚠️ 再提醒一次:Spring 本身并不实现事务,Spring事务 的本质还是底层数据库对事务的支持。你的程序是否支持事务首先取决于数据库 ,比如使用 MySQL 的话,如果你选择的是 innodb 引擎,那么恭喜你,是可以支持…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
