🎯 選擇您的閱讀視角:
Desktop App & Technical Deep Dive

極限磁碟救援:用 Rust 重構安全、高效的資料復原引擎

兼具極簡圖形化介面(Tauri 桌面端)與硬核技術深研的多功能資料復原系統。實現 NTFS 常駐/非常駐屬性、exFAT 目錄樹遍歷、APFS B-Tree 遍歷與高置信度 File Carving 的唯讀安全救援。

Rust 1.85+
NTFS & exFAT Scan
APFS B-Tree VFS
File Carving (OLE/MP4)

在電腦鑑識(Computer Forensics)和災難復原領域中,最令人頭痛的莫過於檔案系統嚴重損毀、硬碟分割表遺失,甚至是被格式化後的殘局。市面上的救援工具雖然琳瑯滿目,但底層技術細節多被包裝成黑盒子。

本篇文章將為您全面揭密本專案 —— Polik Recovery Engine。這是一個基於 Rust Workspace 精巧架構設計的資料救援引擎。我們不僅以零複製(Zero-copy)的高效邏輯重新實作了多種經典與現代檔案系統的解析器,更配備了高置信度的特徵碼雕刻模組,使您能夠在檔案系統完全損壞的磁碟映像上精準抽取重要檔案。

⚠️ 安全原則:唯讀、可稽核
資料救援的最核心天條是「絕對不要在受損磁區上進行任何寫入操作」。本引擎完全基於唯讀的 `BlockSource` 管道設計,所有的寫入操作均由 `Safe Writer` 接管,並會被完整雜湊(SHA-256)以供數位鑑識稽核。

💡 小白磁碟救援速成班(生活化比喻)小白友善

如果您不是程式設計師,覺得磁碟底層技術太過艱深,沒關係!以下用「圖書館」的日常生活場景,為您快速科普本引擎是如何在不破壞任何資料的情況下,幫您把消失的檔案拯救回來:

📖
什麼是檔案系統?(圖書目錄卡)

硬碟就像一個巨大的圖書館。NTFS、exFAT 與 APFS 就是不同的「圖書編目系統」。當您刪除檔案時,圖書館員只是把目錄卡丟掉,但書架上的書(實體檔案)其實還好好地放在原地!

📌
什麼是常駐資料?(便利貼)

如果書非常薄(極小的檔案),圖書館員懶得跑去架上放,會直接寫在目錄卡背面(常駐資料)。本引擎能直接在卡片上把內容抄給您,連跑架子的功夫都省了。

🏺
什麼是檔案雕刻?(數位考古學)

當圖書目錄卡全部被大火燒毀時,我們就派「雕刻器」逐一翻找架子,根據書本獨特的「封面特徵 (Header)」與「封底特徵 (Footer)」(如 PNG/JPEG 圖片特徵)來挖出檔案,進行無痛重建。

📦
這套軟體安全嗎?(唯讀天條)

本引擎嚴格遵守「唯讀 (Read-only) 規則」,就像一位只能看、不能寫字的圖書館檢查員。我們絕對不會動到您受損的硬碟,而是把救出的資料安全複製到您指定的新隨身碟或新資料夾中。

🎮 互動沙盒:磁碟救援物理運作模擬器
點擊按鈕進行模擬
📂 檔案編目目錄卡 (Metadata Index)
已分配 (Allocated)
📄 report.txt
大小: 42 B | 指向磁區: Sector 2
已分配 (Allocated)
🖼️ family_photo.png
大小: 15 KB | 指向磁區: Sector 3
💿 磁碟實體資料區 (Physical Sectors)
Sector 1 (系統引導區)
[引導區 Block]
Sector 2 (檔案資料區)
"報告內容: Rust 救援引擎完成測試。"
Sector 3 (檔案資料區)
[family_photo.png 二進位影像]
Sector 4 (空白閒置區)
[ 空白無資料 ]
> 系統準備就緒。請點擊「步驟一」按鈕開始模擬檔案刪除。

⚡ 現代化 Tauri 2.0 桌面端圖形介面小白友善

為了讓非專業使用者不需要接觸命令列(CLI),本專案已使用 Tauri 2.0 + HTML5 框架封裝成精美的桌面版應用程式。雙擊即可開啟直覺的點擊操作,在背景透過極速 Rust 引擎與安全寫入器為您把關資料。

Polik Recovery Workbench UI (Tauri macOS - 互動演示)
RECOVERY CORE ⚡ NTFS 磁碟掃描 💾 exFAT 磁碟掃描 🧭 APFS 容器檢查 🔍 Raw 檔案彫刻 /dev/rdisk2s1 (NTFS Partition) 開始掃描 🔍 已辨識之虛擬檔案結構 (VFS) 📁 / (Root) 📄 /$MFT (16.0 KB) - Allocated 📄 /report.txt (42 B) - Deleted 🌟 (已選) 📄 /document_old.doc (15.5 KB) - Deleted 📋 檔案屬性詳情 名稱: report.txt 狀態: 已刪除 (Deleted) 大小: 42 位元組 安全稽核: SHA-256 合規 💾 執行真實復原 Tauri IPC Status: Connected to Rust Engine v0.1.0
💡 簡單三步驟,小白救檔案無門檻
  1. 選擇要掃描的磁碟區段路徑映像檔案
  2. 點擊右上角「開始掃描」,數秒內即會生成虛擬目錄樹。
  3. 在清單中勾選您要復原的項目,點選「💾 執行真實復原」即可還原!

🏗️ 系統架構與四大核心引擎專家特調

整個引擎以功能劃分為數個微型模組(Crates),以達成低耦合與高測試覆蓋率。以下為核心模組的設計架構:

NTFS MVP 核心閉環與常駐資料提取

NTFS 使用 MFT (Master File Table) 紀錄來管理硬碟上的所有檔案。當檔案非常小(一般小於 700 位元組)時,NTFS 會直接把檔案內容放在 MFT 紀錄的 $DATA 屬性內(稱為常駐資料 Resident Data)。當檔案變大時,內容才會轉存至外部磁區(非常駐資料 Non-Resident Data),並以 Data Runs (映射鏈) 的形式指明磁區位置。

本引擎同時支援常駐與非常駐 `$DATA` 屬性提取,並具備更新序列校正(Fixup Array Verification)功能,防範磁區寫入不完整所產生的損壞數據。

💾
常駐 & 非常駐自動適配

自動識別 `$DATA` 屬性類型。小檔案由記憶體直接 clone 輸出,大檔案則依據 cluster 映射鏈走訪 BlockSource 讀取。

🛡️
旗標安全檢測

精準解碼 MFT 屬性頭的 flag 狀態,主動判別與標示壓縮(Compressed)、加密(Encrypted)與稀疏(Sparse)檔案,預防救援過程崩潰。

exFAT 遍歷與刪除檔案檢索

相較於 NTFS 的複雜性,exFAT 的結構更為緊湊。其目錄項目以 32 位元組為單位成組(Primary Directory Entry Group)排列。當一個檔案被刪除時,其對應的 File Entry(0x85)和 Stream Extension Entry(0xC0)首位元組會分別被置換成 0x050x40

我們的 exFAT 解析模組能夠完整解碼這些狀態,在掃描時主動找出已被刪除的目錄與檔案,並透過無 FAT 鏈結(NoFatChain)或尋找 FAT 表的方式動態重建完整的虛擬樹狀路徑!

APFS 超級區塊校驗與 B-Tree 遍歷

APFS(Apple File System)是蘋果系統的現代檔案系統。其在容器層級(Container Superblock)及卷層級(Volume Superblock)都大量使用了 Fletcher64 校驗演算法 來確保元資料(Metadata)的完整性。

除了校驗碼驗證外,本引擎更實作了完整的 APFS B-Tree 遍歷與走訪演算法,深度解析目錄記錄(Dir Record)與 Inode 節點。這讓我們能從損壞的 APFS 容器中解析出完整的虛擬檔案系統(VFS)樹狀結構,還原出原始檔案與資料夾路徑。

智慧型 File Carving (特徵彫刻)與 OLE 支援

當檔案系統的分配表(如 FAT、MFT)遭受毀滅性破壞時,唯一的救援途徑就是 **File Carving** —— 循序掃描硬碟中的魔術位元組(Magic Bytes)。

除了支援 PNGJPEGPDFZIP 與具有嵌套 Box-Walking 長度走訪的 MP4 外,本引擎更進一步支援 **Microsoft Office 舊版 OLE/CFBF 複合二進制格式(如 .doc.xls.ppt)**。我們實作了 DIFAT 與 FAT 鏈結分配表解析,動態算出所有配置扇區(Sectors)的最後分佈位置,以精準雕刻出完整的 Office 文件。

🛠️ 實戰教學:如何一步步使用 CLI 進行資料救援專家特調

現在,我們將透過實際操作,帶您在終端機中體驗這一套 Rust 資料救援引擎。

第一步:編譯與測試

首選,請確保您在專案根目錄下,執行以下指令以確保整個工作區編譯正確且測試通過:

# 測試全部 48 個測試案例
cargo test

# 檢查代碼排版
cargo fmt --check
💡 提示:更簡單的啟動方式(互動式選單嚮導)

如果您不想記憶或輸入長長的命令列參數,可以直接執行以下指令啟動 中文互動式選單嚮導 (Interactive Wizard),系統會以選單形式一步步引導您進行所有功能的執行與復原:

cargo run -q -p polik-recovery-cli

第二步:列舉硬碟裝置

本引擎的 macOS 模組可以讀取磁碟配置。你可以使用 devices 指令列出受保護或外接的唯讀硬碟:

cargo run -q -p polik-recovery-cli -- devices

第三步:掃描 NTFS 並建立 VFS 樹狀結構

讓我們使用測試映像檔,將其中的檔案結構以 JSON 格式印出,這有助於後續 UI 端或計畫程式進行解析:

cargo run -q -p polik-recovery-cli -- ntfs-scan-vfs --file fixtures/images/ntfs_volume_with_mft.bin --count 2 --format json

執行後,您將會得到類似下方的結構,標明了每個檔案的 id(MFT record 序號)、路徑、類型以及分配狀態(例如 AllocatedDeleted):

{
  "source": "fixtures/images/ntfs_volume_with_mft.bin",
  "volume_offset": 0,
  "entries": [
    {"id":0,"path":"/$MFT","kind":"File","status":"Allocated","size":16384},
    {"id":5,"path":"/report.txt","kind":"File","status":"Deleted","size":42}
  ]
}

第四步:執行批次復原計畫 (Batch Recovery)

透過建立一個復原計畫的 JSON 檔(例如 plan.json),我們可以一次抽取多個選定項目,並將其安全寫入指定的目的地。

💡 提示:批次復原計畫格式
plan.json 中指明來源映像與需要抽取的 record_index 及其輸出檔名即可。
{
  "source": "fixtures/images/ntfs_volume_extract.bin",
  "volume_offset": 0,
  "items": [
    { "record_index": 0, "output_filename": "recovered_data.txt" }
  ]
}

接著,在 CLI 中執行此計畫:

cargo run -q -p polik-recovery-cli -- ntfs-extract-batch --plan plan.json --output-dir /tmp/recovered_output

執行完畢後,在 /tmp/recovered_output 目錄下,您會發現復原成功的檔案、單一檔案的雜湊證書,以及專門用來作鑑識與稽核的 recovery-session.manifest.txt 總結清單!

🔍 File Carving 實際示範與 MP4 Box 走訪細節專家特調

當我們面臨一塊被完全格式化的隨身碟時,檔案系統資料已經蕩然無存,這時可以利用 carve 指令直接掃描特徵並重建檔案。

cargo run -q -p polik-recovery-cli -- carve --file <raw_image.bin> --output-dir /tmp/carved_files --format text

在背後,以 MP4 檔案的彫刻為例,引擎不會傻傻地只去尋找 footer,因為許多 MP4 並沒有統一的結尾標記。相反地,[find_mp4_length](file:///Users/huangjianzhe/Desktop/資料救援/crates/file-carver/src/lib.rs#L218) 與 [find_ole_length](file:///Users/huangjianzhe/Desktop/資料救援/crates/file-carver/src/lib.rs#L289) 函數會分別走訪 MP4 Box 及 OLE FAT 分配扇區結構鏈:

// 簡化版 MP4 Box 走訪示意
fn find_mp4_length(source: &S, start_offset: u64) -> Option<u64> {
    let mut offset = start_offset;
    while offset < limit {
        let box_size = read_be_u32(source, offset)?;
        let box_type = read_box_type(source, offset + 4)?;
        
        // 若遇到不合常理的 box_size 或包含非 ASCII 字元的 type,則停止
        if !is_valid_type(box_type) { break; }
        
        offset += box_size; // 前進到下一個 Box
    }
    Some(offset - start_offset)
}

這種依循結構長度進行雕刻的方式,能夠確保在硬碟區段中,精準擷取出未受碎裂化(Fragmentation)影響的完整影片檔案!

🌟 總結

利用 Rust 開發的這套 Polik Recovery Engine,以無記憶體安全風險、零成本抽象的優勢,為資料救援提供了穩健的架構。無論是針對結構嚴密的 NTFS、適用於隨身碟的 exFAT、現代 Apple 設備的 APFS,或是最底層的 File Carving 特徵掃描,此核心引擎都展現了出色的穩定性與精準度。

歡迎您直接閱讀 [開發交接手冊 (handoff.md)](file:///Users/huangjianzhe/Desktop/資料救援/docs/handoff.md),了解如何以此核心為基礎,串接您的 Flutter/Tauri 應用程式或進行後續功能擴展!

❓ 常見問答 (FAQ)

🙋‍♂️ 這套軟體真的完全免費嗎? 小白友善
是的!本專案是一個基於開源精神開發的資料救援核心引擎,不論是底層的 Rust 核心庫、命令列工具 (CLI),還是打包好的 Tauri 桌面應用程式,皆完全開源且免費供大家使用。
🛡️ 軟體會弄壞我原本的隨身碟或磁碟嗎? 小白友善
絕對不會。本救援引擎在開口讀取任何裝置或映像檔時,均嚴格強制採用「唯讀模式 (Read-only)」。寫入功能只會在您指定儲存救回檔案的「新安全目錄」時才會運作,這保證了您原本受損的磁碟不會遭到任何二次覆寫損壞。
🍎 支援哪些作業系統平台?
目前我們的主要開發與建置平台為 macOS (已經完成圖形界面編譯並封裝產出 .app 與 DMG 安裝檔)。Windows 原生底層磁碟讀取層已在後續開發藍圖 (Roadmap) 中,未來將會適配支援 Windows 的圖形版。
💻 本引擎如何確保在底層讀取 raw 裝置時的唯讀安全性? 專家特調
在核心中,所有磁碟讀取操作都是通過 BlockSource 抽象特質(Trait)來進行的,該 API 只暴露了讀取(Read)方法,且在底層開啟 /dev/rdiskN 時強制使用唯讀模式的 Flag(例如 Rust 中的 OpenOptions::new().read(true).write(false).open(...))。任何寫入動作在編譯與運行層面均被完全杜絕。
🔍 File Carver 是如何克服 MP4 沒有固定結尾標記並防止虛假特徵的? 專家特調
我們的 File Carver 針對 MP4 實作了 Box-Walking (結構盒子走訪)。當掃描到 ftyp 表頭後,會讀取前 4 位元組長度與後 4 位元組 Box 類型(如 moov, mdat),然後跳轉到下一個 Box,並遞迴檢驗其合法性(是否為常見 ASCII 盒子類型)。只要偵測到非法 Box 或大小異常,就會中止長度計算,這相較於傳統粗暴的特徵碼搜尋,能提供接近 100% 的準確長度。