R
開源工程 · AI Agent Skill · 逆向工程

網站逆向復刻與
取證級驗收門 Skill

website-rebuild-skill 是遵循 Agent Skills 開放規範設計的 AI 智能體技能,相容 Claude Code、Codex 與多種 Agent 執行環境。它將目標網站抓取為唯讀取證快照,從壓縮混淆後的程式碼逐行還原架構與邏輯,並透過控制台、網路、DOM、幾何與逐像素五層自動驗收門證明等價性。交付物涵蓋可獨立離線運行的原始碼工程、逆向筆記、差異登記表與版權取證報告。

1,337+
GitHub Stars
75
零依賴腳本工具
v0.3.23
目前穩定版本
MIT
開源授權協議
01
核心架構

規格化逆向還原與取證式驗收

website-rebuild-skill 將目標網址視為可執行的軟體規格書,而非外觀視覺參考。它以「先取證、後逆向、再驗收」為核心架構,把整站抓取為具備逐檔案 SHA-256 帳本的唯讀鏡像,隨後展開壓縮程式碼建立行號溯源座標系。

傳統靜態鏡像工具僅儲存靜態檔案,無法回答工程實作細節。本工具透過 51 個無外部依賴的 Node.js 工序腳本,在獨立工程內逐行重現模組結構、動畫編排狀態機與著色器邏輯,並以自動化比對門禁證明兩側運行結果等價。

驗收體系涵蓋控制台輸出、網路請求、DOM 樹拓撲、元素幾何邊界與無頭 Chromium 逐像素渲染對拍。未通過驗收的差異必須修復或於差異表完成登記,禁止以目測相似替代客觀驗證。

網站復刻工程 · 標準生命週期
判級偵察 (Step 0)→ 唯讀鏡像 (M0)→ 逆向建標 (M1)→ 逐行移植 (M2+)→ 多層驗收 (M n-1)→ 責任收口 (M n)→ 原始碼化 (M n+1)
「它盯著的是『對不對』,不是『像不像』。鏡像是這套流程的起點,不是終點——那份快照在後續每一次『復刻側對不對』的判斷中,都是拿來當作標尺量出來的裁判。」
— website-rebuild-skill 官方 README 說明
02
安裝與依賴

環境前提與跨 Runtime 安裝

安裝前確認執行環境符合以下基礎依賴。Node.js 需為 22 或以上版本,以支援原生 fetch 與直連 Chrome DevTools Protocol (CDP) 的 WebSocket 通訊;同時需於本機安裝 Chrome 或 Chromium 以執行無頭像素比對。

依賴項目 最低版本 用途說明
Node.js >= 22.0.0 內建 fetch / WebSocket 直連 CDP,全工序腳本零外部 npm 依賴
Chrome / Chromium 本機安裝 供 scripts/pixelcompare.mjs 執行無頭畫面擷取與像素差比對
npx 隨 Node 內建 部分工序以子行程 spawn 固定版本外部工具(如 js-beautify、acorn)
# 使用者層級安裝(寫入 ~/.claude/skills/website-rebuild) npx website-rebuild-skill # 專案層級安裝(寫入專案根目錄 ./.claude/skills/website-rebuild) npx website-rebuild-skill --project # 指定其他 Agent Skills 規範之目錄(如 Codex CLI) npx website-rebuild-skill --dir ~/.agents/skills

手動複製方式(已克隆本倉庫)

若已 clone 倉庫,將 skills/website-rebuild/ 完整資料夾複製到目標 Agent 的 skills 存放路徑:

# 部署至 Claude Code 使用者技能目錄 cp -R skills/website-rebuild ~/.claude/skills/website-rebuild # 部署至 OpenAI Codex 技能目錄 cp -R skills/website-rebuild ~/.agents/skills/website-rebuild
安裝器零依賴與 SHA-256 雙向校驗約束。安裝指令僅執行本地檔案寫入,不啟動瀏覽器亦不聯網。寫入完成後自動以 SHA-256 逐檔案雙向檢驗;目標目錄已存在時會印出既有版本並拒絕覆寫,需帶 --force 參數強制覆寫。執行前可加上 --dry-run 預覽寫入清單。
03
工序與能力

八大核心工序與三級終點梯子

website-rebuild-skill 依據 Agent Skills 開放規範,將逆向工程拆解為八個標準工序。流水線在前項門禁未過前禁止推進至下一階段,確保每一步驟皆具備客觀裁判。

Recon · Step 0–1
scope-and-fingerprint
指紋偵察與判級先行
探測目標站台架構分類(A/B/C/D/X)與難度星級;判定不可做時立即終止並陳述原因,禁止盲目產出。
Mirror · M0/M0.5
mirror-site / verify-mirror
唯讀鏡像與閉包取證
抓取完整靜態資源並產出逐檔案 SHA-256 帳本,執行五項斷言與斷網環境驗證,作為全流程唯一裁判標尺。
Reverse · M1
module-map / beautify-bundle
容器逆向與座標系建立
辨識 webpack 與 Turbopack 容器邊界,以固定版本工具展開程式碼,建立全項目溯源行號基準。
Port · M2+
porting-discipline
逐行還原與魔數抽取
於獨立工程依行號區間逐字還原邏輯,GLSL 著色器與私有二進位以腳本抽取入庫,照抄原始怪寫法。
Verify · M(n-1)
sweep-routes / pixelcompare
五層自動化驗收門禁
驗證控制台零報錯、網路零外聯、DOM 拓撲與幾何對齊,並以無頭 Chrome 逐像素對拍確認 meanAbsDiff 歸零。
Legal · M(n)
legal-and-deploy
責任收口與版權呈交
逐資產取證授權狀態,產出合規評估報告;嚴格維持預設私有、noindex 與不部署,裁定權全數交由使用者。
Refactor · M(n+1)
slice-esm / verify-reassembly
拼接分解與原始碼重構
將無模組容器的產物按語意切片為獨立部件,以 verify-reassembly 證明重拼位元組完全一致,建構可攜工程。
Rescue · X 類
wayback-mirror
Wayback 存檔歷史搶救
透過 CDX 索引挑選連貫快照錨點,下載原始位元組並以停車頁驗屍機制過濾假活站,復原已消亡站台。

三級終點與交付邊界判定表

終點等級 回答問題 終止里程碑 典型交付用途
L1 鏡像存檔 它長什麼樣 M0.5 純靜態存檔、斷網離線瀏覽、即將消失網站搶救保存
L2 工程化復刻 它在做什麼 M(n) 可運行與可驗收工程、行號可溯源 1:1 還原、含版權取證報告
L3 原始碼化 它怎麼做的 M(n+1) 語意命名模組、位元組重拼門保護、供研究與二次創作交接
04
官方原則與工程紀律

六大核心紀律與實戰驗收準則

website-rebuild-skill 的核心準則並非風格偏好,而是從數十個實戰目標(涵蓋 Apple、Lusion、Linear、Shopify 等)逆向過程中總結之硬約束。違反任一紀律皆會在後續驗收階段轉化為嚴重缺陷。

RULE 01

鏡像唯讀與永不修改

抓取所得之本地鏡像是全專案唯一客觀證據。任何後續的比對、驗收與反查皆以此為準,嚴禁以手動修改鏡像來掩蓋差異。

來源 · 官方 README · 六條紀律第 1 條
RULE 02

以原始碼為唯一裁決

嚴格禁止憑肉眼調整畫面效果。所有動畫時序、顏色變數與空間座標必須從壓縮程式碼中反解或提取,非由視覺臆測。

來源 · 官方 README · 六條紀律第 2 條
RULE 03

源站沒有的不發明

寧可復刻初期畫面缺漏或排版不齊,亦不可自創邏輯補丁;源站未定義的行為一律不增添,確保逆向忠實度。

來源 · 官方 README · 六條紀律第 3 條
RULE 04

既有缺陷與怪寫法照抄不修

壓縮程式碼中每個看似多餘的死程式碼或怪異語法,往往為實際行為的一環。修復源站缺陷會導致驗收門禁失效。

來源 · 官方 README · 六條紀律第 4 條
RULE 05

有意的差異必須登記

因環境差異(如 WebGL 浮點精度、外部 API 替換)產生的分歧,必須寫入差異表記錄原因;未登記者一律判定為錯誤。

來源 · 官方 README · 六條紀律第 5 條
RULE 06

程式碼與文件同次提交

每次程式碼變更必須同步更新 REBUILD_PLAN.md、差異登記表與逆向筆記,杜絕文檔與實作脫節。

來源 · 官方 README · 六條紀律第 6 條
RULE 07

殘差歸因前先建自比頻寬

執行 pixelcompare 之前,必須使用 --self 參數在同側執行交錯對拍(≥4 次)取得雜訊底線,無頻寬之殘差一律視為未通過。

來源 · SKILL.md · references/verification-gates.md
RULE 08

拼接式分解避開盲目重構

面對 Vite 等無模組容器的 ESM bundle,採用 slice-esm 按語意切片,並以 verify-reassembly 位元組重拼門禁定案。

來源 · SKILL.md · references/readable-source.md
RULE 09

全站廣度與單頁深度分流

全站路由廣度驗證使用 sweep-routes 單一瀏覽器實例輪巡,單路由深度測試始調用 probe;避免頻繁重啟 Chrome 耗盡資源。

來源 · SKILL.md · Workflow M(n-1)
RULE 10

預設私有與法務決定權呈交

產出工程一律預設為私有倉庫、加入 noindex 標籤且不自動部署。凡涉及是否公開或授權判斷,全數呈交使用者親自裁決。

來源 · 官方 README · 版權章節
05
完整實作流程

端到端會話實例與全流程對拍

給定目標網址後,Agent 依序執行指紋探測、使用者終點裁決、唯讀鏡像落盤、壓縮程式碼逆向展開、逐行還原與逐像素驗收門禁。以下記錄單次會話內由判級直達原始碼化交付之真實互動流程。

~/projects/rebuild-target · claude code · website-rebuild-skill v0.3.23
User › 請幫我復刻這個網站:https://example.com/interactive-product
[loaded ~/.claude/skills/website-rebuild/SKILL.md] [Step 0 · 執行 scope-and-fingerprint 探測中...]
Agent › 目標網站指紋探測完成: · 類別判級:A 類(命令式 Three.js + Vite scope-hoisted ESM) · 路由規模:1 條全景互動頁面 · 資產規模:3 個 GLB 模型、12 張紋理貼圖、8 組客製 Shader · 難度評級:★★★☆☆(中度 WebGL 與自研時間軸狀態機)
請選擇本次任務之終點等級(梯子單調,選低不虧,後續隨時可升級): 1. L1 鏡像存檔(唯讀快照 + 斷網可運行) 2. L2 工程化復刻(1:1 還原可運行工程 + 驗收報告 + 差異表) 3. L3 原始碼化(模組拆解 + 語意命名 + 位元組重拼門)
User › 選 3,執行完整 L3 原始碼化。第三方依賴由 npm 重新安裝。
[M0 / M0.5 · 執行鏡像取證與唯讀斷網驗證] $ node scripts/mirror-site.mjs https://example.com/interactive-product 寫入 manifest.json(23 個檔案,逐檔案雙向計算 SHA-256) $ node scripts/verify-mirror.mjs → 5/5 項斷言 PASS $ node scripts/serve.mjs --dir mirror/ → 斷網離線載入通過
[M1 · 逆向分析與行號座標系建立] $ node scripts/beautify-bundle.mjs → 展開 _pretty/bundle.js(14,210 行) 技術棧版本取證:three@0.160.0, gsap@3.12.2 產出 docs/engine-notes.md 與 REBUILD_PLAN.md
[M2+ · 嚴格溯源移植與素材提取] 提取 GLSL:8 組著色器逐字抽離至 assets/shaders/ 移植主引擎:src/engine.js(頂部標註源檔案行號 L3400-L5890) 照抄原始狀態機怪寫法(保留未使用的 clamp 邊界運算)
[M(n-1) · 多層自動化驗收門禁] $ node scripts/sweep-routes.mjs → 控制台 0 錯誤、0 請求失敗、0 外聯請求 $ node scripts/pixelcompare.mjs --self --runs 4 → 建立自比雜訊頻寬 ≤ 0.04 $ node scripts/pixelcompare.mjs --ready "#webgl-canvas[data-ready]" 對拍結果:跨側 5 個檢查點 meanAbsDiff 0.00(逐像素一致通過)
[M(n) · 責任收口] 產出 docs/legal-audit.md,維持預設私有倉庫 + noindex + 不部署
[M(n+1) · 原始碼化與拼接式分解] $ node scripts/slice-esm.mjs → 拆解為 42 個語意部件 $ node scripts/verify-reassembly.mjs → 42/42 位元組完全一致定案 交付完成:獨立離線工程輸出至 ./dist-rebuild,隨附自包含資產與重拼門
「在動手重構之前,已經有了一個逐像素精確的裁判,所以每一次拆分、每一次改名都能被證死。沒有裁判的重構是盲改。」
— website-rebuild-skill 官方 README 說明

全流程驗收門禁的實踐價值

傳統 AI 生成程式碼往往僅滿足「外觀相似」,在長度滾動、動畫中途停頓或特殊視窗解析度下極易發生破版。website-rebuild-skill 透過自比頻寬建立雜訊基準,並以客觀數值(meanAbsDiff 0.00)定案,確保重構過程不遺失原始細節。

06
工程邊界與限制

適用邊界與防禦性限制

  • 服務端行為站(D 類)無法移植。行為主體在服務端(如電商動態庫存、結帳交易、個性化推薦分桶),客戶端缺少完整規格,亦無客觀驗收基準;偵察階段探測為 D 類時會直接終止。
  • 服務端渲染組件(C1 類)需依賴 Flight 串流。Next.js App Router 等 RSC 站台服務端原始碼不下發,僅能透過 HTML 內嵌之 Flight 負載反推結構並重構等價工程,無法進行逐字移植。
  • 變數命名還原存在物理上限。壓縮混淆抹除的區域變數若無導出名或除錯線索,將嚴格保留雜湊或代號;禁止 Agent 憑空猜測語意名稱,避免錯誤命名混淆後續維護。
  • 嚴格禁止順手重構與抽象提取。在原始碼化階段,嚴禁擅自合併重複程式碼、提取公用工具函式或更改運算法則;任何結構性重寫都會破壞等價性證明的有效性。
  • 無頭瀏覽器與多路由資源消耗。包含 3D WebGL、動態著色器或數十條路由之站台,執行 pixelcompare 與 sweep-routes 時 Chromium 實例記憶體可達 1.5GB 以上,建議配置充足運算環境。
  • 法務裁決權嚴格歸屬使用者。本技能產出預設為 private 倉庫、注入 noindex 元標籤且禁止自動部署。公開或二創前必須完成逐資產版權審查,技能本身不代為承擔法律責任。
  • 法務考量不可削弱鏡像完整性。抓取階段禁止以「反正不公開」為由擅自省略素材或字體,所有資產必須依閉包原則全量歸檔,確保驗收基準真實可靠。
07
進階工程路徑

二次創作交接與架構延伸指引

復刻工程的終點止於「人能讀懂的真實」。將產出成果轉化為個人專案、進行腳手架抽離或二次創作時,應依循交接指引保持與源站偏離之可追溯性。

進階玩法地圖

1. 透過 beyond-the-rebuild.md 完成工程交接。技能終點提供自帶之位元組清單與重拼門禁。進入二次創作或腳手架改造時,可精確記錄每一步對原始碼所做的偏離與客製改動。

2. 擴充專屬驗收門禁。參考 scripts/verify-*.mjs 撰寫業務專屬門禁,例如自訂音訊池檢查(零 404、零外聯)或長滾動幀率穩定性檢驗。

3. RSC Flight 串流重構。針對 Next.js App Router 站台,利用 flight-decode 解構服務端載荷,並以 verify-flight 雙射語意門校驗重構後之 React 組件樹。

4. 建立自研 WebGL 逆向筆記。參照 assets/templates/engine-notes.md 結構化記錄場景階層、自研著色器演算法與幾何資料封裝格式,累積圖形工程資產。

5. 整合 CI 自動化回歸測試。將 npm test(離線冒煙)與 npm run test:browser(真 Chrome 驗收)整合進 GitHub Actions,守護本地逆向成果。

最該讀的三份延伸閱讀

① skills/website-rebuild/SKILL.md——全流程工序、判級標準與核心六大紀律完整規格。
② references/verification-gates.md——控制台、網路、DOM、幾何與逐像素五層驗收門禁詳解。
③ references/beyond-the-rebuild.md——復刻完成後的二次創作交接、腳手架化與偏離記錄準則。

「拿產出去做你自己的項目(腳手架、fork、二次創作)是你的工程,不是它的階段——它不替你起名字、寫故事、換內容,因為那些決定只有你自己能做。但它留了一樣別處沒有的東西:交付物自帶的位元組清單與重拼門,讓你 fork 之後精確地知道自己每一步偏離了源站什麼。」
— website-rebuild-skill 官方 README 說明