# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。