• 高校教务系统登录页面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,我们就很容易定位到一个函数,我们不难发现其加密原理。

    1. //密码加密
    2. function encryptPassword(pwd0) {
    3. try{
    4. var pwd1 = encryptAES(pwd0,pwdDefaultEncryptSalt);
    5. $("#casLoginForm").find("#passwordEncrypt").val(pwd1);
    6. }catch(e){
    7. $("#casLoginForm").find("#passwordEncrypt").val(pwd0);
    8. }
    9. }

    这段代码是一个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 未定义,或者密码参数为空等),它将不会进行加密,而是直接将原始密码保存到指定位置。

     

    代码实现

    1. var CryptoJS = require("crypto-js");
    2. function encryptPassword(pwd0) {
    3. var pwdDefaultEncryptSalt = 'L5IGscL956g2gynT'//网页返回的
    4. var pwd1 = encryptAES(pwd0, pwdDefaultEncryptSalt);
    5. return pwd1
    6. }
    7. function encryptAES(data, aesKey) { //加密
    8. if (!aesKey) {
    9. return data;
    10. }
    11. var encrypted = getAesString(randomString(64) + data, aesKey, randomString(16)); //密文
    12. return encrypted;
    13. }
    14. //AES-128-CBC加密模式,key需要为16位,key和iv可以一样
    15. function getAesString(data, key0, iv0) {//加密
    16. key0 = key0.replace(/(^\s+)|(\s+$)/g, "");
    17. var key = CryptoJS.enc.Utf8.parse(key0);
    18. var iv = CryptoJS.enc.Utf8.parse(iv0);
    19. var encrypted = CryptoJS.AES.encrypt(data, key,
    20. {
    21. iv: iv,
    22. mode: CryptoJS.mode.CBC,
    23. padding: CryptoJS.pad.Pkcs7
    24. });
    25. return encrypted.toString(); //返回的是base64格式的密文
    26. }
    27. var $aes_chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
    28. /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
    29. var aes_chars_len = $aes_chars.length;
    30. function randomString(len) {
    31. var retStr = '';
    32. for (i = 0; i < len; i++) {
    33. retStr += $aes_chars.charAt(Math.floor(Math.random() * aes_chars_len));
    34. }
    35. return retStr;
    36. }
    37. console.log(encryptPassword(12345))

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

    实现效果

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

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

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

    四、总结

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

    五、累计更新

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

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

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

    6adf31c8c5dd4e6a83314f4805b30bc1.jpg

  • 相关阅读:
    [单片机课程设计报告汇总] 单片机设计报告常用硬件元器件描述
    猿如意|手把手教你下载、安装和配置PyCharm社区版
    2347. 最好的扑克手牌-双百代码
    IT运维全面数字化|芯片设计行业领跑打造运维流程闭环
    Python数值方法和可视化
    最新阿里云服务器配置选择教程(图文并茂)
    windows命令行XCOPY命令
    【C版本】静态通讯录与动态通讯录的实现,以及各自所存在的缺陷对比。(含所有原码)
    kafka同步副本集及关键参数
    MySQL更新一条已经存在的sql语句是怎么执行的
  • 原文地址:https://blog.csdn.net/BROKEN__Y/article/details/133966257