🔐 JS 逆向工程 (JS Reverse Engineering) 简介

1. 什么是 JS 逆向?

在 Web 开发中,为了保护数据安全和防止恶意爬虫,开发者通常会对关键的业务逻辑、加密算法或参数(如 token, sign)进行混淆(Obfuscation)或加密

JS 逆向 就是指通过浏览器调试工具,分析、追踪并还原这些被隐藏的 JavaScript 代码逻辑,最终实现模拟调用或破解加密数据的过程。

2. 核心技术挑战

在逆向过程中,你通常会遇到以下“绊脚石”:

  • 代码混淆:变量名变成毫无意义的 _0xabc123,函数调用被层层嵌套。
  • 控制流平坦化:将直观的代码逻辑变成一个巨大的 switch-case 循环,让人难以追踪执行顺序。
  • 反调试 (Anti-Debugging):代码中埋伏了 debugger 指令或检测控制台是否打开,一旦检测到调试行为即陷入死循环或报错。
  • 环境检测:JS 会检测浏览器特有的属性(如 window, navigator),在 Node.js 等脱离浏览器的环境下运行时会拒绝执行。

3. JS 逆向的基本流程

逆向通常遵循以下四个步骤:

步骤操作内容关键点
1. 抓包分析使用 F12 或 Fiddler/Charles 观察请求。锁定加密参数(如 _signature)。
2. 定位入口通过搜索关键词、XHR 断点或堆栈追踪找到 JS 源码。寻找 encryptsend 函数。
3. 调试分析格式化代码,设置断点,观察变量值的变化。理解加密逻辑和盐值(Salt)。
4. 模拟实现使用 Python (ExecJS/PyExecJS) 或 Node.js 还原算法。实现补环境 (Polyfill)

4. 必备工具箱 (2026 版)

  • 浏览器工具:Chrome DevTools (最基础也最强大)。
  • 抓包神器:Fiddler Everywhere, Charles, Burp Suite。
  • 调试增强Hook 脚本 (注入 JavaScript 来拦截对象属性)。
  • 沙箱环境jsdom, VM2 (用于在 Node.js 中模拟浏览器环境)。
  • 进阶神器Frida (动态插桩,不仅限于 JS)。