# JS逆向的小技巧以及XHR断点的案例分析 ## 前言 在Web安全研究和爬虫开发中,JavaScript逆向工程是突破前端加密的关键技术。本文将分享实用的JS逆向技巧,并通过XHR断点调试的实战案例,演示如何快速定位关键请求参数。 --- ## 一、JS逆向核心思路 ### 1. 代码定位四步法 - **搜索关键字**:在开发者工具中全局搜索`encrypt`、`sign`、`token`等关键词 - **调用栈分析**:通过异常断点回溯加密函数调用链 - **Hook拦截**:使用`Proxy`或`Object.defineProperty`劫持关键函数 - **AST还原**:对混淆代码进行语法树解析与重构 ### 2. 常用调试技巧 ```javascript // 方法1:控制台重写函数 var _original = window.crypto.encrypt; window.crypto.encrypt = function(params){ console.log("Input:", params); let result = _original(params); console.log("Output:", result); return result; } // 方法2:XHR/Fetch拦截 (function() { var open = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function() { console.log('XHR:', arguments); return open.apply(this, arguments); }; })();
分析某电商平台商品列表接口的加密参数_signature
生成逻辑
- 发现关键POST请求携带
_signature
参数 - 常规搜索无果,参数为动态生成
/api/goods/list
的URL断点触发断点后查看Call Stack:
► encryptParams (vendor.js:125) ► buildRequest (main.js:87) ► sendData (utils.js:203) ► XMLHttpRequest.send (native)
在vendor.js
中找到核心加密逻辑:
function generateSign(params) { let secret = "k5j8$B#d"; let str = Object.keys(params) .sort() .map(k => `${k}=${params[k]}`) .join("&"); return md5(str + secret); }
在Console快速验证:
generateSign({page:1, size:20}) // 输出:a3f5e8c91b2d47d6b0e1f4c2
console.debug
或Date.now()
差值检测// 反调试代码示例 setInterval(() => { if(performance.now() > 100){ window.location.reload(); } }, 500);
Fiddler
等工具代理请求,或通过override
脚本禁用检测遇到wasm加密时: 1. 使用wasm2js
工具转换 2. 分析导出函数的调用关系 3. Hook内存读写操作
工具名称 | 用途 | 链接 |
---|---|---|
Chrome DevTools | 动态调试 | 内置 |
Fiddler | 流量抓包 | telerik.com |
AST Explorer | 代码反混淆 | astexplorer.net |
WasmAnalyzer | WASM逆向 | github.com |
JS逆向需要耐心与技巧的结合,XHR断点能快速定位网络请求的加密入口。建议在实际操作中: 1. 先整体观察再局部深入 2. 保持加密参数的上下文记录 3. 编写自动化验证脚本提高效率
声明:本文技术仅限合法授权场景使用,请遵守相关法律法规。 “`
注:实际使用时需要: 1. 替换示例图片链接 2. 根据具体案例修改代码片段 3. 补充参考文献和工具的最新链接 4. 调整字数(当前约850字,可扩展案例细节)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。