☰
JS 逆向入门:读懂前端加密参数,突破接口签名校验
2026/9/30 8:58:13 网站建设 项目流程

JS 逆向入门:读懂前端加密参数,突破接口签名校验

前言

在现在的 Web、H5、小程序、APP 网页端业务中,越来越多网站会对接口请求参数做前端加密。常见的有sign、token、timestamp、nonce这类签名参数。很多同学使用 Burp 抓包后发现:请求体里面多了一串 sign 值,每次刷新页面、每次发包 sign 都会变化,直接复制旧包重放就会返回签名错误。

不少新人遇到接口签名第一反应:这是后端加密,无法测试。其实绝大多数网站的 sign 都是前端 JS 生成。JS 逆向就是找到生成加密参数的 JS 代码,读懂加密逻辑,甚至复写加密算法,方便我们做接口测试、漏洞挖掘。

免责声明:本文仅用于授权环境安全测试、前端安全学习。禁止对未授权网站、小程序进行逆向、爬虫、接口批量测试等操作,违规操作将触犯相关法律法规,请务必遵守。

0x01 什么是前端接口签名 sign

接口签名(sign)本质是一种简易防篡改、防重放机制。
后端约定一套加密规则,前端把请求参数、时间戳、随机字符串拼接,经过 MD5、SHA 等哈希运算生成 sign,随请求一起传给后端。后端拿到参数后,用完全相同的算法重新计算一次 sign,对比前后 sign 是否一致。

简单流程:

  1. 前端收集业务参数 + timestamp 时间戳 + nonce 随机串 + 密钥 secret
  2. 按照约定顺序拼接字符串
  3. MD5/SHA256 哈希得到 sign
  4. 将 sign 放到请求头或者请求体,一起提交给后端
  5. 后端使用相同算法重新计算 sign,校验是否匹配

作用:

  • 防止抓包后直接篡改参数(修改参数,sign 会变化,校验失败)
  • 简单防重放:依靠 timestamp 时间戳,超过有效期请求直接拒绝

⚠️ 重点:前端 JS 里写死的加密密钥 secret,本质是不安全的。前端代码完全暴露,任何人都可以逆向拿到密钥和算法。前端签名只能防普通爬虫,无法阻止有逆向能力的安全测试人员。

0x02 快速定位加密 JS 代码(最核心入门技巧)

抓包看到请求携带 sign,第一步就是定位生成 sign 的 JS,有 4 种常用方法。

方法 1:全局搜索关键词(新手首选)

打开浏览器 F12 开发者工具 → Source 源代码面板,全局搜索关键词:
sign、generateSign、getSign、createSign、signature、md5

快捷键:Ctrl+Shift+F 全局检索所有 JS 文件

搜索到对应代码行,看 sign 的赋值位置,这里就是加密函数调用处。

方法 2:XHR 断点,拦截接口请求

Network 面板找到目标接口,右键 →Add XHR/fetch breakpoint。
当网页发起这个接口请求时,JS 执行会断住,代码停在发起请求的位置。
单步调试,往回追溯,就能找到 sign 生成的地方。
调试快捷键:

  • F10:单步跳过(Step Over),不进入函数内部
  • F11:单步进入(Step Into),进入函数内部
  • Shift+F11:跳出当前函数
  • F8:继续执行,直到下一个断点

实战技巧:断住请求之后,看请求体对象,找到 sign 属性,顺着变量回溯,找到这个变量在哪里被赋值。

方法 3:调用栈 Call Stack 回溯

断点断住之后,右侧 Call Stack(调用栈)会显示函数执行顺序。
从栈底到栈顶,可以看到代码一层一层调用关系,快速找到加密函数源头。

方法 4:Hook 拦截,监控 sign 变量赋值

可以在 Console 控制台写入简单的 Hook 代码,监控 sign 变量一旦被赋值,自动触发断点。

// Hook sign赋值,一旦sign被修改自动断下 Object.defineProperty(window, 'sign', { set: function(val) { debugger; console.log("sign值被赋值:",val); } })

执行脚本之后,页面生成 sign 的时候会自动触发 debugger 断点,直接定位加密位置。

0x03 看懂基础签名算法(常见模板)

绝大多数中小型网站的 sign 逻辑都非常固定,我们看几个真实场景案例。

案例 1:参数排序拼接 + MD5(最经典)

伪代码逻辑:

// 原始业务参数 let params = { id: 1001, name: "test", timestamp: 1756543211 } // 1. 将key按照字母升序排序 // 2. key=value拼接,用&连接 // 3. 末尾拼接密钥secret // 4. 整体MD5,转大写/小写得到sign function getSign(params, secret){ const keys = Object.keys(params).sort(); let str = ""; for(let k of keys){ str += `${k}=${params[k]}&` } str = str + secret; return md5(str) }

重点坑点:

  1. 参数是否排序,很多站点不排序,顺序错一点 MD5 结果完全不同;
  2. 拼接符是&还是|;
  3. secret 密钥放在前面还是末尾;
  4. MD5 结果大写还是小写,大小写不一致会直接校验失败。

案例 2:时间戳 + 随机 nonce

增加 timestamp(毫秒时间戳)和 nonce 随机字符串,用来防重放。

let timestamp = new Date().getTime(); let nonce = Math.random().toString(36).slice(2); params.timestamp = timestamp; params.nonce = nonce;

后端校验 timestamp,如果和服务器时间相差超过 300 秒,直接拒绝请求。

案例 3:AES 加密参数(不是哈希,是对称加密)

部分网站不使用 MD5,而是把整个请求 JSON 字符串 AES 加密,传输密文。
这种场景,逆向目标就是找到 AES 的 key 和 iv 向量。

区分:MD5/SHA 是哈希摘要,不可逆;AES 是对称加密,可以解密原文。

0x04 调试实战,一步步复现 sign

拿到加密函数之后,分 3 步复现算法。

  1. 本地调试,验证函数输出
    在浏览器 Console 直接复制加密函数,手动传入参数,看计算出的 sign 和真实抓包的 sign 是否一致。如果不一致,逐行对比,排查拼接顺序、编码问题。
  2. 剥离环境依赖,提取纯算法
    网页 JS 会依赖浏览器环境,包含 window、document 等对象。我们需要剥离无关代码,只保留加密逻辑、md5 库。
    可以把 md5 函数、getSign 函数单独提取出来,放到 NodeJS 环境运行。

示例 NodeJS 简易 demo:

const crypto = require('crypto'); function md5(str){ return crypto.createHash('md5').update(str).digest('hex') } function getSign(params, secret){ const keys = Object.keys(params).sort(); let str = ""; for(let k of keys){ str += `${k}=${params[k]}&` } str += secret; return md5(str) } // 测试参数 let data = {id:1001,name:"test"} let secret = "abc123456" console.log(getSign(data,secret))

运行代码,比对和网页生成的 sign 是否相同,相同代表算法提取成功。

  1. 集成到 Burp,自动化生成 sign
    拿到独立算法之后,有两种方式在 Burp 中自动计算 sign:
  2. 使用 Burp 的 Custom Scripts / Jython 脚本;
  3. 写简易本地 API,Burp 请求前调用本地接口,自动生成 sign;

这样重放 Repeater 发包时,自动计算最新 sign,不再出现签名失效。

0x05 JS 逆向常见阻碍与绕过思路

阻碍 1:JS 代码混淆(变量名 a1,b2,c3,代码压缩一行)

网页 JS 经常压缩混淆,所有变量名无意义,代码挤成一整行。
解决方法:Source 面板里面点击{}格式化美化代码,格式化之后再断点调试。
如果是严重混淆(控制流混淆、字符串加密),入门阶段可以优先换思路,先找未混淆的备用接口。

阻碍 2:debugger 反调试,打开 F12 自动断住

打开开发者工具就触发 debugger,无限断点干扰调试。
解决方案:

  1. 右键 debugger 行,Add conditional breakpoint,填入false,让断点永远不触发;
  2. 使用浏览器禁用 debugger 插件;
  3. 在 Console 重写 debugger 函数:debugger=function(){};

阻碍 3:加密函数在 eval、atob 里面动态执行

代码使用 atob base64 解码字符串,再 eval 执行。
可以在 eval 位置下断点,解码完成之后,打印出真实 JS 代码。

阻碍 4:多段 JS,加密逻辑拆分在多个文件

sign 生成分布在多个 JS 文件,函数互相调用。优先使用 XHR 断点 + 调用栈,顺着执行流一次性定位完整链路。

0x06 安全测试中的使用边界 & 漏洞挖掘场景

学会前端 sign 逆向,不是用来写爬虫批量爬数据,而是用于安全测试:

  1. 接口参数篡改测试
    原本前端加了签名保护,无法直接修改 price、userid 参数。逆向拿到算法后,可以构造合法 sign,提交篡改后的参数,验证后端是否存在越权、金额篡改等逻辑漏洞。

重点:前端签名校验只能防篡改,后端没有做业务校验的话,依然存在高危逻辑漏洞。

  1. 重放测试
    每次发包 sign 都会变化,普通重放失效。逆向算法自动生成新 sign,开展重复提交、业务状态机漏洞测试。
  2. 测试签名机制本身缺陷
    常见签名设计缺陷:
  • secret 硬编码写在前端 JS,密钥泄露;
  • 只校验 sign,没有校验 timestamp,可永久重放;
  • 签名只对部分参数做计算,修改未参与签名的参数,后端不检测;
  • 签名算法简单,容易被复现。

签名只是防护手段,不能替代后端权限校验、参数校验。很多开发误以为加了 sign 接口就安全,这是严重误区。

0x07 高频踩坑总结

❌坑 1:找到 md5 函数,直接复制,但是 sign 结果不一致

大概率:参数没有排序、拼接符号错误、密钥位置不对、中文未做 url 编码。

❌坑 2:混淆 JS 直接放弃

新手不用一上来硬啃重度混淆。优先 XHR 断点,抓调用栈,格式化代码,很多混淆只是简单变量名替换。

❌坑 3:以为 sign 是后端生成,花费大量时间尝试爆破 sign

sign 随前端参数实时变化,爆破几乎不可能,核心是逆向算法。

❌坑 4:逆向成功之后,直接在生产环境大规模请求

未经授权批量请求属于违规行为,逆向技术仅限授权测试环境使用。

❌坑 5:混淆前端签名和后端业务校验

就算 sign 校验通过,后端依然需要校验用户权限、参数合法性;签名不等于安全。

0x08 学习路线(新手入门建议)

  1. 先掌握 JS 基础:变量、对象、循环、函数、对象排序;不用精通前端开发,看得懂代码即可。
  2. 熟悉浏览器调试:断点、单步、调用栈、格式化 JS,反复练习。
  3. 从简单无混淆的 sign 站点入手,练习定位 sign 函数、提取算法,本地 Node 复现。
  4. 再逐步接触简单混淆、AES 加密场景。
  5. 实战练习:在本地靶场搭建带 sign 签名的 Web 项目练习,不要直接上手线上站点。

0x09 企业防御方案(甲方视角)

  1. 不要依赖前端签名作为安全屏障。前端所有代码、密钥都可以被逆向,前端签名只能降低爬虫成本,不能抵御攻击者。
  2. 密钥不要硬编码在前端 JS、小程序代码中;高敏感接口尽量把加密校验放在后端。
  3. 时间戳有效期严格限制,增加 nonce 一次性随机串,做好防重放。
  4. 核心业务接口增加二次身份校验,IP 风控、行为风控。
  5. 敏感交易类接口,除了签名,后端必须独立校验业务参数、资源归属。
  6. 可以增加 JS 混淆、反调试增加逆向成本,但不能作为唯一防护手段。

总结

JS 逆向入门,核心不是破解复杂加密算法,而是学会浏览器断点调试、追踪变量、定位加密函数,剥离并复现签名逻辑。
前端接口签名,本质是 “前端的一层简单防护”,一旦逆向拿到加密算法,这层防护就被绕过。
在漏洞挖掘中,很多接口因为加了 sign,让测试人员无法直接 Burp 重放,而学会 JS 逆向,就可以突破这层限制,继续测试接口底层业务逻辑,挖掘隐藏的逻辑漏洞。

一句话记住:前端任何加密、签名算法都能被逆向;前端签名只能防小白,不能防安全测试,后端业务校验才是安全的根基。


最后

关于网络安全技术储备

学好网络安全不论是就业还是做副业赚钱都不错,但要学会网络安全还是要有一个学习规划。最后大家分享一份全套的网络安全学习资料,给那些想学习网络安全的小伙伴们一点帮助!

对于0基础小白入门:

如果你是零基础小白,想快速入门网络安全是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。

二方面是可以找到适合自己的学习方案

包括:网安成长学习路线图、SRC&黑客文档、护网行动、黑客必读书单、面试题、学习视频等教程。带你从零基础系统性的学好网络安全!

需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)

👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)

👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

👉5.黑客必读书单👈

随着互联网技术的飞速发展,网络安全已经成为了当今科技领域的一大热点。这些SQL注入、CCNA、Web渗透、Linux服务器等,以其强大的语言理解和防御能力,正在守护着我们网络世界。 那以下这些PDF籍就是非常不错的学习资源。

👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

这份完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询