手把手js逆向断点调试&js逆向前端加密对抗&企业SRC实战分享

手把手js逆向断点调试&js逆向前端加密对抗&企业SRC实战分享

0x1 前言

哈咯,师傅们!最近在学习js逆向相关的知识点,跟着网上的师傅的课程已经很多相关文章探索学习,今天想着写一篇js逆向断点调试&js逆向前端加密对抗相关的文章出来,给师傅们分享下,有不正确的地方,希望大佬勿喷。

这篇文章主要是给没有学习过js逆向的师傅学习的,分享一些js逆向基础知识,js实战断点调试技巧以及后面分享js逆向靶场搭建以及js逆向前端加密对抗,拿微信小程序常用的AES、RSA和明文Sign 签名校验绕过几个方面给师傅们分享下操作技巧。

最后面给师傅们分享一个前段时间搞的一个企业src的商城优惠卷并发漏洞,也是拿到了一千块的赏金,漏洞都很详细的给师傅们分享了这个案例,师傅们看完我上面的js断点调试和js前端加解密靶场打法等,可以去尝试玩下,要是有地方写的有问题,大佬勿喷!

0x2 如何找到加密算法

这里我直接拿Google浏览器控制面板来给师傅们演示下这个流程,主要是通过F12调试控制js前端代码

其中里面的作用域,调用堆栈,XHR断点这三个功能需要了解认识下

一、作用域(Scope)

作用域是指变量、函数和对象在代码中可访问的范围,决定了标识符(变量名、函数名)的可见性。

主要类型:

  • 全局作用域:在所有函数和代码块之外声明的变量,在整个程序中都可访问。
const globalVar = "我是全局变量"; function test() { console.log(globalVar); // 可访问 }
  • 函数作用域:在函数内部声明的变量,仅在该函数内部可访问。
function test() { const funcVar = "我是函数内变量"; console.log(funcVar); // 可访问 } console.log(funcVar); // 报错:未定义
  • 块级作用域:由 {} 包裹的代码块(如 ifforwhile)中用 let/const 声明的变量,仅在块内可访问。
if (true) { const blockVar = "我是块内变量"; console.log(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();

调用堆栈过程:

  1. 执行 a()a 入栈 → 栈:[a]
  2. a 中调用 b()b 入栈 → 栈:[a, b]
  3. b 中调用 c()c 入栈 → 栈:[a, b, c]
  4. c 执行完毕 → c 出栈 → 栈:[a, b]
  5. b 执行完毕 → b 出栈 → 栈:[a]
  6. a 执行完毕 → a 出栈 → 栈空

作用: 追踪函数执行顺序,调试时可通过堆栈信息定位代码执行路径(如报错时的“堆栈跟踪”)。

三 、XHR断点(XHR Breakpoint)

XHR断点是浏览器开发者工具中的一种调试功能,用于在发送AJAX请求(XMLHttpRequest 或 Fetch)时暂停代码执行,方便调试网络请求相关逻辑。

使用场景:

  • 调试接口请求参数是否正确
  • 查看请求发送时机和触发条件
  • 分析请求被拦截或修改的逻辑

四、 js基础断点调试

我们这里随便输入一个电话号码以及密码,直接看这个网络这里,可以看到账户输入的账户、密码都被进行了加密

其中我们常见的加密内容是md5、base64加密的,但是下面这个系统加密的一看就不是常见的加密方式

像这个,我们要是想要在我们输入账户密码的后,在传输到服务器端中可以将其加密的字段截取,然后进行分析,看看这个网站是使用什么类型进行加密的,就可以进行破解了,这就是后面我需要讲的js断点调试。

我们输入账号密码-> 浏览器接受到我们的账号密码-> 根据js进行加密-> 发送到对方的服务器(网页)

服务器接收数据-> 对我们的数据进行解密-> 判断我们的数据解密后是否正常-> 正常就返回正常结果(否则返回报错)

0x3 实战断点调试-找加密算法

一、案例一

在讲这个案例断点调试之前,先带师傅们认识下这几个按钮工具作用

工具栏作为断点调试的操作工具,包含了 6 个按钮:

  • 按钮 1:让代码继续执行,运行到下一个断点会中断执行,如果没有设置断点会直接运行完代码
  • 按钮 2:跳过下一个函数调用。即不遇到函数时,执行下一步;遇到函数时,不进入函数直接执行下一步
  • 按钮 3:跳进下一个函数上下文。即不遇到函数时,执行下一步;遇到函数时,进入函数上下文,查看函数具体内容
  • 按钮 4:跳出当前函数调用
  • 按钮 5:单步调试,当前断点的下一步
  • 按钮 6:停用/激活全部断点

这里直接搜索Vip/LoginResult接口关键字,因为我们断点调试的话需要点击web端端某个个功能点,出发我们后面打的断点才可以成功,这里我们开始点击登陆,直接请求的是这个接口,所有这里我们可以先搜索这个Vip/LoginResult关键词看看

这里直接选择最上面的top文件,右击选择在所有文件中搜索

找到这个有关登陆功能处的代码,然后打断点

可以尝试多打几个断点,然后挨个阶段运行调试看看

点击登陆按钮,就可以成功执行断点了,右边那个按钮就是执行到下一个断点

可以看到图中,代码断点运行成功了,在控制台输入logindata,就可以显示对应的加密数据了(手机号、密码)

二、案例二

老规矩还是直接输入手机号和密码,然后看F12中的网络数据包,可以看到这里的密码也是进行了加密

找到登陆口附近的js代码,寻找publickey关键字

这里先随机设置一个断点

设置好断点后,点击登录,即可触发断点,进行 js 断点的调试。

可以看到点击完登陆,出现了这个功能

常见的js逆向加密搜索关键字:

encrypt encryptedData setPublicKey publicKey

直接进行js断点调试,在控制台输入dataJson.password,就可以看到密码的js加密数据

三、案例三

这里再给师傅们分享一个标签断点法,这里刚好有个网上实际的站点,拿出来给师傅们分享下

线F12,然后点击1,然后把鼠标选中2(登陆功能上)

然后右键选中“登陆”标签,将子树修改,和属性修改都勾选上。然后我们随便输入一个账号密码点击登录

这样就可以成功 把运行的js代码给断下来了,但是目前这个网站今天写文章的时候已经找不到加密函数了,可能是已经修复了这个系统

0x4 js逆向靶场安装

前端加密对抗练习靶场——encrypt-labs下载链接:https://github.com/SwagXz/encrypt-labs

1、直接下载这个压缩包即可

2、然后解压之后直接放在phpstudy的www网站目录下

3、这里还需要把这个文件下的数据库的用户名和密码都修改成phpstudy默认的root

要不然会提示连接数据库账号密码错误

4、还需要注意的一点就是php的版本需要大于7.3.4版本

要不然会有提示openssl等服务启动不了等报错

5、使用命令行创建encryptDB数据库

mysql -u root -p create database encryptDB 

6、导入sql数据

mysql> use encryptdb; Database changed mysql> source C:\phpstudy_pro\WWW\encrypt-labs-main\encryptDB.sql

账号密码是:admin:123456,直接登陆即可完成靶场搭建了

0x5 解密工具下载

一、autoDecoder

工具下载链接:https://github.com/f0ng/autoDecoder

下载jar文件那个,直接导入burpsuit插件即可使用

具体的使用和操作方法,师傅们可以看这个文章,写的很详细:

https://blog.ZEEKLOG.net/2202_75361164/article/details/144360050

二、Js-Forward脚本工具

Js-Forward是为了解决在渗透测试过程中所遇到的WEB参数加密而开发出的脚本工具

工具下载链接:https://github.com/G-Security-Team/JS-Forward

三、JsRpc工具

工具下载链接:https://github.com/jxhczhl/JsRpc/releases/tag/v1.095

具体操作使用方法如下:https://github.com/jxhczhl/JsRpc

四、ctool浏览器插件加解密

工具下载链接:https://github.com/baiy/Ctool/releases/tag/v2.3.0

这里直接拿Google浏览器演示,下载下面的压缩包

然后解压,Google浏览器插件点击加载这个工具文件夹即可

0x6 对称加密-AES 加解密

一、AES 加解密简介

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序)加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:

AES 加解密:常用的微信小程序加解密方法

常见的搜索关键词:

encrypt、encryptedData、setpublickey

二、AES固定Key

第一种比较简单,key和iv写死,抓包发现数据传输被加密了

这里直接定位搜索“encryptedData”加密字段定位到算法位置

简单的分析,就是一个固定key 和iv 的aes加密,直接还原明文数据

{"username":"admin","password":"123456"}

三、AES服务端获取key

key和iv没有写在前端,直接使用bp抓包即可

这里使用bp插件autoDecoder,先配置自带的方法,红框的配置要注意配置好

主页面配置,仅登录所以关键字写了password

然后进入intruder进行爆破登录尝试

成功爆破

0x7 非对称加密-RSA 加解密

一、如何快速判定 RSA 呢?

RSA 只能加密短小的数据,如果数据太大,会直接报错,因此可以入超长数值,看看是否报错!

提示了这个错误,显示加密失败,说明就是非对称加密- RSA加密了

对于非对称加密,他需要设置公钥,因此一般全局搜索:

setpublickey、encrypt

二、RSA 加密

这个关卡不难,搜索非对称加密RSA常用的加密关键字:setpublickey,通过前端js找到公钥

然后通过断点调试,进行找到没有加密的原始数据

跟上面一样使用bp的插件autoDeceder

0x8 Sign 签名校验绕过

直接使用bp抓包,数据包的参数如下:username、password、nonce、timestamp、signature

我们这里来给师傅们演示下这个signature参数的由来

登陆界面,密码输入1234567,返回包提示密码错误

这个靶场的密码是123456,那么在bp数据包中,直接这里就把密码修改成123456,看看返回包

显示signature校验不正确,因为前面username、password、nonce、timestamp参数会生成signature传入到后台,后台就回和我们这里输入到signature进行匹配,要是不一样,就会进行报错

搜索关键字:signature,去断点看js代码

function sendDataWithNonce(url) { const username = document.getElementById("username") .value; const password = document.getElementById("password") .value; const nonce = Math.random() .toString(36) .substring(2); const timestamp = Math.floor(Date.now() / 1000); const secretKey = "be56e057f20f883e"; const dataToSign = username + password + nonce + timestamp; const signature = CryptoJS.HmacSHA256(dataToSign, secretKey) .toString(CryptoJS.enc.Hex);

打完断点,点击明文加签,进行断点调试

  1. 首先将usernamepasswordnonce(随机数)和timestamp(时间戳)拼接成一个字符串dataToSign,作为待签名的数据
拼接:admin123456drzeh01d5sn1755059730 

  1. 使用CryptoJS库的HmacSHA256方法,用secretKey(be56e057f20f883e)对拼接后的字符串进行 HMAC-SHA256 加密,生成signature(签名)
cd5e4af5343372cc5945539cddb67c8d33ae0f9be361c60e935e80b4c5a5f719

  1. 这样再替换回到数据包中即可成功登陆了

0x9 企业SRC实战分享—优惠卷

这个企业SRC是个商城的web资产应用,一进去,直接使用手机号登陆,因为像这样的可以直接使用手机号登陆(有账号),方便后续的渗透测试,很多功能点可能得登陆进去才可以测试

上面图片中,登陆到后台,有好几个功能点跟会员优惠卷有关系,商城优惠卷并发领取,必须得测下

点击领取,然后进行抓包测试,可以看到优惠卷的ID,为什么这里我要提下这个ID值呢,因为在后面我们还可以进行优惠卷横向并发,把不同金额的优惠卷ID进行便利并发领取,比如说你新人只能领取100元的,但是你通过ID横向并发领取到了200元的客户回归优惠卷,那么这个对商城是不是就有一定的危害了

然后可以使用这个并发插件脚本进行爆破,数量可以设置20个即可

def queueRequests(target, wordlists): engine = RequestEngine(endpoint=target.endpoint, concurrentConnections=20, requestsPerConnection=100, pipeline=False ) for i in range(20): engine.queue(target.req, target.baseInput, gate='race1') engine.openGate('race1') engine.complete(timeout=60) def handleResponse(req, interesting): table.add(req)

可以看到数据包的状态200和长度都是一样的,那就说明我们成功进行了并发操作

然后返回账号的卡卷中心,发现领取了24张优惠卷

其中里面有20元、50元、100元优惠卷,并发操作都一样,都可以进行无限并发领取优惠卷

返回会员支付界面,可以看到支付的优惠卷都是可以直接使用叠加的,漏洞提交平台,一千块大洋到手

0x10 总结

这篇文章到这里就结束了,希望看完这篇文章对师傅们有帮助,该文章主要是记录和分享我的学习过程和一些漏洞挖掘的案例和手法等,本人技术水平一般,有问题欢迎师傅们加我微信交流学习!

最后祝愿看了这篇文章的师傅们,天天有漏洞产出,天天有src赏金!

Read more

AI驱动的PDF文档智能解析:MinerU本地部署与API调用完全指南

什么是MinerU? MinerU是一个将复杂文档(如PDF)转换为LLM就绪的markdown/JSON格式的工具,用于Agentic工作流。相比传统PDF解析工具,MinerU在文档结构解析、多媒体提取、公式识别等方面有着显著优势。 主要功能包括: * 文档结构解析:移除页眉页脚、脚注、页码等,确保语义连贯性 * 内容提取:输出按人类可读顺序排列的文本,支持单列、多列和复杂布局 * 格式保持:保留原始文档结构(标题、段落、列表等) * 多媒体提取:提取图像、图像描述、表格、表格标题和脚注 * 公式识别:自动将文档中的公式转换为LaTeX格式 * 表格识别:自动将表格转换为HTML格式 * OCR支持:自动检测扫描版PDF并启用OCR功能,支持84种语言 * 多平台支持:兼容Windows、Linux、Mac平台,支持CPU/GPU/NPU加速 环境准备与安装 硬件要求 * CPU推理:支持纯CPU环境 * GPU要求:Turing架构及以上,

SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识

SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识

🔥博客主页: 【小扳_-ZEEKLOG博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录         1.0 SpringAI 概述         1.1 大模型的使用         2.0 SpringAI 新手入门         2.1 配置 pom.xml 文件         2.2 配置 application.yaml 文件         2.3 配置 ChatClient         2.4 同步调用         2.5 流式调用         2.6 System 设定         2.7 日志功能         2.8 会话记忆功能

CCF-CV企业交流会:打造大模型时代的可信AI,探索AI安全治理新路径

CCF-CV企业交流会:打造大模型时代的可信AI,探索AI安全治理新路径

〇、前言 近日,由中国计算机学会计算机视觉专委会(CCF-CV)主办,合合信息承办,中国运筹学会数学与智能分会协办的《打造大模型时代的可信AI》论坛顺利举行。论坛特邀来自上海交通大学、电子技术标准化研究院、中国科学技术大学、中科院、合合信息等机构与企业的专家们,从立法、监管、前沿研究、技术实践等多个维度分享AI安全领域的最新进展,助力AI向善发展。 一、AI安全治理:产学研共话可信AI未来 随着以ChatGPT为代表的AI大语言模型技术的飞速发展,数据安全、知识产权、算法偏见和有害内容生成等大语言模型的内容安全问题日益凸显。如何确保AI大模型在生成内容的过程中遵循安全规范,成为业界关注的焦点。 论坛现场,嘉宾们纷纷就AI安全治理的热点话题发表了自己的见解。 上海交通大学人工智能研究院教授金耀辉指出,安全是一个抽象的概念,而安全对齐的过程则是一个从抽象到具体的模拟过程。通过这些手段,我们可以确保AI大模型在训练过程中就能够遵循安全规范,从而避免潜在的安全风险。 金耀辉教授提出“训练对齐、提示引导和文本过滤”三大安全保障手段,为AI安全治理这一问题的解决提供了新思

一篇5000字教程教大家怎么在Pycharm中调用AI模型的API进行辅助编程(可以免费无限使用Gemini-2.5-Flash-lite,Claude4.5也能调用)

一篇5000字教程教大家怎么在Pycharm中调用AI模型的API进行辅助编程(可以免费无限使用Gemini-2.5-Flash-lite,Claude4.5也能调用)

目录 1. 你要实现的效果,先在脑子里“对齐”一遍 2. 在 PyCharm 安装 ProxyAI,并确认它能正常弹出聊天窗口 3. 获取API镜像站的 API Key,并理解它在 ProxyAI 里应该填到哪 4. 在 ProxyAI 里把 Provider 切到 Custom OpenAI,并把 base URL 指向该镜像站 4.1 Base URL 到底应该填什么:要不要带 /chat/completions? 4.2 Model 应该怎么填:是“模型昵称”还是“模型 ID”? 5. 先别急着在插件里“