跳至主要內容

2026-07-24 數位鑑識的資料格式與解析工具

Q 版主題圖:數位鑑識的資料格式與解析工具

📚 科技研發科週(07-20~07-24)|本篇為公開題材整理,非當日實習日誌。 內容整理自開源鑑識專案的官方說明、廠商公開產品頁與官方文件,用來理解常見資料格式與解析工具的關係。

XML、plist、LevelDB、SEGB,還有 Cellebrite PA、Mushy 這些名稱看起來都像檔案格式,其實不在同一個層次。最好懂的整理方式,是把它們分成四層:

text
數位鑑識資料
├─ 第一層:資料如何表達
│  ├─ XML
│  ├─ plist
│  └─ Protobuf

├─ 第二層:資料如何儲存
│  ├─ SQLite
│  ├─ LevelDB
│  └─ SEGB

├─ 第三層:資料如何解析
│  ├─ Cellebrite Physical Analyzer
│  ├─ Mushy
│  ├─ ArtEx
│  └─ 各類開源解析器

└─ 第四層:如何驗證與呈現
   ├─ 交叉比對
   ├─ 建立時間軸
   ├─ 還原使用行為
   └─ 形成鑑識報告
Q 版分層示意圖:由下而上為資料表達、資料儲存、資料解析、驗證與呈現四層

圖示對應上方四層,只是概念示意,不代表任何實際系統或作業流程。

一、XML 是資料的「書寫方式」

XML 是一種文字型結構化資料格式,用標籤表示資料內容,例如:

xml
<user>
    <name>小明</name>
    <age>20</age>
</user>

它的重點是讓資料具有階層結構,方便人與程式閱讀。所以 XML 比較像一種「資料語言」,本身不是資料庫;許多設定檔、系統交換資料與文件格式都可以用它表達。

Q 版示意圖:解析一層包一層的資料格式

示意:解析一層包一層的資料格式。此圖僅為概念示意,不代表任何實際系統或作業流程。

二、plist 是 Apple 的「屬性表」

plist 是 Property List 的縮寫,是 Apple 生態系常見的結構化資料格式,可以存字串、數字、日期、布林值、陣列、字典與二進位資料。它通常有兩種形式:

text
plist
├─ XML plist
└─ Binary plist

XML plist 直接看得到 XML 標籤;Binary plist 以二進位保存,常以 bplist00 作為檔案開頭。所以 XML 與 plist 是不同層次的東西:plist 是 Apple 定義的資料結構,XML 只是 plist 可以採用的其中一種編碼方式。開源專案 libplist 可以讀寫及轉換 Binary、XML、JSON 與 OpenStep 等 plist,並提供 plistutil 命令列工具。

三、LevelDB 是「鍵值資料庫」

LevelDB 跟 XML、plist 不同層次,它的性質是一種本機鍵值型資料庫,基本概念是把 Key 對應到 Value:

text
username → 小明
theme → dark
message:001 → 訊息內容

Google 對 LevelDB 的官方定位,是把字串形式的 Key 對應到 Value、並依 Key 排序儲存的高速資料庫函式庫;它不是 SQL 資料庫,也沒有資料表、欄位或一般 SQL 查詢。LevelDB 資料夾常看到 CURRENTLOCKLOGMANIFEST-000001000003.log000005.ldb 這些檔案;其中 CURRENT 會指向目前使用的 MANIFEST,而 MANIFEST 記錄資料庫內部檔案與層級狀態。

更要緊的是,LevelDB 只規定怎麼保存 Key 和 Value,不一定規定 Value 裡面放什麼:

text
LevelDB
├─ Key
└─ Value
   ├─ 純文字
   ├─ JSON
   ├─ Binary plist
   ├─ Protobuf
   └─ 其他二進位資料

也就是 LevelDB 可能是外層資料庫,plist、JSON 或 Protobuf 是內層內容。

四、SEGB 是 Apple 的「活動事件紀錄」

SEGB 主要出現在 Apple 的 Biome 資料裡,比較接近一種二進位事件紀錄容器,用來保存系統或使用活動:App 使用狀態、裝置活動、已連接裝置、瀏覽器活動與其他系統事件。開源專案 ccl-segb 把 SEGB 描述為出現在 iOS、macOS 等系統中的 Biome 資料,並提供 SEGB v1、v2 的 Python 解析模組與命令列工具。

概念上一個 SEGB 檔案可能像這樣:

text
SEGB
├─ 檔案標頭
├─ 事件紀錄 1
│  ├─ 時間
│  ├─ 狀態
│  ├─ 版本
│  ├─ 完整性資訊
│  └─ Payload
├─ 事件紀錄 2
└─ 事件紀錄 3

Payload 內可能還有 Protobuf 或其他序列化內容,所以把 SEGB 外層打開,不代表所有內層資料都已經完全理解。

五、Protobuf 是「二進位序列化格式」

Protobuf 全名 Protocol Buffers,是 Google 提出的結構化資料序列化機制,功能類似 XML 或 JSON,但通常以更精簡的二進位形式保存。Protobuf 官方 把它描述為跨語言、跨平台、可擴充的結構化資料序列化機制。

在鑑識分析中,Protobuf 常是資料的「內層格式」:

text
LevelDB Value → Protobuf
SEGB Payload  → Protobuf
SQLite BLOB   → Protobuf

但它有一個限制:缺乏正確的 .proto 結構定義時,即使讀得出欄位編號,也不一定知道每個欄位的真正語意。

六、實際裝置中的整體結構

一支 iPhone 或一個 App 的資料,可能同時包含下列內容:

text
iPhone/App 擷取資料
├─ Info.plist          → App 名稱、版本及權限資訊
├─ Preferences.plist   → 使用者設定及功能開關
├─ SQLite Database
│  ├─ 資料表、紀錄
│  └─ BLOB → 可能內嵌 Binary plist 或 Protobuf
├─ LevelDB
│  └─ Value → 可能內嵌 JSON、plist 或 Protobuf
└─ Biome/SEGB         → App、裝置及系統活動事件

實務上經常是「一層包著另一層」:

text
資料庫
└─ 某一筆紀錄
   └─ 二進位欄位
      └─ Binary plist
         └─ NSKeyedArchiver 物件
            └─ 真正要找的資料

這也是為什麼單靠一套工具,不一定能完整解析所有資料。

七、Cellebrite PA、Mushy 與 ArtEx 的角色

Cellebrite Physical Analyzer 是檢視數位擷取資料、追查事件與分析數位證據的整體分析平台,像整個案件的「主要工作臺」——檔案系統瀏覽、資料庫查看、App 資料解析、關鍵字搜尋、時間軸整理與報告輸出都在上面。但商用工具顯示的結果,仍是工具依既有 Parser 做的解讀;遇到新版本 App、未支援格式或特殊 BLOB,可能得回去看原始資料。

Mushy 是 DoubleBlak 的序列化資料檢視工具,官方說明為簡易 plist 與 Binary plist 檢視器,可將檔案拖入後解析,工具總覽也列出對 XML、SEGB v1/v2 與 ABX 的支援。它比較像「特殊格式放大鏡」,處理單一序列化資料,不做整個案件管理。

ArtEx 是 DoubleBlak 的免費 iOS 鑑識研究、驗證、報告與分析工具,能開啟多種擷取類型,提供資料庫、反序列化、十六進位、時間軸與位置分析。它的定位介於 PA 與 Mushy 之間:

text
Cellebrite PA → 整體案件及擷取資料分析
ArtEx        → iOS 跡證研究、驗證與時間軸分析
Mushy        → 單一序列化資料或檔案的深入檢視

一個要分清楚的點:DoubleBlak 官方頁把 Mushy 與 ArtEx 標為免費工具,但沒有標為開源專案。「免費」與「開源」是兩回事,不該混用。

佐證:Cellebrite Physical AnalyzerDoubleBlak MushyArtEx

八、可以搭配的開源專案

  • iLEAPP(iOS Logs, Events, And Plists Parser):對 iOS/iPadOS 擷取資料自動化解析,產生 HTML、TSV、時間軸、KML 等輸出,適合大量、快速地檢查已知 iOS 跡證。
  • ALEAPP(Android Logs Events And Protobuf Parser):定位與 iLEAPP 類似,主要針對 Android。簡單記:iPhone/iPad → iLEAPP、Android → ALEAPP。
  • ccl-segb:專門處理 SEGB v1/v2 的 Python 模組,可整合進程式或用 CLI 直接預覽、輸出,適合驗證商用工具的 SEGB 解析結果。
  • ccl-bplist:Binary plist 解析模組,含處理 NSKeyedArchiver 結構的輔助功能;對 Apple App 常見的複雜 Binary plist,比單純轉成 XML 更有研究價值。
  • libplist/plistutil:plist 讀寫函式庫與命令列工具,可在 Binary plist、XML、JSON 間轉換(概念上 plistutil -i original.plist -o output.xml);但內部有複雜 NSKeyedArchiver 時,仍可能需要 Mushy 或 ccl-bplist。
  • ccl_chromium_reader:針對 Chrome/Chromium 儲存技術的解析工具,可處理 LevelDB、IndexedDB、Local/Session Storage 等。工具文件也提醒,某些 LevelDB 模組可能同時輸出現存及舊版、已刪除紀錄,分析人員要自行判斷紀錄狀態,不能看到資料就當成現行有效。
  • DB Browser for SQLite:圖形化 SQLite/SQLCipher 工具,查看資料表、執行 SQL、瀏覽欄位。要記得它是給 SQLite 用的,開 LevelDB 資料夾要換 ccl_chromium_reader 之類的工具。
  • Plaso/log2timeline:彙整大量檔案、日誌與系統時間戳,建立跨來源的 Super Timeline。單一紀錄未必能證明完整行為,把多個來源放進同一條時間軸才提高事件重建的可信度。
  • AutopsyThe Sleuth Kit:偏電腦/磁碟鑑識——磁碟映像、檔案系統、檔案復原、關鍵字搜尋。分工上:電腦磁碟 → Autopsy/Sleuth Kit;手機 App 跡證 → Cellebrite、iLEAPP、ALEAPP、ArtEx;特殊 Apple 格式 → Mushy、ccl-bplist、ccl-segb。

九、實際鑑識分析流程

真正的數位鑑識工作不會停在「打開工具看結果」這一步,比較完整的流程是:

text
一、保存原始資料      → 保留原始擷取檔、計算雜湊值、以工作副本分析

二、整體工具定位      → Cellebrite PA、iLEAPP/ALEAPP、Autopsy

三、判斷資料格式      → XML/plist/SQLite/LevelDB/Protobuf/SEGB

四、選專用解析工具    → plist:Mushy/libplist/ccl-bplist
                       SQLite:DB Browser/ArtEx
                       LevelDB:ccl_chromium_reader
                       SEGB:ccl-segb/Mushy/ArtEx
                       Protobuf:Protobuf 工具或專用 Parser

五、核對原始內容      → Hex View、Offset、原始時間戳、編碼方式、紀錄狀態

六、交叉驗證          → 不同工具、不同來源、系統時間軸、實機測試

七、形成鑑識結論

十、一句話的總結

XML 是資料的書寫方式;plist 是 Apple 的屬性資料格式;LevelDB 是鍵值資料庫;SEGB 是 Apple 的活動事件容器。Cellebrite PA 做整體定位與分析,Mushy、ArtEx 與各種開源解析器則負責深入查看特定格式。鑑識結論不能只靠單一工具,要回到原始資料,核對時間戳、欄位、Offset 與紀錄狀態,再用不同跡證交叉驗證。

再簡化成一個比喻:

text
XML、plist、Protobuf   =資料使用的語言
SQLite、LevelDB、SEGB  =存放資料的櫃子或容器
Cellebrite、Mushy、ArtEx、iLEAPP =打開櫃子與翻譯資料的工具
時間軸與交叉驗證       =確認資料真正代表什麼行為

核心是一句:工具負責把資料顯示出來,分析人員負責證明這些資料到底代表什麼。

重點: XML、plist、LevelDB、SEGB 這些名詞不在同一層——先分成「怎麼表達(XML/plist/Protobuf)、怎麼儲存(SQLite/LevelDB/SEGB)、怎麼解析(Cellebrite PA、iLEAPP/ALEAPP、Mushy、ArtEx 與各類開源 Parser)、怎麼驗證(Hex、時間軸、交叉比對)」四層,工具的關係就清楚了。真正吃工夫的不是「打開看到什麼」,而是資料常一層包一層(紀錄→BLOB→Binary plist→NSKeyedArchiver),單一工具未必解得完,還得回原始資料核對時間戳、Offset 與紀錄狀態;商用工具顯示的也只是既有 Parser 的解讀。免費不等於開源、地端不等於安全,都是同一種「別把方便當結論」的紀律。

往下追問:當商用工具與開源 Parser 對同一筆資料給出不同解讀時,鑑識報告該以哪一個為準、又怎麼在報告裡交代這個分歧?一層包一層的反序列化資料(NSKeyedArchiver)若沒有可信的開源解析器支援,實務上要如何確保「解出來的內容」本身可稽核、可重現?

附:從國際治理到國內阻擋的惡意網域鏈

這條線——惡意網域怎麼從國際治理一路被擋到國內(ICANN/GNSO、制定中的 ADC 政策、DGA、RPZ/Sinkhole,與尚未施行的國內法源)——另外寫成完整一篇:2026-07-24(二)從國際治理到國內阻擋:惡意網域的一條鏈

本日對應主題

同系列日誌

主要來源(查核日期 2026-07)

頡譯的實習筆記:內容已去識別化,法規以官方來源為準。