转载|保姆级教程---前端加密的对抗(附带靶场)
字数 1495 2025-08-19 12:41:26
前端加密对抗实战教程
一、前言
本教程详细介绍了前端加密的常见形式、对抗方法以及实战操作,附带一个完整的靶场环境用于练习。教程涵盖了从基础到高级的各种技术,包括JS逆向、数据包修改、自动化加解密等。
二、环境准备
靶场环境
- 地址:http://39.98.108.20:8085/
- 项目地址:https://github.com/0ctDay/encrypt-decrypt-vuls
工具准备
- v_jstools:用于挂钩JS函数
- GitHub:https://github.com/cilame/v_jstools
- JS-RPC:远程调用浏览器方法
- GitHub:https://github.com/jxhczhl/JsRpc
- Mitmproxy:Python版BurpSuite
- Yakit:一体化渗透工具
三、前端加密常见形式
1. 请求参数和路径加密
- 将GET请求和路径封装为POST请求体
- 表现形式:所有请求路径相同,请求体为密文
2. 请求体加密
- 固定密钥:JS中存储密钥,最简单
- 动态密钥:首次请求后密钥写入Cookie或本地存储
- 对称加密:加解密使用同一密钥(如AES)
- 非对称加密:加密解密使用不同密钥(如RSA)
- 算法:AES、RSA、国密算法等
3. 签名机制
- RequestId:防止重放攻击,服务端保存至Redis
- 时间戳:设置超时时间
- 签名本身:requestId + 原始请求体/参数 + 时间戳 + 盐值合并生成哈希
四、JS逆向实战
1. 寻找明文点
- 明文点:加密函数之前的函数中,原始请求参数仍是明文
- 使用v_jstools工具挂钩函数,找到明文点
2. 逆向步骤
- 安装配置v_jstools,选择需要挂钩的函数
- 打开挂钩功能,刷新页面
- 发送数据包,查看提示找到明文点
- 跟进JS文件,在代码处打上断点
- 跟踪后续处理,找到加密函数
3. 靶场示例分析
- 加密函数:
l() - 解密函数:
d() - 时间戳:
r - RequestId生成函数:
p() - 签名生成:MD5(n + i + r)
五、数据包修改方法
1. 修改当前数据包
青铜方法:直接在明文点处修改
- 在加密前的代码处打断点
- 在作用域中直接修改变量值
- 继续运行即可
白银方法:JS-forward
- 找到明文变量名
- 启动JS-forward,输入变量名、数据类型和请求标识
- 将生成的JS代码插入到明文点函数第一行
- 通过BurpSuite接收明文信息
2. 主动发包的加密与解密
黄金方法:JS-RPC + MITM
- 启动JS-RPC,注入代码
- 记录并注册加密相关函数
- 构建MITM脚本,自动处理加密和签名
- 测试:BurpSuite发送明文,MITM自动加密
钻石方法:JS-RPC + YAKIT热加载
- 准备解密后的请求体
- 编写热加载脚本处理加密
- 使用Yakit的Web Fuzzer测试暴力破解
3. 解密响应
- 记录并注册解密函数
- 创建Yakit插件用于手动解密
- 在Web Fuzzer中使用解密功能
六、高级技巧
最强王者:JS原生解密
- 通过反混淆、分析代码逻辑、补环境
- 使用Yakit的GoJa引擎直接运行JS加解密逻辑
七、总结
本教程系统介绍了前端加密的各种形式及其对抗方法,从基础的JS逆向到高级的自动化加解密方案。关键点包括:
- 理解前端加密的三种主要形式
- 掌握寻找明文点的技巧
- 熟练使用v_jstools、JS-RPC等工具
- 掌握多种数据包修改方法
- 了解自动化加解密的实现方式
通过本教程和配套靶场的练习,可以显著提高黑盒渗透测试中对抗前端加密的能力。