reverse_engineering
對指定既有專案先按 Phase 03→02→01 逆向蒐證,再將候選結果遞回正向 Phase 01→02→03 SSOT;保留來源、信心與待決契約,按關卡推進 04→06。
SKILL.mdskills/00_cross_phase/reverse_engineering/SKILL.md
GitHub逆向工程主控 Skill
新手逐步引導依同目錄 GUIDED_REVERSE_SOP.md 執行。@guide reverse 必須使用該 SOP,不得要求使用者先懂 SSDLC、逆向工程術語或完整提供技術資料。
範圍與順序
先鎖定使用者指定的專案根目錄;同一資料夾中的其他專案不得混入。保留既有逆向產物,新增資料夾承接新案例。
- Phase 03 Reverse:按可用原始碼、成品或行為材料盤點入口、路由、可見結構與依賴;資料庫僅依證據列出。記錄檔案/行號或 artifact 位置/Evidence ID,區分已觀察、推測、未知。
- Phase 02 Reverse:從證據建立 API 契約、架構、ER/類別/使用案例/順序/操作流程圖。每條邊、角色及欄位都要能回指來源;沒有證據時標記候選或未知。
- Phase 01 Reverse:按使用者操作與業務能力整理需求、SRS、Gherkin 和追溯關係。記下使用者文件與程式現況的衝突,不以現況推定應有行為。
- 正向 Phase 01:將逆向候選與補充文件導入專案根
specs/executable_spec.yaml,同步requirements.feature、system_specification.md、traceability_matrix.md。每項 REQ 保留證據、信心、決議與核准狀態。使用專案既有同步器及check_spec_integrity.py檢查。 - 正向 Phase 02→03:從已核准需求逐階段形成設計、實作差異及驗證依據。逆向清單只是候選;未核准或未驗證時保留
pending,不能自動填evaluator.passed=true或 Baseline。 - 正向 Phase 04→06:按既有階段關卡處理測試、部署、運維。子 Skill 04~06 可先整理已有檔案的靜態清單,但不得將清單或圖表當成執行、發布或營運驗證。
引導對話最低要求
- 一次只問一個容易回答的問題;先用白話說明為什麼需要,再給一個可照抄的回答例子。使用者可以回答「不知道」或跳過;記為未知,繼續分析可取得的材料,不把未知補成事實。
- 起點不完整時,由 AI 先檢視專案結構、搜尋路由/入口、呼叫者與文件線索,提出有檔案或文件依據的候選位置,再請使用者選擇或確認。不得要求新手必須自行找到 Controller、API、函式或資料表。
- 把程式碼靜態可見的行為、文件記載的契約、使用者的回憶/決策、AI 推論、執行觀察、衝突及未知分開記錄。使用者確認「希望如此」是目標決策,不代表已部署系統目前如此運作。
- 先產生可追溯的流程圖,再由圖和來源反推設計/規格候選;每個關鍵節點與連線都要有來源,缺少證據時標為未知或待確認。不得以圖形完整度當成規格正確性證明。
- 先確認環境與測試授權。未獲明確授權不得對正式服務發送測試請求、修改資料或觸發登入/通知等副作用。無法安全測試時,完成靜態分析並清楚標示未實機驗證。
- 逆向蒐證完成只表示整理出有來源的候選,不等同業務需求核准、POC 執行成功、資安驗證通過或 SSDLC 階段完成。
@reverse [專案路徑] 執行前三步並建立可追溯的正向交接資料;@reverse-code、@reverse-design、@reverse-requirements 只執行指定逆向步驟。04~06 子 Skill 在各階段進入正向工作時使用,或依使用者明示要求只做既有素材盤點。
入口到結果的追蹤
對每個重點 API/使用者操作,追蹤 UI/Razor/JavaScript 觸發 → HTTP 路由與 Controller 分支 → Service/函式庫 → 資料存取或外部服務 → Session/Cookie/Token/回應或 Redirect。列出條件、呼叫先後、錯誤與副作用;操作手冊提供可依序執行的前置條件、請求、回應及失敗處理。缺少程式或執行證據時明示界限。
產物與狀態
outputs/phase_03_reverse/、phase_02_reverse/、phase_01_reverse/ 存放逆向證據與候選規格。輸入、必需與可選輸出依 io_files/phase_0N_reverse_io.yaml;例如只有表名時 db_schema_raw.sql 可以缺席,不能捏造 DDL。專案根四規格才是正向 SSOT。若既有逆向報告把 Phase 01~03 記為「逆向完成」,該字樣僅代表蒐證步驟,不代表正向 Evaluator 或業務核准通過。
新增證據時,先對齊 REQ ID、來源指紋及衝突,再更新 YAML 主體,重新產生衍生文件並執行靜態完整性檢查。業務契約未決時,文件整理繼續,決議與執行驗證保持待確認;到實際關卡才依 .agents/AGENTS.md 的 Evaluator 和 SSOT 規則建立 Baseline。
在 @reverse 開始及交接時執行 python scripts/check_reverse_skill_integrity.py --project "<專案目錄>",再依 .agents/AGENTS.md 執行該專案的 A/B/C/D/S 四規格檢查;兩者分別核對 Skill/IO/逆向產物與正向 SSOT。
六個子 Skill
| 子 Skill | 用途 |
|---|---|
phase_03_code_restore |
程式、路由、函式呼叫與資料使用蒐證 |
phase_02_design_restore |
設計與 API/UML 候選還原 |
phase_01_requirements_restore |
需求、SRS、情境與追溯還原 |
phase_04_test_restore |
已有測試盤點;正向關卡下才執行測試 |
phase_05_deploy_restore |
既有部署配置盤點;正向關卡下才發布 |
phase_06_ops_restore |
既有營運配置盤點;正向關卡下才驗證運維 |
每個子 Skill 的細節及 IO 契約見同目錄 sub_skills/、io_files/。若目標專案有 forward_transition.md,可用它記錄逆向到正向交接的狀態與未決閘口。
REA 與無原始碼逆向
沒有完整原始碼時,先讀 REA 整合 Skill,依成品、離線紀錄、黑箱目標或文件分流。REA 是選用 provider;只有文件/UI 不強制安裝 REA。來源 manifest 記 source_available=false;Phase 03 改做成品與行為蒐證,不能要求完整類別、服務端路由或 DB。
保留既有產物檔名;資料不足時寫未知或空清單並附 coverage,不以檔案存在推定完整。Phase 02 必須讀取 evidence_manifest.json、findings_index.json、unknowns.json、coverage.json;內部無證據時用黑箱節點,不補造 ER/DDL/handler。原始 REA observed 不等於本次執行。
起點先執行 python scripts/check_no_source_evidence.py --project <專案路徑> --inputs-only;交接時由 reverse integrity/Mode E 檢查證據與覆蓋。仍按 Phase 03→02→01 候選流程及既有正向核准關卡推進。
逆向威脅建模的面向與維度
符合既有威脅建模啟用條件時,依 面向與方法選用指引 規劃覆蓋,以 DFD+STRIDE 為主線,按資料、業務、部署及證據選用隱私、濫用案例與攻擊路徑等補充。未見控制記未知;沒有部署證據不填成部署事實。新增方法/分類同步個案 code_glossary.md,不改人工核准與主動測試授權。