当前位置: 首页 > news >正文

高校教务系统登录页面JS分析——巢湖学院

高校教务系统密码加密逻辑及JS逆向

本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。

本文仅供交流学习,勿用于非法用途。

一、密码加密基本概念

密码加密是一种保护信息安全的技术手段,它通过将明文(原始信息)转换为密文(加密后的信息),以防止未经授权的访问和篡改。常见的密码加密算法有MD5、SHA-1、SHA-256等。

1.1 加密过程

加密过程通常包括以下步骤:

  1. 密钥扩展:将密钥扩展为多个轮值,每个轮值都与明文的一部分有关。
  2. 初始轮值生成:将扩展后的密钥与轮常数进行某种运算,生成第一轮加密的密文。
  3. 多轮迭代:对密文进行多轮迭代操作,每轮操作都包括非线性函数、模运算和轮常数的变换。
  4. 最终密文:经过多轮迭代后,得到最终的密文。

1.2 解密过程

解密过程与加密过程相反,通过反向操作来恢复原始明文。通常需要知道加密时使用的密钥和算法。

二、高校教务系统密码加密逻辑分析

2.1 抓包

我们首先打开巢湖学院的教务系统的登录页面,我们直接百度搜索这个学校的教务系统就可以看到,点进去之后,我们可以看到,只有学号和密码,有的高校会有验证码,或者有的高校是错误一次密码,会验证验证码。

我们打开开发者工具,尝试登录抓包,网页会返回这样的数据接口。我们用户名和密码都是默认输入1234,你也可以输入其他的。

2.2 分析加密参数

我们接下来,就是来分析这个密码是怎么加密的。我们全局搜索password。定位到加密的位置。我们这里只有这个密码参数被加密了。

我们可以看到这里就调用了一个加密函数,不是很复杂。

三、JS逆向分析方法

逆向分析是指从已知的加密文本或程序中还原出原始信息的过程。在本例中,我们将使用JavaScript编写一个简单的逆向分析工具,用于逆向高校教务系统的密码。

环境使用

  • python 3.9
  • pycharm
  • node

我们全局搜索encryptPassword,我们就很容易定位到一个函数,我们不难发现其加密原理。

//密码加密
function encryptPassword(pwd0) {try{var pwd1 = encryptAES(pwd0,pwdDefaultEncryptSalt);$("#casLoginForm").find("#passwordEncrypt").val(pwd1);}catch(e){$("#casLoginForm").find("#passwordEncrypt").val(pwd0);}
}

这段代码是一个JavaScript函数,主要用于密码加密。下面是对其的逐行解释:

  1. function encryptPassword(pwd0) {: 定义一个名为 encryptPassword 的函数,它接受一个参数 pwd0。这个参数预期是要被加密的密码。
  2. try{: 开始一个 try 块。try 块用于捕获可能出现的异常。
  3. var pwd1 = encryptAES(pwd0,pwdDefaultEncryptSalt);: 调用一个名为 encryptAES 的函数,使用 pwd0(要加密的密码)和 pwdDefaultEncryptSalt(默认的加密盐)作为参数,并将返回的结果(加密后的密码)存储在变量 pwd1 中。
  4. $("#casLoginForm").find("#passwordEncrypt").val(pwd1);: 使用 jQuery 的 val 方法将 pwd1(加密后的密码)设置为 ID 为 passwordEncrypt 的元素的值。这个元素可能是一个表单字段。
  5. }catch(e){: 如果在 try 块中的代码出现了异常,那么会执行 catch 块中的代码。
  6. $("#casLoginForm").find("#passwordEncrypt").val(pwd0);: 如果出现异常,那么不加密原始密码,直接将其设置为 ID 为 passwordEncrypt 的元素的值。
  7. }: 结束 catch 块。
  8. }: 结束 encryptPassword 函数。

这个函数的目的是将输入的密码进行加密,然后保存到一个指定的位置。如果出现任何错误或异常(比如加密函数 encryptAES 未定义,或者密码参数为空等),它将不会进行加密,而是直接将原始密码保存到指定位置。

 

代码实现

var CryptoJS = require("crypto-js");function encryptPassword(pwd0) {var pwdDefaultEncryptSalt = 'L5IGscL956g2gynT'//网页返回的var pwd1 = encryptAES(pwd0, pwdDefaultEncryptSalt);return pwd1
}function encryptAES(data, aesKey) { //加密if (!aesKey) {return data;}var encrypted = getAesString(randomString(64) + data, aesKey, randomString(16)); //密文return encrypted;
}//AES-128-CBC加密模式,key需要为16位,key和iv可以一样
function getAesString(data, key0, iv0) {//加密key0 = key0.replace(/(^\s+)|(\s+$)/g, "");var key = CryptoJS.enc.Utf8.parse(key0);var iv = CryptoJS.enc.Utf8.parse(iv0);var encrypted = CryptoJS.AES.encrypt(data, key,{iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7});return encrypted.toString();    //返回的是base64格式的密文
}var $aes_chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
/****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
var aes_chars_len = $aes_chars.length;function randomString(len) {var retStr = '';for (i = 0; i < len; i++) {retStr += $aes_chars.charAt(Math.floor(Math.random() * aes_chars_len));}return retStr;
}console.log(encryptPassword(12345))

我这里直接把代码给大家,大家感兴趣可以先尝试直接去写,可以和我写的做比较。 

实现效果

oYI1+Qu4HMtz7gRVZJlK51yyUxy8HDnHIdBdbX1WAImF+33JNtX82yhQLrg5RiFuaa8U9iKxd+sHlSz+bw/qYcztae85PoPtT8YKlT5FjVE=

这里特别要注意的是pwdDefaultEncryptSalt ,这个是返回的值,每次都不一样。

var pwdDefaultEncryptSalt = 'qukV9eRfjb2SDVac'//网页返回的

四、总结

本文介绍了高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的方法。通过学习这些知识,你可以更好地理解密码加密技术的原理,并掌握一定的逆向分析技巧。请注意,逆向分析可能涉及到法律问题,请在合法范围内进行研究和实践。

五、累计更新

争取到到底早日更新30所高校,大家可以在评论区留言。前期更的可能会多一点,有的学校教务系统都没有加密,我这里就不写了,还有,部分学校的教务系统已经和我之前写的是一样的,我也不重复赘述了。

往期作品可以查看专栏👇👇👇

全国高校教务系统登录页面JS分析_爱吃饼干的小白鼠的博客-CSDN博客

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

相关文章:

高校教务系统登录页面JS分析——巢湖学院

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…...

人工智能、机器学习、深度学习的区别

人工智能涵盖范围最广&#xff0c;它包含了机器学习&#xff1b;而机器学习是人工智能的重要研究内容&#xff0c;它又包含了深度学习。 人工智能&#xff08;AI&#xff09; 人工智能是一门以计算机科学为基础&#xff0c;融合了数学、神经学、心理学、控制学等多个科目的交…...

Element Plus el-select选择框失去焦点blur

正常情况下&#xff0c;可以使用 el-select 自带的方法 blur 事件来使select失去焦点 示例&#xff1a; <el-select v-model"value" ref"selectRef"><el-optionv-for"item in options":key"item.value":label"item.la…...

Java File与IO流学习笔记

内存中存放的都是临时数据&#xff0c;但是在断电或者程序终止时都会丢失 而硬盘则可以长久存储数据&#xff0c;即使断电&#xff0c;程序终止&#xff0c;也不会丢失 File File是java.io.包下的类&#xff0c;File类的对象&#xff0c;用于代表当前操作系统的文件(可以是文…...

LabVIEW中PID控制的的高级功能

LabVIEW中PID控制的的高级功能 比例-积分-微分&#xff08;PID&#xff09;控制占当今控制和自动化应用的90%以上&#xff0c;主要是因为它是一种有效且简单的解决方案。虽然PID算法最初用于线性、时不变系统&#xff0c;但现在已经发展到控制具有复杂动力学的系统。在现实世界…...

STM32基于HAL库RT-Thread Demo测试

STM32基于HAL库RT-Thread Demo测试 &#x1f388;源码地址&#xff1a;https://github.com/RT-Thread/rt-thread/tree/master&#x1f4cc;基于STM32CUBEMX中间件安装《基于 CubeMX 移植 RT-Thread Nano》&#x1f4cd;环境搭建《使用 Env 创建 RT-Thread 项目工程》&#x1f5…...

萌新小白必做题(2)找素数

一.思路分析 先来看看素数的性质&#xff1a; 素数又称质数&#xff0c;是指除了1和本身外没有其它因数的自然数。素数有许多有趣的性质和应用&#xff0c;例如可以用于加密算法和数学证明等。比如2、3、5、7等都是素数&#xff0c;而4、6、8、9等则不是素数。素数的研究是数…...

《基于 Vue 组件库 的 Webpack5 配置》8.在生成打包文件之前清空 output(dist) 目录(两种方式)

方式一 ​ 如果 webpack 是 v5.20.0&#xff0c;直接使用属性 output.clean&#xff0c;配置如下&#xff1a; module.exports {//...output: {clean: true}, };方式二 如果使用较低版本&#xff0c;可以使用插件 clean-webpack-plugin&#xff1a; 先安装&#xff1a;npm…...

3、Kafka Broker

4.1 Kafka Broker 工作流程 4.1.1 Zookeeper 存储的 Kafka 信息 &#xff08;1&#xff09;启动 Zookeeper 客户端。 [hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh&#xff08;2&#xff09;通过 ls 命令可以查看 kafka 相关信息。 [zk: localhost:2181(CONNECTED) 2] ls /kaf…...

数字孪生智慧建筑可视化系统,提高施工效率和建造质量

随着科技的不断进步和数字化的快速发展&#xff0c;数字孪生成为了建筑行业的一个重要的概念&#xff0c;被广泛应用于智能化建筑的开发与管理中。数字孪生是将现实世界的实体与数字世界的虚拟模型进行连接和同步&#xff0c;从而实现实时的数据交互和模拟仿真。数字孪生在建筑…...

SpringCloud: feign整合sentinel实现降级

一、加依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…...

List<LinkedHashMap<String, String>>类型的数据转换为Map<String, List<String>>类型数据

import java.util.*;public class Main {public static void main(String[] args) {// 示例数据&#xff1a;List<LinkedHashMap>List<LinkedHashMap<String, String>> keyParamList new ArrayList<>();LinkedHashMap<String, String> map1 ne…...

react 学习 —— 16、使用 ref 操作 DOM

什么时候使用 ref 操作 DOM&#xff1f; 有时你可能需要访问由 React 管理的 DOM 元素 —— 例如&#xff0c;让一个节点获得焦点、滚动到它或测量它的尺寸和位置。在 React 中没有内置的方法来做这些事情&#xff0c;所以你需要一个指向 DOM 节点的 ref 来实现。 怎么使用 r…...

Qt planeGame day10

Qt planeGame day10 Game基本框架 qt中没有现成的游戏框架可以用&#xff0c;我们需要自己搭框架首先创建一个QGame类作为框架&#xff0c;这个基本框架里面应该有如下功能&#xff1a;游戏初始化 void init(const QSize& siez,const QString& title);游戏反初始化(…...

贪吃蛇项目实践

游戏背景&#xff1a; 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯⽅块&#xff0c;扫雷等游戏位列经典游戏的⾏列。 实现基本的功能&#xff1a; 贪吃蛇地图绘制 蛇吃⻝物的功能 &#xff08;上、下、左、右⽅向键控制蛇的动作&#xff09; 蛇撞墙死亡 蛇撞⾃⾝死亡 计…...

【C++】哈希应用——海量数据面试题

哈希应用——海量数据面试题 一、位图应用1、给定100亿个整数&#xff0c;设计算法找到只出现一次的整数&#xff1f;2、给两个文件&#xff0c;分别有100亿个整数&#xff0c;我们只有1G内存&#xff0c;如何找到两个文件交集&#xff1f;&#xff08;1&#xff09;用一个位图…...

​CUDA学习笔记(五)GPU架构

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/&#xff0c;仅用于学习。 GPU架构 SM&#xff08;Streaming Multiprocessors&#xff09;是GPU架构中非常重要的部分&#xff0c;GPU硬件的并行性就是由SM决定的。 以Fermi架构为例&#xff0c;其包含以下主要组成…...

逻辑漏洞详解

原理&#xff1a; 没有固定的概念&#xff0c;一般都是不符合常识的情况。比如任意用户注册&#xff0c;短信炸弹&#xff0c;占用资源&#xff0c;交易支付、密码修改、密码找回、越权修改、越权查询、突破限制。 根据实际业务逻辑进行比对&#xff0c;购物的可以根据数量&a…...

MySQL——八、MySQL索引视图

MySQL 一、视图1、什么是视图2、为什么需要视图3、视图的作用和优点4、创建视图5、视图使用规则6、修改视图7、删除视图 二、索引1、什么是索引2、索引优缺点3、索引分类4、索引的设计原则5、创建索引5.1 创建表是创建索引5.2 create index5.3 ALTER TABLE 6、删除索引7、MySQL…...

力扣100097. 合法分组的最少组数(哈希+贪心)

题目描述&#xff1a; 给你一个长度为 n 下标从 0 开始的整数数组 nums 。 我们想将下标进行分组&#xff0c;使得 [0, n - 1] 内所有下标 i 都 恰好 被分到其中一组。 如果以下条件成立&#xff0c;我们说这个分组方案是合法的&#xff1a; 对于每个组 g &#xff0c;同一…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...