0x1 简介
JS逆向的目标是定位并还原前端加密逻辑,以便在爬虫或安全测试中模拟生成关键参数(如 token、sign、nonce 等)。整体流程可分为 入口定位 → 调试分析 → 模拟执行 三步。
0x2 入口定位
-
抓包分析:在浏览器 F12 → Network 中找到目标接口,请求参数中通常会有加密字段。
-
全局搜索:在 Sources 面板 Ctrl+Shift+F 搜索参数名(如 “sign”、“token”),也可尝试关键词 encrypt、md5、AES、setPublicKey 等。
-
调用链追踪:在 Network 中查看 Initiator 调用栈,逐层跳转到生成逻辑。
-
断点拦截:利用 XHR/fetch Breakpoints、DOM 断点、事件断点,在请求发起前截获加密数据。
-
Hook 注入:通过 Object.defineProperty 或 TamperMonkey 脚本拦截关键属性(如 document.cookie、加密函数),打印调用栈快速定位。
0x3 调试分析
-
代码格式化:Sources 面板 {} 按钮美化压缩代码,提升可读性。
-
断点调试:在加密函数入口打断点,利用 Scope 查看变量值,Call Stack 追踪调用路径。
-
关键变量监控:在 Watch 面板添加待观察的变量(如 dataJson.password)。
-
反混淆处理: AST 技术:用 @babel/parser 解析代码,traverse 遍历修改节点,generate 还原可读代码。 常见还原:表达式计算(!![] → true)、字符串解码(\x68\x65\x6c\x6c\x6f → hello)、剔除无用代码、反控制流平坦化。
-
特殊场景: AES/RSA/Sign:搜索 AES、CryptoJS、setPublicKey、HmacSHA256 等关键词,结合断点获取密钥或公钥。 WASM 加密:下载 .wasm 文件,用 pywasm 或 wasmer 调用其导出方法(如 encrypt)。
0x4 模拟执行
-
Python 复写:用 pycryptodome 实现 AES/RSA/HMAC 等算法,按调试逻辑还原加密过程。
-
Node.js 调用:直接运行扣取的 JS 代码,或用 express 封装为本地 API。
-
浏览器驱动:用 Selenium / Puppeteer 加载本地 HTML + JS,利用真实浏览器环境生成参数。
-
RPC 远程调用:通过 WebSocket 建立本地与浏览器通信,浏览器执行加密函数并返回结果。
例子:AES 固定 Key 解密
// 浏览器调试中扣取的加密逻辑const CryptoJS = require("crypto-js");function aesEncrypt(data) {const key = CryptoJS.enc.Utf8.parse("1234567890abcdef");const iv = CryptoJS.enc.Utf8.parse("abcdef1234567890");return CryptoJS.AES.encrypt(data, key, { iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString();}console.log(aesEncrypt("admin123"));
0x5 文章推荐
新手推荐:https://forum.butian.net/share/3647
手把手js逆向断点调试:https://xz.aliyun.com/news/18630
攻防中前端加密的分析与突破:https://mp.weixin.qq.com/s/UfGnWAmeYZH53fTDPH23dw





没有回复内容