【转载】手把手js逆向断点调试&js逆向前端加密对抗&企业SRC实战分享
字数 2973 2025-09-23 19:27:38

JavaScript逆向工程与前端加密对抗实战教学文档

0x1 前言

本文档旨在系统性地介绍JavaScript逆向工程(JS逆向)的基础知识、核心调试技巧以及针对常见前端加密算法的分析与对抗方法。内容涵盖JS逆向环境搭建、工具使用、实战案例及企业SRC漏洞挖掘,为安全研究人员和渗透测试人员提供全面的学习指南。


0x2 JS逆向基础:核心概念与调试原理

一、作用域(Scope)

作用域定义了变量、函数和对象的可访问范围,是理解代码执行流程的基础。

  • 全局作用域:在函数和代码块之外声明,全局可访问。
  • 函数作用域:在函数内部声明,仅函数内可访问。
  • 块级作用域:由 {} 形成,let/const 声明的变量仅块内可访问。

二、调用堆栈(Call Stack)

调用堆栈是JavaScript管理函数调用的数据结构,遵循后进先出(LIFO)原则。用于追踪函数执行顺序,调试时可通过堆栈信息定位代码执行路径。

三、XHR断点(XHR Breakpoint)

浏览器开发者工具中的调试功能,用于在发送AJAX请求(XMLHttpRequest或Fetch)时暂停代码执行,便于分析网络请求参数、触发逻辑及加密过程。

四、JS基础断点调试流程

  1. 用户输入数据(如账号密码)。
  2. 浏览器接收数据并由JS代码加密。
  3. 加密数据发送至服务器。
  4. 服务器解密并验证数据,返回结果。

0x3 实战断点调试:定位加密算法

一、案例一:关键字搜索与断点设置

  1. 在Network面板中定位登录接口(如Vip/LoginResult)。
  2. 在Source面板全局搜索接口关键词。
  3. 在疑似加密代码行设置断点。
  4. 触发登录操作,断点命中后通过控制台查看加密前数据(如logindata)。

二、案例二:公钥加密定位

  1. 搜索常见加密关键字(如encryptsetPublicKeypublicKey)。
  2. 设置断点并触发登录。
  3. 在控制台查看加密对象(如dataJson.password)。

三、案例三:DOM断点法

  1. 在Elements面板选中登录按钮。
  2. 右键选择“中断” → “子树修改”或“属性修改”。
  3. 触发登录操作,断点将命中关联的JS代码。

常见加密搜索关键字
encrypt, encryptedData, setPublicKey, publicKey, signature, nonce, timestamp


0x4 JS逆向靶场环境搭建

一、靶场下载与部署

  • 项目名称:encrypt-labs
  • 下载地址:https://github.com/SwagXz/encrypt-labs
  • 部署步骤:
    1. 解压至PHPStudy的www目录。
    2. 修改数据库配置为PHPStudy默认(用户名/密码:root/root)。
    3. 确保PHP版本 ≥ 7.3.4(支持OpenSSL)。
    4. 创建数据库:create database encryptDB
    5. 导入SQL文件:source <路径>/encryptDB.sql
  • 测试账号:admin/123456

0x5 解密与调试工具详解

一、autoDecoder(BurpSuite插件)

  • 功能:自动化解码加密请求/响应。
  • 配置要点
    • 设置加密/解密函数路径。
    • 定义请求参数加密规则(如仅加密password字段)。
  • 使用场景:Intruder爆破加密参数。

二、Js-Forward脚本工具

  • 用途:解决渗透测试中的WEB参数加密问题。
  • 项目地址:https://github.com/G-Security-Team/JS-Forward

三、JsRpc工具

  • 功能:本地调用JS加密函数,实时生成参数。
  • 项目地址:https://github.com/jxhczhl/JsRpc

四、ctool浏览器插件

  • 功能:集成常见加解密算法(如AES、RSA、SHA256)。
  • 安装:下载CRX文件后手动加载至浏览器扩展程序。

0x6 对称加密:AES加解密对抗

一、AES简介

  • 微信小程序常用加密算法。
  • 特点:加密与解密使用相同密钥(Key)和初始向量(IV)。

二、AES固定Key破解

  1. 抓包发现加密数据。
  2. 搜索encryptedData定位加密函数。
  3. 分析JS代码提取固定Key和IV。
  4. 使用相同参数本地解密(如CryptoJS库)。

三、AES动态Key破解(服务端下发)

  1. 抓包获取Key/IV(通常存在于登录前响应包)。
  2. 使用autoDecoder配置Key/IV路径。
  3. 在Intruder中设置Payload Processing,调用解密函数爆破。

0x7 非对称加密:RSA加解密对抗

一、快速判定RSA加密

  • 输入超长数值触发加密错误(RSA仅支持短数据加密)。
  • 搜索关键字:setPublicKeyencrypt

二、RSA加密破解流程

  1. 通过前端JS获取公钥。
  2. 断点调试获取加密前原始数据。
  3. 使用autoDecoder配置公钥路径及加密函数。
  4. 爆破或重放加密请求。

0x8 Sign签名校验绕过

一、签名参数分析

常见参数:username, password, nonce(随机数), timestamp(时间戳), signature(签名)。

二、签名生成原理

  1. 拼接字符串:dataToSign = username + password + nonce + timestamp
  2. 使用HMAC-SHA256与密钥(secretKey)生成签名:
    signature = CryptoJS.HmacSHA256(dataToSign, secretKey).toString(CryptoJS.enc.Hex)

三、绕过步骤

  1. 搜索signature定位签名函数。
  2. 断点调试获取secretKey及拼接逻辑。
  3. 修改请求参数后重新计算签名并重放。

0x9 企业SRC实战:优惠券并发漏洞

一、漏洞背景

  • 目标:商城Web应用
  • 漏洞类型:优惠券无限并发领取
  • 危害:横向领取高面值优惠券,叠加支付造成资损

二、测试流程

  1. 登录后抓取领取优惠券请求(含优惠券ID参数)。
  2. 使用Turbo Intruder或Burp Intruder并发请求(并发数20+)。
  3. 验证响应状态码及长度是否一致。
  4. 检查账户确认优惠券数量增加。

三、漏洞扩展

  • 横向漏洞:遍历不同ID领取高面值优惠券(如200元回归券)。
  • 奖励:漏洞提交获赏金1000元。

0x10 总结与建议

  1. 核心技能:掌握作用域、调用堆栈、XHR断点是调试基础。
  2. 工具链:熟练使用autoDecoder、JsRpc、ctool等工具提升效率。
  3. 加密对抗
    • AES:关注Key/IV来源(固定或动态)。
    • RSA:利用报错特征和公钥搜索。
    • 签名校验:分析拼接逻辑和密钥。
  4. 实战技巧
    • 多断点设置结合控制台观察。
    • 并发漏洞测试注意参数遍历和ID操纵。
  5. 学习建议:搭建encrypt-labs靶场反复练习,结合企业SRC案例深化理解。

原文作者:一个想当文人的黑客
原文链接:先知社区
注意:本文仅供学习交流,请勿用于非法用途。

JavaScript逆向工程与前端加密对抗实战教学文档 0x1 前言 本文档旨在系统性地介绍JavaScript逆向工程(JS逆向)的基础知识、核心调试技巧以及针对常见前端加密算法的分析与对抗方法。内容涵盖JS逆向环境搭建、工具使用、实战案例及企业SRC漏洞挖掘,为安全研究人员和渗透测试人员提供全面的学习指南。 0x2 JS逆向基础:核心概念与调试原理 一、作用域(Scope) 作用域定义了变量、函数和对象的可访问范围,是理解代码执行流程的基础。 全局作用域 :在函数和代码块之外声明,全局可访问。 函数作用域 :在函数内部声明,仅函数内可访问。 块级作用域 :由 {} 形成, let / const 声明的变量仅块内可访问。 二、调用堆栈(Call Stack) 调用堆栈是JavaScript管理函数调用的数据结构,遵循后进先出(LIFO)原则。用于追踪函数执行顺序,调试时可通过堆栈信息定位代码执行路径。 三、XHR断点(XHR Breakpoint) 浏览器开发者工具中的调试功能,用于在发送AJAX请求(XMLHttpRequest或Fetch)时暂停代码执行,便于分析网络请求参数、触发逻辑及加密过程。 四、JS基础断点调试流程 用户输入数据(如账号密码)。 浏览器接收数据并由JS代码加密。 加密数据发送至服务器。 服务器解密并验证数据,返回结果。 0x3 实战断点调试:定位加密算法 一、案例一:关键字搜索与断点设置 在Network面板中定位登录接口(如 Vip/LoginResult )。 在Source面板全局搜索接口关键词。 在疑似加密代码行设置断点。 触发登录操作,断点命中后通过控制台查看加密前数据(如 logindata )。 二、案例二:公钥加密定位 搜索常见加密关键字(如 encrypt 、 setPublicKey 、 publicKey )。 设置断点并触发登录。 在控制台查看加密对象(如 dataJson.password )。 三、案例三:DOM断点法 在Elements面板选中登录按钮。 右键选择“中断” → “子树修改”或“属性修改”。 触发登录操作,断点将命中关联的JS代码。 常见加密搜索关键字 : encrypt , encryptedData , setPublicKey , publicKey , signature , nonce , timestamp 0x4 JS逆向靶场环境搭建 一、靶场下载与部署 项目名称:encrypt-labs 下载地址:https://github.com/SwagXz/encrypt-labs 部署步骤: 解压至PHPStudy的 www 目录。 修改数据库配置为PHPStudy默认(用户名/密码: root / root )。 确保PHP版本 ≥ 7.3.4(支持OpenSSL)。 创建数据库: create database encryptDB 。 导入SQL文件: source <路径>/encryptDB.sql 。 测试账号: admin / 123456 0x5 解密与调试工具详解 一、autoDecoder(BurpSuite插件) 功能 :自动化解码加密请求/响应。 配置要点 : 设置加密/解密函数路径。 定义请求参数加密规则(如仅加密 password 字段)。 使用场景 :Intruder爆破加密参数。 二、Js-Forward脚本工具 用途 :解决渗透测试中的WEB参数加密问题。 项目地址 :https://github.com/G-Security-Team/JS-Forward 三、JsRpc工具 功能 :本地调用JS加密函数,实时生成参数。 项目地址 :https://github.com/jxhczhl/JsRpc 四、ctool浏览器插件 功能 :集成常见加解密算法(如AES、RSA、SHA256)。 安装 :下载CRX文件后手动加载至浏览器扩展程序。 0x6 对称加密:AES加解密对抗 一、AES简介 微信小程序常用加密算法。 特点:加密与解密使用相同密钥(Key)和初始向量(IV)。 二、AES固定Key破解 抓包发现加密数据。 搜索 encryptedData 定位加密函数。 分析JS代码提取固定Key和IV。 使用相同参数本地解密(如CryptoJS库)。 三、AES动态Key破解(服务端下发) 抓包获取Key/IV(通常存在于登录前响应包)。 使用autoDecoder配置Key/IV路径。 在Intruder中设置Payload Processing,调用解密函数爆破。 0x7 非对称加密:RSA加解密对抗 一、快速判定RSA加密 输入超长数值触发加密错误(RSA仅支持短数据加密)。 搜索关键字: setPublicKey 、 encrypt 。 二、RSA加密破解流程 通过前端JS获取公钥。 断点调试获取加密前原始数据。 使用autoDecoder配置公钥路径及加密函数。 爆破或重放加密请求。 0x8 Sign签名校验绕过 一、签名参数分析 常见参数: username , password , nonce (随机数), timestamp (时间戳), signature (签名)。 二、签名生成原理 拼接字符串: dataToSign = username + password + nonce + timestamp 使用HMAC-SHA256与密钥( secretKey )生成签名: signature = CryptoJS.HmacSHA256(dataToSign, secretKey).toString(CryptoJS.enc.Hex) 三、绕过步骤 搜索 signature 定位签名函数。 断点调试获取 secretKey 及拼接逻辑。 修改请求参数后重新计算签名并重放。 0x9 企业SRC实战:优惠券并发漏洞 一、漏洞背景 目标:商城Web应用 漏洞类型:优惠券无限并发领取 危害:横向领取高面值优惠券,叠加支付造成资损 二、测试流程 登录后抓取领取优惠券请求(含优惠券ID参数)。 使用Turbo Intruder或Burp Intruder并发请求(并发数20+)。 验证响应状态码及长度是否一致。 检查账户确认优惠券数量增加。 三、漏洞扩展 横向漏洞 :遍历不同ID领取高面值优惠券(如200元回归券)。 奖励 :漏洞提交获赏金1000元。 0x10 总结与建议 核心技能 :掌握作用域、调用堆栈、XHR断点是调试基础。 工具链 :熟练使用autoDecoder、JsRpc、ctool等工具提升效率。 加密对抗 : AES:关注Key/IV来源(固定或动态)。 RSA:利用报错特征和公钥搜索。 签名校验:分析拼接逻辑和密钥。 实战技巧 : 多断点设置结合控制台观察。 并发漏洞测试注意参数遍历和ID操纵。 学习建议 :搭建encrypt-labs靶场反复练习,结合企业SRC案例深化理解。 原文作者:一个想当文人的黑客 原文链接:先知社区 注意:本文仅供学习交流,请勿用于非法用途。