高校教务系统登录页面JS分析——河北农业大学教务系统

发布时间:2024年01月08日

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

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

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

一、密码加密基本概念

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

1.1 加密过程

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

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

1.2 解密过程

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

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

2.1 抓包

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

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

2.2 分析加密参数

我们接下来,就是来分析这个密码是怎么加密的。我们全局搜索encrypt。定位到加密的位置。我们这里只有这个参数被加密了。我们猜测这个包含了用户的账号和密码信息。

我们看到这里加密逻辑不难,我们直接扣下来。

三、JS逆向分析方法

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

环境使用

  • python 3.9
  • pycharm
  • node

实现代码

//!NODE.JS 18.16
// _*_ coding: utf-8 _*_
//
//  Copyright (C) 2022 - 2024 BROKEN, Inc. All Rights Reserved 
//
// @Time    : 2024/1/8 12:36
// @Author  : 爱吃饼干的小白鼠
// @File    : 河北农业大学.JS
// @IDE     : PyCharm
// @Blog    : https://broken.blog.csdn.net/
var CryptoJS = require("crypto-js");
var $aes_chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
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;
}

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();
}

function encryptAES(data, aesKey) {
    if (!aesKey) {
        return data;
    }
    var encrypted = getAesString(randomString(64) + data, aesKey, randomString(16));
    return encrypted;
}
function decryptPassword(data, aesKey) {
    var key = CryptoJS.enc.Utf8.parse(aesKey);
    var iv = CryptoJS.enc.Utf8.parse(randomString(16));
    var decrypted = CryptoJS.AES.decrypt(data, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    // 转换为 utf8 字符串
    return CryptoJS.enc.Utf8.stringify(decrypted).substring(64);
}
function encryptPassword(pwd0, key) {

        return encryptAES(pwd0, key);
}

pwd = encryptPassword('1234','s5hEpVdDfkRDXRCJ')


console.log(pwd)

这段代码包含几个加密和解密函数,用于处理字符串数据。它使用了AES(高级加密标准)算法,这是一种常用的对称加密算法。

  1. 引入模块:

var CryptoJS = require("crypto-js");

这一行引入了一个名为"crypto-js"的Node.js模块,该模块提供了用于加密和解密的工具。
2.?随机字符串生成器:

function randomString(len) { ... }

这个函数用于生成指定长度的随机字符串。它从给定的字符集$aes_chars中随机选择字符来创建字符串。
3.?AES 加密函数:

function getAesString(data, key0, iv0) { ... }

这个函数用于使用AES加密给定的数据。它接受数据、密钥和初始化向量(IV)作为参数,并返回加密后的字符串。这里使用了CBC(密码块链接)模式和Pkcs7填充方式。
4.?主加密函数:

function encryptAES(data, aesKey) { ... }

这个函数用于加密数据。如果提供了密钥,它将使用AES加密数据。加密时,它会在数据前添加一个64字节的随机字符串,以提高安全性。返回的加密数据是Base64格式的。
5.?密码解密函数:

function decryptPassword(data, aesKey) { ... }

这个函数用于解密数据。它接受加密的数据和密钥作为参数,并返回解密后的原始数据。注意,这里使用了固定的初始化向量(IV)。这可能是一个安全风险,因为相同的密钥和IV组合将被用于解密。
6.?主解密函数:

function encryptPassword(pwd0, key) { ... }

这个函数实际上是encryptAES函数的别名,用于混淆代码或误导读者。它直接调用了encryptAES函数,没有进行任何额外的操作。
7.?示例代码:
在最后一部分代码中:

pwd = encryptPassword('1234','s5hEpVdDfkRDXRCJ')
console.log(pwd)

它使用给定的密钥对字符串"1234"进行加密,并将结果输出到控制台。但实际上这段代码中有一个小错误,它试图打印一个经过AES加密的Base64字符串,而不是原始的未加密数据。为了查看解密后的原始数据,你需要使用decryptPassword函数。

四、总结

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

五、累计更新

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

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

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

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

文章来源:https://blog.csdn.net/BROKEN__Y/article/details/135467020
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。