转载|保姆级教程---前端加密的对抗(附带靶场)
字数 1495 2025-08-19 12:41:26

前端加密对抗实战教程

一、前言

本教程详细介绍了前端加密的常见形式、对抗方法以及实战操作,附带一个完整的靶场环境用于练习。教程涵盖了从基础到高级的各种技术,包括JS逆向、数据包修改、自动化加解密等。

二、环境准备

靶场环境

  • 地址:http://39.98.108.20:8085/
  • 项目地址:https://github.com/0ctDay/encrypt-decrypt-vuls

工具准备

  1. v_jstools:用于挂钩JS函数
    • GitHub:https://github.com/cilame/v_jstools
  2. JS-RPC:远程调用浏览器方法
    • GitHub:https://github.com/jxhczhl/JsRpc
  3. Mitmproxy:Python版BurpSuite
  4. Yakit:一体化渗透工具

三、前端加密常见形式

1. 请求参数和路径加密

  • 将GET请求和路径封装为POST请求体
  • 表现形式:所有请求路径相同,请求体为密文

2. 请求体加密

  • 固定密钥:JS中存储密钥,最简单
  • 动态密钥:首次请求后密钥写入Cookie或本地存储
  • 对称加密:加解密使用同一密钥(如AES)
  • 非对称加密:加密解密使用不同密钥(如RSA)
  • 算法:AES、RSA、国密算法等

3. 签名机制

  • RequestId:防止重放攻击,服务端保存至Redis
  • 时间戳:设置超时时间
  • 签名本身:requestId + 原始请求体/参数 + 时间戳 + 盐值合并生成哈希

四、JS逆向实战

1. 寻找明文点

  • 明文点:加密函数之前的函数中,原始请求参数仍是明文
  • 使用v_jstools工具挂钩函数,找到明文点

2. 逆向步骤

  1. 安装配置v_jstools,选择需要挂钩的函数
  2. 打开挂钩功能,刷新页面
  3. 发送数据包,查看提示找到明文点
  4. 跟进JS文件,在代码处打上断点
  5. 跟踪后续处理,找到加密函数

3. 靶场示例分析

  • 加密函数:l()
  • 解密函数:d()
  • 时间戳:r
  • RequestId生成函数:p()
  • 签名生成:MD5(n + i + r)

五、数据包修改方法

1. 修改当前数据包

青铜方法:直接在明文点处修改

  1. 在加密前的代码处打断点
  2. 在作用域中直接修改变量值
  3. 继续运行即可

白银方法:JS-forward

  1. 找到明文变量名
  2. 启动JS-forward,输入变量名、数据类型和请求标识
  3. 将生成的JS代码插入到明文点函数第一行
  4. 通过BurpSuite接收明文信息

2. 主动发包的加密与解密

黄金方法:JS-RPC + MITM

  1. 启动JS-RPC,注入代码
  2. 记录并注册加密相关函数
  3. 构建MITM脚本,自动处理加密和签名
  4. 测试:BurpSuite发送明文,MITM自动加密

钻石方法:JS-RPC + YAKIT热加载

  1. 准备解密后的请求体
  2. 编写热加载脚本处理加密
  3. 使用Yakit的Web Fuzzer测试暴力破解

3. 解密响应

  1. 记录并注册解密函数
  2. 创建Yakit插件用于手动解密
  3. 在Web Fuzzer中使用解密功能

六、高级技巧

最强王者:JS原生解密

  • 通过反混淆、分析代码逻辑、补环境
  • 使用Yakit的GoJa引擎直接运行JS加解密逻辑

七、总结

本教程系统介绍了前端加密的各种形式及其对抗方法,从基础的JS逆向到高级的自动化加解密方案。关键点包括:

  1. 理解前端加密的三种主要形式
  2. 掌握寻找明文点的技巧
  3. 熟练使用v_jstools、JS-RPC等工具
  4. 掌握多种数据包修改方法
  5. 了解自动化加解密的实现方式

通过本教程和配套靶场的练习,可以显著提高黑盒渗透测试中对抗前端加密的能力。

前端加密对抗实战教程 一、前言 本教程详细介绍了前端加密的常见形式、对抗方法以及实战操作,附带一个完整的靶场环境用于练习。教程涵盖了从基础到高级的各种技术,包括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等工具 掌握多种数据包修改方法 了解自动化加解密的实现方式 通过本教程和配套靶场的练习,可以显著提高黑盒渗透测试中对抗前端加密的能力。