取證——硬盤數據恢復

FAT 文件系統

FAT 文件系統分爲 5 個部分:

MBR區

MBR(Main Boot Record 主引導記錄區) 位於整個硬盤的 0磁道 0柱面 1扇區,佔用 512 字節。

  • ① MBR 引導程序佔用其中的前 446 個字節
  • ② 隨後的 64 個字節爲硬盤分區表(DPT)。每一個分區爲 16 個字節,故共可以劃分 4 個主分區。
  • ③ 最後 2 個字節是分區的階數標誌 0x55AA
DBR區

DBR(Dos Boot Record 操作系統引導記錄區)通常位於硬盤的 0磁道 1柱面 1扇區,是操作系統可以直接訪問的第一個扇區。

它包括一個引導程序和一個被稱爲 BPB(BIOS parameter) 的本分區參數記錄表。

  • 引導程序的主要任務是:當 MBR 將系統控制權交給它時,判斷本分區根目錄前兩個文件是不是操作系統的引導文件,以 DOS 爲例,即是 IO.SYS 和 MSDOS.SYS。低版本的 DOS 要求這兩個文件必須是前兩個文件,而高版本的沒有這個限制。如果確定存在,就把 IO.SYS 讀入內存,並把控制權交給 IO.SYS。
  • BPB 參數記錄塊記錄着本分區的:起始扇區、結束扇區、文件存儲格式、硬盤介質描述符、根目錄大小、FAT 個數。
FAT 區

FAT(File Allocation Table 文件分配表)。同一個文件的數據並不一定完整地存放在磁盤的一個連續的區域內,往往會分成若干段,像一條鏈子一樣存放,這種存儲方式稱爲文件的鏈式存儲。

硬盤上的文件常常要進行創建、刪除、增長和縮短等操作,這樣的操作做的越多,硬盤上的文件就可能被分得越零碎。但是硬盤上會保存着 段與段之間的連接信息(即 FAT),故操作系統可以準確的找到各段的位置並正確讀出。
這種以簇爲單位的存儲方式有一定的缺陷:每個文件的最後一簇都有可能有未被完全利用的空間(Slack 空間)。

爲了實現文件的鏈式存儲,硬盤上記錄着 哪些簇已經被文件佔用,且必須爲每個已經佔用的簇致命存儲後繼內容的下一個簇的簇號,對於一個文件的最後一簇,則要指明本簇無後繼簇。這些信息都由 FAT 來記錄,表中的每個項 記錄 1 個簇的信息。由於 FAT 很重要,所以在原 FAT 的後面會再建一個同樣的 FAT 做備份。

DIR區

DIR(Directory)是根目錄區,緊接着第二FAT表(即備份的FAT表)之後,記錄着根目錄下每個文件(目錄)的起始單元,文件的屬性等。定位文件位置時,操作系統根據DIR中的起始單元,結合FAT表就可以知道文件在硬盤中的具體位置和大小了。

DATA區

DATA(數據)區,是真正意義上數據存儲的地方。位於DIR區之後,佔據硬盤上的大部分數據空間。


Windows 的文件刪除和恢復

Windows 文件刪除分爲邏輯刪除物理刪除

  • 邏輯刪除:將文件刪除到回收站,它只是在系統的文件分配表 FAT 中被刪除的文件目錄條目的相關位置上做上刪除標記,並未將文件從硬盤上徹底刪除
  • 物理刪除:物理刪除相當於 清空回收站,文件的目錄條目被破壞,但是在硬盤中的數據依然還在,但是若是重新寫入文件將這些空間覆蓋則無法找回

當文件被物理刪除時,會將該文件的目錄條目中的文件名的第一個字符替換成刪除標記:E5;其後面的簇都會被標記成未被分配,從而使操作系統無法識別該文件,但是磁盤中的文件數據依然還在。

基於文件目錄的數據恢復

當執行“刪除文件”操作時,系統做了兩件事:

  • 將目錄區中該文件的第一個字符改爲 “E5H” 來表示該文件已經刪除
  • 將文件所佔的 文件簇 在 文件分配表 中的對應表項設爲 0

系統在文件分配表(FAT)中相應位置檢測到 0 就認爲該文件簇處於空閒狀態,可以寫入其他文件,而實際上硬盤的數據並沒有被刪除,除非新的數據被寫進那些扇區,纔會把原來的數據覆蓋,從而真正刪除。

所以在 Windows 中,刪除文件可以說僅僅只改變了某些狀態。

基於文件數據特徵的數據恢復

如果文件刪除後,某些存放文件內容的簇被重新分配使用,這將可能導致無法使用文件的目錄信息來恢復數據。但是存放文件內容的簇不一定完全被分配到,所以 某些殘餘的碎片數據 可能該存在。雖然文件的目錄數據被破壞後,無法確定哪個數據簇原本屬於哪個文件,但是各種類型的文件都有一定的特徵,所以可以依據不同文件類型的數據特徵來從數據區直接恢復文件數據。

邏輯分區恢復

數據恢復 還包括分區表和 BPB 的恢復 等內容。
文件管理是通過目錄來完成的,而目錄是建立在分區基礎上的,一個物理磁盤通過分區表劃分成爲若干個邏輯分區,分區表損壞就不能定位邏輯盤。但是每個分區的開頭都有其特徵,根據這些特徵可以恢復分區表,重新分區後也能找到先前的分區。


Linux 系統的文件刪除和恢復

組成 Linux 文件系統的數據通常分爲兩大部分:文件的信息和文件的數據。

  • 文件的信息包括:超級塊、索引節點、目錄文件等,被稱爲元數據
  • 文件的數據:即文件的內容

文件的數據存儲在磁盤上的數據塊中;
數據塊的狀態(空閒/已分配)信息存儲在數據塊位圖中;
通過索引文件、目錄文件等元數據,文件系統才能將一個或多個數據塊中的數據組合成抽象的文件。

Linux 中刪除一個文件

① 首先將索引節點文件所佔用的數據塊的狀態信息標記爲空閒
② 然後增大目錄文件中相應目錄項的前一項中記錄項長度的值
③ Linux 文件的刪除過程中 知識釋放了索引節點表和所佔用的數據塊,只要該數據塊沒有被覆蓋,其數據還是存在於磁盤中的

1. 知道文件內容的文件恢復方法

若不小心刪除了某個文件,並且知道該文件的部分內容,首先要停止該文件所在分區上的所有 I/O 操作:可以卸載該分區、或者是系統處於單用戶狀態。

可以將該文件所在分區以只讀方式重新掛載:
mount -o ro -n /dev/hda /mnt

下面假設是 /etc/passwd 被刪除了,演示恢復步驟:
① 查看掛載情況
df

② 使用 dd 命令將 /etc/passwd 所在分區進行拷貝到一個文件中
dd if=/dev/xxx of of=/home/test.dsk

③ 使用 cat 命令和 grep 命令來查找 /etc/passwd 文件中所知道的文件內容
cat -n test.dsk | grep "root:x:0:1"

④ 使用 grep -A 命令來查找 “root❌0:1” 該行和後面 10 行的內容,並重定向輸出
grep -A 10 "root:x:0:1" test.dsk > passwd

⑤ 這樣數據就恢復到了 passwd 文件中

2. 根據文件的類型來恢復文件

文件被刪除後,文件內容一直保留在磁盤上知道文件被覆蓋爲止。一旦文件被刪除,被刪除文件所在的數據塊成爲未分配空間的一部分。可以通過在未分配空間中尋找文件頭的方法來手工恢復文件

用這種方法必須滿足以下 3 個條件:

  • 可以識別文件頭信息
  • 文件沒有被覆蓋
  • 文件是連續存儲的,如果文件不是連續存儲的,則只能恢復部分文件

假設有一個含有被刪除的 .jpg 文件的磁盤映像,演示恢復步驟
① 首先通過查找字符 “JFIF” 來確定每個 .jpg 文件的第一個扇區
(JFIF 是 JPG 文件的標註信息,且 JPG 文件的前三個開始字符是 ffd8ff)

② 假設得出被刪除文件的起始扇區地址是 0x5e400;將其轉換成 10 進制數爲 386048;再除以每個扇區的字節數(假設爲 512B),即 386048 / 512 = 754.
則 754 就是該文件的起始扇區號

③ 在大多數情況下不知道被刪除文件的確切長度,所以只能猜測。
如果猜少了,則只能恢復部分文件,圖像就不完整;
如果猜多了,則依舊可以顯示完整的圖像。

④ 利用 dd 命令來恢復被刪除的文件
dd 命令的輸入 if 是我們準備好的 磁盤映像文件輸出文件則是要恢復出的圖像文件。

指定開始扇區號爲 754,文件大小猜測爲 15KB(30個扇區)
dd if=image.dd of=recover.jpg skip=754 count=30

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章