重庆大学登录密码加密逆向实战
概述
本文是针对重庆大学统一身份认证系统(authserver.cqu.edu.cn)的前端密码加密逆向实战笔记。我们将通过浏览器开发者工具定位加密入口,拆解加密逻辑,最终用Python复现前端加密流程并模拟登录请求。
系统采用的是较为常见的前端加密方案:AES-128-CBC模式,搭配自定义随机字符集生成的盐值前缀、随机IV,增强了单次加密的不可预测性。
免责声明:本文仅用于学习交流前端逆向技术,请勿用于非法用途,遵守学校网络使用规范。
浏览器逆向网页分析
我们先通过Chrome DevTools(或其他现代浏览器开发者工具)定位密码加密的核心位置:
步骤1:打开登录页和开发者工具
访问 http://authserver.cqu.edu.cn/authserver/login,按 F12 打开DevTools,切换到 Network 面板,勾选「Preserve log」。
步骤2:模拟提交抓包
输入任意用户名、密码,点击「登录」按钮。注意!不要输入真实密码,我们只是抓分析包。
在Network面板中过滤 login 请求,会看到一个POST请求:
- 请求URL:
http://authserver.cqu.edu.cn/authserver/login - 核心参数:
username(明文)、password(一串Base64编码的密文)、lt、dllt、execution等
步骤3:定位加密入口
接下来重点找 password 的生成位置,有两个常用方法:
- Network面板搜索变量名:直接搜索
pwdDefaultEncryptSalt(抓包时注意到请求前可能有类似的加密盐变量)或encrypt相关关键词 - Sources面板XHR断点+单步调试:在Sources面板右侧添加
XHR/fetch Breakpoint,断点URL设为*login*,再次点击登录,会在请求发送前暂停,再一步步往上找调用栈
最终我们可以在登录页嵌入的某个 <script> 标签中找到完整的加密代码。
加密流程核心拆解
找到的加密代码主要分为三个核心部分,我们逐一解析:
1. AES-128-CBC底层实现
系统直接使用了开源加密库 CryptoJS 实现底层的加密逻辑:
2. 自定义随机字符串生成
为了让同一密码每次加密的结果都不同(防止彩虹表攻击),系统使用了去掉易混淆字符的自定义字符集来生成随机盐值前缀和随机IV:
3. 密码加密主函数入口
主函数是前端调用加密的最后一步,主要逻辑是:获取密钥 -> 生成随机盐值前缀和IV -> 组合明文 -> 调用底层AES加密:
登录流程完整复现
要模拟完整的登录,除了加密密码,还需要获取服务器动态生成的加密密钥和登录相关的一次性参数(如lt、execution)。
前置准备
- 安装必要的Python库:
- 下载或复制前端找到的加密代码,保存为
cqu_encrypt.js(注意:需要去掉浏览器特有的全局变量引用,只保留三个加密函数+引入CryptoJS的代码)
Python完整代码
修正后的前端加密JS代码(cqu_encrypt.js)
注意:如果直接从浏览器复制代码,可能不需要引入require(浏览器是全局加载CryptoJS的),但在Node.js/execjs环境中需要:
安全分析与注意事项
- 密钥暴露问题:加密密钥
pwdDefaultEncryptSalt直接以明文形式嵌入在登录页HTML中,攻击者可以轻松获取,这降低了前端加密的防窃听之外的安全性(但能防止明文密码被直接记录在日志中) - 随机性设计合理:通过在密码前加64位随机盐值、每次生成不同的随机IV,确保同一账号同一密码每次加密的结果都不同,有效抵御了彩虹表攻击
- 传输安全建议:学校目前使用的是HTTP协议传输,虽然密码被加密,但仍建议升级为HTTPS协议,防止中间人攻击
- 不要用于非法用途:本文仅用于学习前端逆向技术,违反学校网络规范或法律法规后果自负
总结
本文通过浏览器开发者工具定位了重庆大学统一身份认证系统的前端加密入口,拆解了AES-128-CBC加密、自定义随机字符串生成、密码组合三个核心流程,并最终用Python + PyExecJS复现了加密逻辑,模拟了登录请求。
这是一个非常典型的高校/企业统一身份认证前端加密案例,掌握这种方法可以快速分析类似的系统。

