cqu-login-password-reverse
概述
本文是一篇针对重庆大学统一身份认证系统(authserver.cqu.edu.cn)的前端密码加密逆向实战笔记。我们将通过浏览器开发者工具一步步找到加密入口,拆解其内部逻辑,最终用 Python 完整复现加密流程,并模拟登录请求。
目标系统采用了一种常见的 AES-128-CBC 模式进行密码加密,同时结合了自定义随机字符集生成的盐值前缀与随机 IV,使得同一明文密码每次加密产生的密文都不同,有效防止了彩虹表等攻击。
免责声明:本文仅用于学习与研究前端逆向技术,请勿将文中方法用于任何非法途径。使用时应遵守学校的网络与信息安全规范。
浏览器逆向分析:定位加密入口
首先,我们需要通过 Chrome DevTools(其他现代浏览器操作类似)找到密码加密的核心代码。
步骤1:打开登录页与开发者工具
访问登录页面: http://authserver.cqu.edu.cn/authserver/login
按下 F12 打开开发者工具,切换到 Network(网络) 面板,并勾选 Preserve log(保留日志),防止页面跳转后请求记录丢失。
步骤2:触发登录并抓包
输入一个任意的用户名和密码(不要使用真实密码,仅用于触发请求),点击“登录”按钮。此时在 Network 面板中会看到一个 POST 请求,过滤关键词 login 可以快速定位到它。
该请求的核心参数包括:
username:明文用户名password:一串 Base64 编码的密文lt、dllt、execution等一次性参数
重点关注 password 的生成方式。
步骤3:定位加密函数
跟踪 password 参数的生成位置有以下常用方法:
- Network 面板搜索:在搜索框中输入
encrypt或pwdDefaultEncryptSalt(常见的加密盐名),可以快速找到相关代码片段。 - XHR 断点 + 调用栈回溯:在 Sources(源代码)面板右侧添加一个
XHR/fetch Breakpoint,断点 URL 设置为*login*,再次点击登录。请求发送前会暂停,此时通过右侧的 Call Stack 向上追溯,就可以找到发起加密调用的 JavaScript 代码。
最终,我们会在页面嵌入的 <script> 标签内定位到完整的加密逻辑。
加密流程核心拆解
定位到的加密代码主要由三个部分组成,下面逐一分析。
1. AES-128-CBC 底层实现
系统直接使用了经典的 CryptoJS 库来封装 AES 加密。核心函数如下:
关键点:
- 密钥长度固定为 16 字节(对应 AES-128)
- 加密模式为 CBC,填充方式为 Pkcs7
- 加密结果直接转为 Base64 字符串,与抓包看到的
password格式一致
2. 自定义随机字符串生成
为了让同一密码每次加密结果都不同,系统使用了一套去掉易混淆字符的字符集来生成随机盐值与 IV。
可以看到,字符集中去掉了 oOLl、9gq、Vv、Uu、I1 这些容易混淆的字符,避免展示或调试时出错。
3. 密码加密主函数
主函数 encryptAES 是前端调用的入口,它将随机盐值前缀、原始密码、随机 IV 与固定密钥组合起来:
处理流程:
- 生成 64 位随机字符串作为盐值前缀
- 将
随机前缀 + 明文密码拼接得到待加密数据 - 生成 16 位随机字符串作为 IV
- 使用后台下发的固定密钥(
aesKey)进行 AES-128-CBC 加密
登录流程完整复现
要模拟完整的登录,除了加密密码,还需要从登录页面获取服务器动态下发的加密密钥以及登录所需的一次性参数(如 lt、execution)。
前置准备
-
安装所需 Python 库:
提示:
PyExecJS依赖本地 Node.js 环境,请确保已安装 Node.js。 -
将前端加密代码整理为独立 JS 文件,保存为
cqu_encrypt.js。注意:若在 Node.js 环境执行,需保留require("crypto-js")语句;若直接复制浏览器代码,可能需要做相应调整。建议先在同一目录安装 crypto-js:
Python 完整代码
以下代码会完成:获取登录页面 → 提取密钥和参数 → 调用 JS 加密 → 发送模拟登录请求。
配套前端 JS 代码(cqu_encrypt.js)
安全分析与注意事项
- 密钥暴露风险:加密密钥
pwdDefaultEncryptSalt直接以明文形式写在登录页的 JavaScript 中,任何能够访问登录页的攻击者都能获取。这使得前端加密主要起到防明文日志泄露的作用,而无法抵御中间人攻击或主动提取密钥的威胁。 - 随机性设计:每次加密时在密码前拼接 64 位随机盐值,再使用随机 IV 进行 CBC 加密,保证了同一密码每次生成密文均不同,有效抵御了彩虹表攻击,同时增加了密文比对分析的难度。
- 传输层安全:目前访问使用的是 HTTP 协议,即使密码被加密,整个会话流仍暴露在非加密通道下,存在被中间人篡改或窃取的风险。建议系统升级为 HTTPS 以提供传输层保护。
- 学习目的:本文仅供技术交流,请勿将方法用于非法用途。未经授权对系统进行测试可能违反法律法规和校规。
总结
本文通过浏览器开发者工具定位了重庆大学统一身份认证系统的前端加密代码,详细拆解了 AES-128-CBC 加密模式、自定义随机盐值与 IV 的生成逻辑,并使用 Python + PyExecJS 完整复现了密码加密过程,最终实现了模拟登录请求。
这是一个非常典型的高校/企业统一身份认证前端加密案例,掌握了这种分析思路和复现方法后,可以快速应对类似系统的逆向需求。希望本教程能为你的前端逆向学习之旅提供一些帮助。
再次提醒:请在合法、合规的前提下学习和测试相关技术。

