⚠️ 公開版本狀態:研究預覽
0.1.0 DMG 僅支援 Apple Silicon,未通過有效 Developer ID 簽章與 notarization,且無法由公開倉庫中的原始碼重建。Windows、Intel macOS 與過去文件提到的 privileged helper 目前都沒有可下載的正式 artifact。
歷史 DMG 的 SHA-256 為 897967c1a83071a16e6086ff58ca111c22091430b6c904cd479206540169af30。此值只能核對下載 bytes,不能證明軟體安全或復原結果正確。本站暫停主要下載入口,直到來源/輸出實體隔離、檔案系統 corpus、簽署與發布 gate 通過。
請參閱 能力矩陣、發布稽核與安全政策。不要在唯一一份原始資料上測試本預覽版;故障媒體應優先製作可恢復的映像或尋求專業服務。
隱私範圍需分開理解:桌面 App 尚待版本一致的網路行為驗證;本網站則會載入 Google Fonts 與站點統計腳本,因此瀏覽頁面時會產生一般網站請求。
在電腦鑑識(Computer Forensics)和災難復原領域中,最令人頭痛的莫過於檔案系統嚴重損毀、硬碟分割表遺失,甚至是被格式化後的殘局。市面上的救援工具雖然琳瑯滿目,但底層技術細節多被包裝成黑盒子。
本篇文章將為您全面揭密本專案 —— Polik Recovery Engine。這是一個基於 Rust Workspace 精巧架構設計的資料救援引擎。我們不僅以零複製(Zero-copy)的高效邏輯重新實作了多種經典與現代檔案系統的解析器,更配備了高置信度的特徵碼雕刻模組,使您能夠在檔案系統完全損壞的磁碟映像上精準抽取重要檔案。
BlockSource 與獨立輸出 writer 為方向,但目前公開版本尚未完成「來源與輸出位於不同實體磁碟」的 release gate;SHA-256 也只能稽核輸出 bytes,不能取代原檔真值比對。
💡 小白磁碟救援速成班(生活化比喻)小白友善
如果您不是程式設計師,覺得磁碟底層技術太過艱深,沒關係!以下用「圖書館」的日常生活場景,為您快速科普本引擎是如何在不破壞任何資料的情況下,幫您把消失的檔案拯救回來:
硬碟就像一個巨大的圖書館。NTFS、exFAT 與 APFS 就是不同的「圖書編目系統」。當您刪除檔案時,圖書館員只是把目錄卡丟掉,但書架上的書(實體檔案)其實還好好地放在原地!
如果書非常薄(極小的檔案),圖書館員懶得跑去架上放,會直接寫在目錄卡背面(常駐資料)。本引擎能直接在卡片上把內容抄給您,連跑架子的功夫都省了。
當圖書目錄卡全部被大火燒毀時,我們就派「雕刻器」逐一翻找架子,根據書本獨特的「封面特徵 (Header)」與「封底特徵 (Footer)」(如 PNG/JPEG 圖片特徵)來挖出檔案,進行無痛重建。
安全的救援工具應以唯讀方式開啟來源,就像只能閱讀的圖書館檢查員,並把輸出放到另一顆實體磁碟。此公開預覽尚未完成這項 release gate,因此請只使用可拋棄的測試映像,不要直接處理唯一副本。
⚡ 現代化 Tauri 2.0 桌面端圖形介面小白友善
本專案使用 Tauri 2.0 + HTML5 製作桌面操作原型。下方是互動概念示意,不代表目前公開 artifact 已通過真實裝置、安全寫入或完整復原驗證。
- 選擇要掃描的磁碟區段路徑或映像檔案。
- 點擊右上角「開始掃描」,等待解析器建立虛擬目錄樹;時間會依媒體大小與狀況而異。
- 在清單中選取項目並預覽復原流程。正式輸出功能仍須通過安全 gate。
🏗️ 系統架構與四大核心引擎專家特調
開發快照把引擎劃分為多個 crates。以下說明實作方向,不代表公開 0.1.0 artifact 的每項能力已通過版本一致的測試;實際狀態以能力矩陣為準。
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)首位元組會分別被置換成 0x05 和 0x40。
開發快照包含 exFAT 目錄項目、NoFatChain 與 FAT 鏈結的解析路徑;刪除、碎片化、部分覆寫與目錄重建仍需 ground-truth corpus 分別驗證。
APFS 超級區塊校驗與 B-Tree 遍歷
APFS(Apple File System)是蘋果系統的現代檔案系統。其在容器層級(Container Superblock)及卷層級(Volume Superblock)都大量使用了 Fletcher64 校驗演算法 來確保元資料(Metadata)的完整性。
開發快照包含 APFS B-Tree、目錄記錄與 inode 的解析程式,但真實 APFS OMAP/VFS 嚴格 gate 尚未形成公開 artifact 的通過證據。完整路徑、extent、clone、snapshot、壓縮與 FileVault 必須分項驗證,目前維持實驗性。
智慧型 File Carving (特徵彫刻)與 OLE 支援
當檔案系統的分配表(如 FAT、MFT)遭受毀滅性破壞時,唯一的救援途徑就是 **File Carving** —— 循序掃描硬碟中的魔術位元組(Magic Bytes)。
除了支援 PNG、JPEG、PDF、ZIP 與具有嵌套 Box-Walking 長度走訪的 MP4 外,本引擎更進一步支援 **Microsoft Office 舊版 OLE/CFBF 複合二進制格式(如 .doc、.xls、.ppt)**。我們實作了 DIFAT 與 FAT 鏈結分配表解析,動態算出所有配置扇區(Sectors)的最後分佈位置,以精準雕刻出完整的 Office 文件。
🛠️ 開發快照 CLI 範例(目前公開倉庫不可直接執行)專家特調
下列命令保留作為歷史開發介面示例。公開倉庫目前沒有對應產品原始碼與 fixtures,不能直接執行;完成 canonical source 與 release gate 後,文件才會改成版本一致的可重現教學。任何測試只能使用人工 fixture,不得把 /dev/disk* 或唯一資料副本代入。
第一步:編譯與測試
在未來的 canonical source repository 中,應先執行完整 workspace 測試與格式檢查。歷史測試數字不代表目前公開 artifact 的狀態:
# 在具備來源與固定工具鏈的 repository 執行
cargo test --workspace --all-features
# 檢查代碼排版
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 序號)、路徑、類型以及分配狀態(例如 Allocated 或 Deleted):
{
"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 與 find_ole_length 會分別走訪 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)
}
這種依循結構長度進行雕刻的方式,可降低單純 footer 搜尋的誤判,但不能保證碎片化、截斷或 metadata 異常的影片一定完整;仍須以 precision/recall corpus 與輸出 hash 驗證。
🌟 總結
Rust 的型別與記憶體模型能降低部分記憶體錯誤,但 parser、FFI、權限邊界、資源耗盡與復原邏輯仍可能出錯。Polik Recovery 已探索 NTFS、exFAT、APFS 與 File Carving 架構;穩定性和精準度必須由目前版本的可重現測試證明,不能只由使用語言或模組存在推論。
目前公開 repository 沒有開發快照中的交接手冊與產品來源。待 owner 決定開源或專有的 canonical source 策略後,才會發布相符的開發文件、授權與建置方式。
❓ 常見問答 (FAQ)
BlockSource 的 read-only API 是一層防護,但不能單獨證明整套 App 沒有其他寫入路徑。正式設計還需要已簽署且驗證 client 身分的最小權限 helper、以唯讀 flag 開啟 allowlisted device、開啟後重查 identity,以及證明 output 不與 source 共用 physical store。這些 gate 尚未在公開預覽完成。
ftyp 開始檢查 box 長度與類型,遇到異常即停止。它可降低部分誤判,但對碎片化、截斷、惡意長度與罕見 box 的準確率尚未量化,因此維持實驗性。