手把手js逆向断点调试&js逆向前端加密对抗&企业SRC实战分享
字数 2084 2025-09-01 11:25:53

JS逆向断点调试与前端加密对抗实战指南

0x1 前言

本文全面介绍JS逆向断点调试技术、前端加密对抗方法以及企业SRC实战案例。内容涵盖基础调试技巧、加密算法识别、靶场搭建、常用工具使用以及微信小程序常见的AES、RSA和Sign签名校验绕过技术。

0x2 加密算法定位方法

浏览器调试工具核心功能

  1. 作用域(Scope)

    • 全局作用域:函数和代码块之外声明的变量
    • 函数作用域:函数内部声明的变量
    • 块级作用域:{}中用let/const声明的变量
  2. 调用堆栈(Call Stack)

    • JavaScript管理函数调用的数据结构
    • 后进先出原则
    • 示例调用流程:a()→b()→c()→c出栈→b出栈→a出栈
  3. XHR断点

    • 用于在发送AJAX请求时暂停代码执行
    • 主要应用场景:
      • 调试接口请求参数
      • 查看请求发送时机
      • 分析请求拦截/修改逻辑

加密流程分析

  1. 用户输入账号密码
  2. 浏览器接收输入
  3. JS代码进行加密处理
  4. 发送加密数据到服务器
  5. 服务器解密并验证数据
  6. 返回验证结果

0x3 实战断点调试技巧

调试工具栏功能

按钮 功能描述
1 继续执行到下一个断点
2 跳过下一个函数调用
3 进入下一个函数上下文
4 跳出当前函数调用
5 单步调试
6 停用/激活全部断点

案例一:接口关键字搜索法

  1. 搜索"Vip/LoginResult"等接口关键字
  2. 在top文件中查找登录相关代码
  3. 设置多个断点进行分段调试
  4. 在控制台输入变量名查看加密数据

案例二:加密关键字搜索法

  1. 查找"publickey"等加密相关关键字
  2. 随机设置断点
  3. 触发登录操作
  4. 在控制台输入"dataJson.password"查看加密过程

案例三:标签断点法

  1. 在元素面板选中登录按钮
  2. 右键选择"子树修改"和"属性修改"
  3. 触发登录操作中断JS执行

0x4 JS逆向靶场搭建

encrypt-labs靶场安装

  1. 下载地址:https://github.com/SwagXz/encrypt-labs
  2. 解压到phpstudy的www目录
  3. 修改数据库配置为root/root
  4. PHP版本需≥7.3.4
  5. 创建encryptDB数据库并导入SQL
  6. 默认账号:admin/123456

0x5 常用解密工具

1. autoDecoder

  • 下载:https://github.com/f0ng/autoDecoder
  • BurpSuite插件,支持自动解密
  • 配置要点:设置正确的关键字和方法

2. Js-Forward

  • 下载:https://github.com/G-Security-Team/JS-Forward
  • 解决WEB参数加密问题

3. JsRpc

  • 下载:https://github.com/jxhczhl/JsRpc
  • 实现JS代码远程调用

4. ctool浏览器插件

  • 下载:https://github.com/baiy/Ctool
  • 浏览器内置加解密工具

0x6 AES对称加密对抗

AES特点

  • 微信小程序常用加密算法
  • 加密解密使用相同密钥
  • 关键词搜索:
    • encryptedData
    • AES.decrypt
    • CryptoJS.AES

固定Key破解

  1. 搜索"encryptedData"定位算法
  2. 分析固定key和iv
  3. 直接还原明文数据

服务端Key获取

  1. 使用autoDecoder配置解密方法
  2. 设置关键字如"password"
  3. 进行爆破尝试

0x7 RSA非对称加密对抗

RSA识别方法

  • 输入超长数值测试是否报错
  • 搜索关键词:
    • setpublickey
    • RSA.encrypt
    • JSEncrypt

破解步骤

  1. 搜索setpublickey找到公钥
  2. 断点调试获取原始数据
  3. 使用autoDecoder配置解密

0x8 Sign签名校验绕过

签名流程分析

  1. 参数组成:username、password、nonce、timestamp、signature
  2. 签名生成:
    • 拼接参数为dataToSign
    • 使用HmacSHA256加密(密钥:be56e057f20f883e)
  3. 后台验证签名一致性

绕过方法

  1. 搜索"signature"定位代码
  2. 断点调试获取签名算法
  3. 重新计算有效签名替换原值

0x9 企业SRC实战案例

商城优惠券并发漏洞

  1. 发现优惠券领取功能
  2. 抓包获取优惠券ID参数
  3. 使用并发插件爆破(建议20并发)
  4. 横向测试不同金额优惠券ID
  5. 验证优惠券可叠加使用

漏洞利用

  1. 普通用户只能领取100元券
  2. 通过并发可获取200元等高价值券
  3. 支付时可叠加使用多张优惠券

0x10 总结

本文系统介绍了JS逆向调试和前端加密对抗的全套技术,从基础调试到实战案例,涵盖了常见加密算法的识别和破解方法。关键点包括:

  1. 掌握浏览器调试工具的核心功能
  2. 熟练使用多种断点调试技巧
  3. 搭建本地靶场进行练习
  4. 合理运用自动化解密工具
  5. 理解不同加密算法的特点和对抗方法
  6. 将技术应用于实际漏洞挖掘

通过系统学习和实践,可以有效提升前端安全分析和漏洞挖掘能力。

JS逆向断点调试与前端加密对抗实战指南 0x1 前言 本文全面介绍JS逆向断点调试技术、前端加密对抗方法以及企业SRC实战案例。内容涵盖基础调试技巧、加密算法识别、靶场搭建、常用工具使用以及微信小程序常见的AES、RSA和Sign签名校验绕过技术。 0x2 加密算法定位方法 浏览器调试工具核心功能 作用域(Scope) 全局作用域:函数和代码块之外声明的变量 函数作用域:函数内部声明的变量 块级作用域:{}中用let/const声明的变量 调用堆栈(Call Stack) JavaScript管理函数调用的数据结构 后进先出原则 示例调用流程:a()→b()→c()→c出栈→b出栈→a出栈 XHR断点 用于在发送AJAX请求时暂停代码执行 主要应用场景: 调试接口请求参数 查看请求发送时机 分析请求拦截/修改逻辑 加密流程分析 用户输入账号密码 浏览器接收输入 JS代码进行加密处理 发送加密数据到服务器 服务器解密并验证数据 返回验证结果 0x3 实战断点调试技巧 调试工具栏功能 | 按钮 | 功能描述 | |------|----------| | 1 | 继续执行到下一个断点 | | 2 | 跳过下一个函数调用 | | 3 | 进入下一个函数上下文 | | 4 | 跳出当前函数调用 | | 5 | 单步调试 | | 6 | 停用/激活全部断点 | 案例一:接口关键字搜索法 搜索"Vip/LoginResult"等接口关键字 在top文件中查找登录相关代码 设置多个断点进行分段调试 在控制台输入变量名查看加密数据 案例二:加密关键字搜索法 查找"publickey"等加密相关关键字 随机设置断点 触发登录操作 在控制台输入"dataJson.password"查看加密过程 案例三:标签断点法 在元素面板选中登录按钮 右键选择"子树修改"和"属性修改" 触发登录操作中断JS执行 0x4 JS逆向靶场搭建 encrypt-labs靶场安装 下载地址:https://github.com/SwagXz/encrypt-labs 解压到phpstudy的www目录 修改数据库配置为root/root PHP版本需≥7.3.4 创建encryptDB数据库并导入SQL 默认账号:admin/123456 0x5 常用解密工具 1. autoDecoder 下载:https://github.com/f0ng/autoDecoder BurpSuite插件,支持自动解密 配置要点:设置正确的关键字和方法 2. Js-Forward 下载:https://github.com/G-Security-Team/JS-Forward 解决WEB参数加密问题 3. JsRpc 下载:https://github.com/jxhczhl/JsRpc 实现JS代码远程调用 4. ctool浏览器插件 下载:https://github.com/baiy/Ctool 浏览器内置加解密工具 0x6 AES对称加密对抗 AES特点 微信小程序常用加密算法 加密解密使用相同密钥 关键词搜索: encryptedData AES.decrypt CryptoJS.AES 固定Key破解 搜索"encryptedData"定位算法 分析固定key和iv 直接还原明文数据 服务端Key获取 使用autoDecoder配置解密方法 设置关键字如"password" 进行爆破尝试 0x7 RSA非对称加密对抗 RSA识别方法 输入超长数值测试是否报错 搜索关键词: setpublickey RSA.encrypt JSEncrypt 破解步骤 搜索setpublickey找到公钥 断点调试获取原始数据 使用autoDecoder配置解密 0x8 Sign签名校验绕过 签名流程分析 参数组成:username、password、nonce、timestamp、signature 签名生成: 拼接参数为dataToSign 使用HmacSHA256加密(密钥:be56e057f20f883e) 后台验证签名一致性 绕过方法 搜索"signature"定位代码 断点调试获取签名算法 重新计算有效签名替换原值 0x9 企业SRC实战案例 商城优惠券并发漏洞 发现优惠券领取功能 抓包获取优惠券ID参数 使用并发插件爆破(建议20并发) 横向测试不同金额优惠券ID 验证优惠券可叠加使用 漏洞利用 普通用户只能领取100元券 通过并发可获取200元等高价值券 支付时可叠加使用多张优惠券 0x10 总结 本文系统介绍了JS逆向调试和前端加密对抗的全套技术,从基础调试到实战案例,涵盖了常见加密算法的识别和破解方法。关键点包括: 掌握浏览器调试工具的核心功能 熟练使用多种断点调试技巧 搭建本地靶场进行练习 合理运用自动化解密工具 理解不同加密算法的特点和对抗方法 将技术应用于实际漏洞挖掘 通过系统学习和实践,可以有效提升前端安全分析和漏洞挖掘能力。