前言
本文介绍 JavaScript 逆向工程中的断点调试技巧,包括作用域、调用堆栈和 XHR 断点的使用。通过实际案例演示了如何定位前端加密算法(如 AES、RSA)及绕过签名校验。此外,还分享了基于企业 SRC 的并发漏洞挖掘实战,涉及优惠券领取场景的安全测试。
如何找到加密算法
主要通过浏览器开发者工具(F12)调试 JS 前端代码。需要理解以下三个功能:
一、作用域(Scope)
作用域是指变量、函数和对象在代码中可访问的范围。
主要类型:
- 全局作用域:在所有函数和代码块之外声明的变量。
const globalVar = "我是全局变量";
function test() {
console.log(globalVar);
}
- 函数作用域:在函数内部声明的变量。
function test() {
const funcVar = "我是函数内变量";
console.log(funcVar);
}
- 块级作用域:由
{}包裹的代码块中用let/const声明的变量。
if (true) {
const blockVar = "我是块内变量";
console.log(blockVar);
}
二、调用堆栈(Call Stack)
调用堆栈是 JavaScript 引擎用于管理函数调用顺序的数据结构。
示例:
function a() { console.log("a 开始"); b(); console.log("a 结束"); }
function b() { console.log("b 开始"); c(); console.log("b 结束"); }
function c() { console.log("c 执行"); }
a();
三、XHR 断点(XHR Breakpoint)
用于在发送 AJAX 请求时暂停代码执行,方便调试网络请求相关逻辑。
四、JS 基础断点调试
输入账号密码后,观察网络请求,常见加密内容为 MD5、Base64。若发现非标准加密方式,需通过断点调试分析传输前的加密字段。
流程:用户输入 -> 浏览器接收 -> JS 加密 -> 发送到服务器 -> 服务器解密验证。
实战断点调试 - 找加密算法
一、案例一
使用开发者工具搜索接口关键字(如 Vip/LoginResult),在对应 JS 文件中设置断点。点击登录触发断点后,可在控制台查看加密数据(如手机号、密码)。
二、案例二
在网络数据包中找到加密字段,搜索 publickey 等关键字定位 JS 代码。设置断点后,在控制台输入变量名即可查看加密后的数据。
常见关键词:encrypt, encryptedData, setPublicKey, publicKey。
三、案例三
使用标签断点法:选中 DOM 元素(如登录按钮),右键选择'修改子树'或'属性修改',触发操作时即可捕获 JS 代码执行。
JS 逆向靶场搭建
前端加密对抗练习靶场(encrypt-labs)可用于本地练习。
- 下载项目并解压至 Web 目录。
- 修改数据库配置文件,确保用户名和密码与本地环境一致。
- 注意 PHP 版本需大于 7.3.4,避免 OpenSSL 报错。
- 创建数据库并导入 SQL 数据。
- 使用默认账号密码登录完成搭建。
解密工具
常用工具包括 autoDecoder、Js-Forward、JsRpc、Ctool 等,可根据实际需求选择使用。
对称加密-AES 加解密
一、AES 加解密简介
高级加密标准(AES)为常见的对称加密算法,微信小程序常使用此算法进行加密传输。加密和解密使用相同的密钥。
二、AES 固定 Key
若 Key 和 IV 写死在前端,可通过抓包定位 encryptedData 字段,直接还原明文。
三、AES 服务端获取 Key
若 Key 未在前端,可使用抓包工具配合插件进行爆破或分析。
非对称加密-RSA 加解密
一、如何快速判定 RSA
RSA 只能加密短小数据,尝试超长数值通常会报错。全局搜索 setpublickey、encrypt 等关键字。
二、RSA 加密
通过前端 JS 找到公钥,结合断点调试定位原始数据,使用相应工具进行解密。
Sign 签名校验绕过
数据包参数通常包含 username、password、nonce、timestamp、signature。
- 拼接待签名数据:
username + password + nonce + timestamp。 - 使用
CryptoJS.HmacSHA256方法,配合secretKey生成签名。 - 替换数据包中的 signature 值即可通过校验。
企业 SRC 实战分享—优惠券
在企业 SRC 商城资产中,测试会员优惠券领取功能。
- 抓包分析优惠券 ID。
- 利用并发脚本对同一 ID 或多个不同金额 ID 进行并发请求。
- 若后端未做锁机制,可能导致重复领取或越权领取。
- 验证支付界面是否支持叠加使用,确认漏洞危害等级。
总结
本文介绍了 JavaScript 逆向的基础知识与实战技巧,涵盖断点调试、加密算法分析及签名绕过。同时分享了企业 SRC 中的并发漏洞挖掘案例。建议读者在实际操作中遵守法律法规,仅在授权范围内进行测试。


