【转载】手把手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基础断点调试流程
- 用户输入数据(如账号密码)。
- 浏览器接收数据并由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。
- 解压至PHPStudy的
- 测试账号:
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案例深化理解。
原文作者:一个想当文人的黑客
原文链接:先知社区
注意:本文仅供学习交流,请勿用于非法用途。