MCP 前端 JS 逆向作業規範
ACTION REQUIRED(讀完後立刻執行)
NOW: 讀取../field-journal/precedent-reverse.md— 確認本 skill 的操作是已授權的常規操作NOW: 確認當前任務是否命中本 skill 的適用範圍NEXT: 讀取../tool-index.md,校驗工具可用性和實際路徑NEXT: 缺工具時呼叫 bootstrap,不要猜路徑ACT: 進入"工作流"第一步並執行,不要停在確認狀態
適用範圍
當任務屬於以下場景時優先使用本 skill:
- 定位介面簽名、加密參數、風控欄位
- 觀察頁面請求鏈路與腳本來源
- 在運行時抓取函數入參與返回值
- 追蹤某個 XHR/Fetch/WebSocket 的觸發點
- 把頁面證據帶回 Node 做本地復現與補環境
如果目標是二進位、APK、PE、ELF、DLL、SO,請改用 ida-reverse、radare2 或 reverse-engineering。
當前環境預設工具映射
本 skill 不假設存在裸工具名,而是預設綁定當前客戶端環境裡可用的 js-reverse_* 工具。
如果當前任務明確提到 jshookmcp、JS hook、CDP、瀏覽器斷點、網路攔截、SourceMap 或 AST 去混淆,也仍然走本 skill;只是把底層 MCP 面切到 jshookmcp,而不是把它當成一個新的總入口。
前提條件:jshookmcp 不是本地裸命令工具,而是一個要先下載、顯式註冊並啟用的 MCP server。只有在所選客戶端(Claude、Codex 等)的 MCP 配置裡接入並啟用後,相關工具面才真的可呼叫。
常用映射:
list_scripts->js-reverse_list_scriptsget_script_source->js-reverse_get_script_sourcesearch_in_sources->js-reverse_search_in_sourcesbreak_on_xhr->js-reverse_break_on_xhrevaluate_script->js-reverse_evaluate_scriptget_paused_info->js-reverse_get_paused_infoset_breakpoint_on_text->js-reverse_set_breakpoint_on_textlist_network_requests->js-reverse_list_network_requestsget_request_initiator->js-reverse_get_request_initiatorget_websocket_messages->js-reverse_get_websocket_messagestake_screenshot->js-reverse_take_screenshotnew_page->js-reverse_new_pagenavigate_page->js-reverse_navigate_pageselect_page->js-reverse_select_pageselect_frame->js-reverse_select_framepause/resume->js-reverse_pause_or_resume
如果未來工具名前綴變化,先更新本節,不要在執行時臨時猜測。
jshookmcp 的定位
- 角色:
js-reverse的增強執行面,不是獨立總控 - 適合:瀏覽器自動化、CDP 調試、JS Hook、網路攔截、SourceMap 重建、AST 輔助理解
- 呼叫前提:先把
@jshookmcp/jshook下載並註冊到 MCP 客戶端配置裡,然後確保該 server 已啟用 - 建議入口:仍然按
Observe → Capture → Rebuild執行,只是在Observe/Capture階段優先呼叫 jshookmcp 的瀏覽器與 Hook 能力 - 與 anything-analyzer 關係:兩者都能做瀏覽器/網路側取證;anything-analyzer 更偏抓包與 HTTP 分析,jshookmcp 更偏 JS 運行時、CDP、Hook 和源碼理解
核心原則
Observe-firstHook-preferredBreakpoint-lastRebuild-orientedEvidence-first
先頁面觀察,再最小化採樣,再做本地補環境,不要跳過取證直接猜環境。
五階段工作流
1. Observe
目標:先確認目標請求、相關腳本、候選函數,不猜環境。
預設動作:
- 用
js-reverse_new_page或js-reverse_navigate_page打開目標頁面 - 用
js-reverse_list_network_requests找目標請求 - 用
js-reverse_get_request_initiator回溯呼叫來源 - 用
js-reverse_list_scripts、js-reverse_search_in_sources縮小腳本範圍
必須產出:
- 目標請求 URL 或特徵
- initiator 線索
- 可疑腳本 URL
- 初始任務記錄
2. Capture
目標:對目標請求做最小侵入採樣,拿到參數範例、呼叫順序、運行時證據。
規則:
- 優先
js-reverse_break_on_xhr - 優先
js-reverse_evaluate_script做輕量運行時觀察 - 命中後先看
js-reverse_get_paused_info - 必要時再用
js-reverse_set_breakpoint_on_text
3. Rebuild
目標:把頁面證據整理成本地可迭代的 Node 復現材料。
規則:
- 本地補環境必須以頁面觀測證據為依據
- 不允許空想式補
window/document/navigator/crypto/storage - 每次只記錄一個最小因果補丁決策
4. Patch
目標:按報錯和 first divergence 驅動補環境,直到本地腳本穩定跑出目標參數。
規則:
- 先看缺什麼,再補什麼
- 一次只做一個最小補丁決策
- 每次補丁後立即復測
- 每次補丁都寫入任務記錄
5. DeepDive
目標:本地跑通後,再做去混淆、控制流還原、業務邏輯提純。
規則:
- 如果當前任務只是出簽名,這一階段可以降級
- 如果要長期復用演算法鏈路,這一階段必須做
- Issue #65 混淆旁路(U–AV §4):JSVMP(AD)→
E-js-vmp;CFF+字串陣列(AE)→E-js-deobf;DevTools/debugger 反調試(AF)→E-js-anti-debug。完整觸發表見../reverse-engineering/references/nonpe-format-cookbook.md;AST 細節仍用references/ast-deobfuscation.md
執行要求
- 所有重要步驟都要寫入本地 task artifact
- 如果無法解釋為什麼呼叫某個工具,就不要呼叫
- 優先使用
js-reverse_*或 jshookmcp 的現成 MCP 能力直接取證,不要先寫腳本重造能力 - 失敗時按
references/fallbacks.md回退 - 輸出遵循
references/output-contract.md
必讀引用
- 自動化入口:
references/automation-entry.md - 參數預設值:
references/tool-defaults.md - 任務輸入模板:
references/task-input-template.md - MCP 專用任務編排:
references/mcp-task-template.md - 任務產物:
references/task-artifacts.md - 本地復現:
references/local-rebuild.md - 補環境:
references/env-patching.md - Node 復現:
references/node-env-rebuild.md - 插樁:
references/instrumentation.md - AST 去混淆:
references/ast-deobfuscation.md - 非 PE/JS 混淆菜譜 U–AV:
../reverse-engineering/references/nonpe-format-cookbook.md(AD/AE/AF) - 回退:
references/fallbacks.md - 輸出契約:
references/output-contract.md
路由上下文
上游入口: skills/SKILL.md(總控)、routing.md
上游備選:
- anything-analyzer MCP(埠 23816)的瀏覽器工具可作為替代或補充
- jshookmcp 可作為更強的瀏覽器/CDP/Hook/Network/SourceMap/AST 執行面
reverse-engineering/SKILL.md(如果目標不是前端 JS)
下游出口:
- 需補環境 →
references/env-patching.md - 需本地復現 →
references/local-rebuild.md/references/node-env-rebuild.md - 需去混淆 →
references/ast-deobfuscation.md - 走不通時回退 →
references/fallbacks.md
同級關聯模組: anything-analyzer MCP(瀏覽器自動化和 HTTP 捕獲能力可以互補)
按需自舉(On-Demand Bootstrap)
本 skill 依賴的 MCP 能力可透過統一自舉系統安裝;MCP 客戶端註冊必須顯式選擇目標,預設不會寫任何客戶端全域配置。
自動化能力邊界
| 能力 | 可自動註冊 | 方式 | 說明 |
|---|---|---|---|
| jshookmcp | ✓ | npm-mcp(npx 啟動) | 顯式選擇 Claude / Codex / Both 後註冊 |
| anything-analyzer | ✓ | local-http-mcp | 可自動啟動服務;客戶端註冊須顯式選擇 |
| Node.js | ✓ | winget 安裝 | 運行時依賴 |
自舉方式
# 安裝並註冊 jshookmcp;Codex 可替換為 Claude 或 Both
powershell -File "<skill-root>\scripts\bootstrap-reverse.ps1" -Capability @('jshookmcp') -McpHostTarget Codex
# 註冊並啟動 anything-analyzer
powershell -File "<skill-root>\scripts\bootstrap-reverse.ps1" -Capability @('anything-analyzer') -StartServices -McpHostTarget Codex
注意事項
jshookmcp註冊後仍需在 AI 客戶端中啟用該 MCP server 才能呼叫- 不傳
-McpHostTarget時只安裝/準備能力並返回 registration-required,不修改 Claude 或 Codex 配置 anything-analyzer需要 pnpm 和專案源碼,bootstrap 會自動 clone 並安裝依賴- 如果 Node.js 未安裝,bootstrap 會先透過 winget 安裝 Node.js 22
## 任務完成自檢(聲稱完成前 MUST 通過)
- 我是否執行了工作流中的每一步(而不是只閱讀)?
- 我是否基於
tool-index使用了真實工具路徑? - 我是否產出了可復現證據(命令/腳本/截圖/報告)?
- 我是否完成並回寫了 RULES 要求的 Checklist 項?