记一次前端用户名,密码加密逆向
字数 1453 2025-08-10 13:48:25
前端用户名密码加密逆向分析教学文档
一、背景概述
本教学文档基于一篇关于前端用户名和密码加密逆向分析的文章,详细介绍了如何对使用DES和MD5加盐加密的前端登录系统进行逆向分析,并利用Burp Suite插件进行爆破。
二、加密分析流程
1. 准备工作
- 目标网站:一个前端对用户名和密码进行加密的登录系统
- 工具准备:
- 浏览器开发者工具
- Burp Suite
- jsEncrypter插件(GitHub - c0ny1/jsEncrypter)
- VS Code或其他代码编辑器
2. 识别加密方式
- 触发加密:首先在目标网站输入用户名密码并提交,确保加密过程被执行
- 全局搜索关键词:
- 搜索"password"定位密码相关代码
- 搜索"username"或加密后的用户名(如"enUderName")定位用户名加密函数
3. 用户名加密分析
- 发现用户名使用
strEnc函数进行加密 - 进一步分析
strEnc函数,确认是DES加密算法 - 在代码中找到DES加密使用的三个密钥(key)
4. 密码加密分析
- 密码加密在DES基础上增加了MD5和盐值处理
- 搜索
hex_md5定位MD5加密函数 - 注意密码处理流程:
- 原始密码 + 盐值
- 进行MD5加密
- 再进行DES加密
5. 关键发现
- 密码处理时有一个坑点:实际处理的是
{密码} + 盐值而不仅仅是密码 + 盐值 - 需要通过JS断点调试确认实际的加密输入
三、逆向实现步骤
1. 获取加密JS文件
- 从目标网站下载完整的加密JS文件(DESTools.js等)
- 保存相关加密函数到本地
2. 配置jsEncrypter插件
- 准备
_des.js文件,填入从目标网站获取的三个DES密钥 - 对于密码加密,需要:
- 先实现MD5加盐处理
- 再进行DES加密
3. 验证加密结果
- 使用本地JS代码运行加密函数
- 与网站实际提交的加密结果对比,确保完全一致
四、爆破准备
1. 字典处理
- 准备原始字典文件(如121212.txt)
- 对字典中的每个密码:
- 添加盐值(注意格式,如
{password}+ salt) - 进行MD5加密
- 进行DES加密
- 添加盐值(注意格式,如
- 保存处理后的字典(output文件)
2. Burp Suite配置
- 使用jsEncrypter插件处理加密
- 加载处理后的字典
- 配置爆破参数
五、调试技巧
-
JS断点调试:
- 在加密函数关键位置设置断点
- 观察实际处理的输入值和中间结果
- 特别关注字符串拼接和格式
-
常见问题排查:
- 加密结果不一致时,检查输入格式
- 确认密钥是否正确
- 验证加密步骤是否完整
六、完整流程总结
- 触发前端加密 → 2. 定位加密函数 → 3. 分析加密流程 → 4. 提取密钥 → 5. 本地复现加密 → 6. 验证加密结果 → 7. 处理字典 → 8. 配置爆破
七、关键代码示例
DES加密配置
// _des.js 中填入三个密钥
var key1 = "从网站获取的第一个密钥";
var key2 = "从网站获取的第二个密钥";
var key3 = "从网站获取的第三个密钥";
密码处理流程
function encryptPassword(pwd, salt) {
// 实际发现是 {password} + salt 的格式
var input = "{" + pwd + "}" + salt;
var md5Value = hex_md5(input);
var desValue = strEnc(md5Value, key1, key2, key3);
return desValue;
}
八、注意事项
- 不同网站的加密实现可能有差异,需要具体分析
- 加密前的字符串处理(如添加花括号)容易被忽视
- 确保使用与目标网站完全相同的加密JS文件
- 爆破前先手动验证几个测试用例
九、扩展学习
- 熟悉常见的前端加密算法(DES, AES, RSA, MD5, SHA等)
- 掌握JS调试技巧(console.log, debugger, 断点等)
- 学习Burp Suite插件的开发和使用
- 了解Webpack等打包工具对JS代码的影响
通过本教学文档,读者可以系统性地学习前端加密逆向分析的完整流程和关键技术点,具备独立分析类似加密系统的能力。