標籤:相對 是什麼 class 大小 span 直接 linu 關注 恢複
最近得到了一個依舊用晶片直讀方式得到的Android全盤鏡像,這次是一個紅米手機的鏡像,和之前的鏡像不同,這次的分區類型的DOS分區,這裡說明一下,算是對之前那篇記錄的補充。
首先要糾正一下我的一個錯誤觀點:認為DOS分區只和windows OS有關,和linux OS沒有關係。正確的認知應該是:DOS分區是不分什麼OS的,他和GPT分區相似,都是用來管理作業系統中各個檔案系統分區的,而這些檔案系統可以是windows的fat系列、NTFS,也可以是linux的extx系列。
DOS分區和GPT分區類比: 1)GPT分區中的EFI相當於x86的BIOS;
2)GPT分區表相當於DOS分區的MBR;
下面來詳細說明一下DOS分區的格式:
1、MBR
我拿到的這個鏡像,最開始是一個MBR扇區,MBR扇區由三部分組成:1)引導代碼
2)分區表資訊
3)簽名值(55 AA)
想要解析這個鏡像,分區表資訊是我們的線索,DOS的分區表每項由16個位元組構成,每個MBR的分區表有四項,也就是MBR的分區表佔據64位元組。MBR分區表每項結構是:
表裡的所有數字都是十六進位的。
位移(0x) |
位元組數 |
描述 |
00 |
1 |
可引導標誌,80是可引導,00是不可引導 |
01-03 |
3 |
分區起始CHS地址,這個好像現在沒有怎麼用到 |
04 |
1 |
分區類型,05是擴充分區,83是linux分區,82是linux swap,0B、0C是win95 FAT32,86、87是NTFS |
05-07 |
3 |
分區結束CHS地址 |
08-0B |
4 |
分區起始邏輯扇區號,邏輯的意思是相對於DOS分區的起始扇區號而言,也就是說是一個相對位址,計算的時候要通過加上MBR扇區起始地址裝換成絕對位址 |
0C-0F |
4 |
分區大小扇區數 |
分區表的四項內容中,一般是三個主要磁碟分割和一個擴充分區,主要磁碟分割項目記錄不一定要在擴充分區這一項的前面,就是說下面的兩種順序都是可以的:
主要磁碟分割1 |
|
擴充分區 |
主要磁碟分割2 |
|
主要磁碟分割1 |
主要磁碟分割3 |
|
主要磁碟分割2 |
擴充分區 |
|
主要磁碟分割3 |
當然分區表不一定是四項都有內容,也可以是一個主要磁碟分割,剩下的都是擴充分區,總體來說是比較靈活的。
2、EBR
EBR中的E就是extended 擴充的意思,這個扇區用來管理擴充分區,結構和MBR是類似的,也是用分區表來記錄擴充分區中每個主要磁碟分割的分區類型、邏輯起始扇區號、分區扇區數目。需要注意的一點事是,雖然EBR中的邏輯起始扇區號是相對於這個EBR扇區的地址而言的,但是在每個擴充分區的起始扇區號是相對主擴充分區而言,也就是說在跟進EBR分區表將相對位址轉為絕對位址時要小心每個擴充分區地址的計算,其他每個分區的計算都只要考慮分區表的起始地址就可以了。下面這張圖截自 馬林《資料重現-檔案系統原理精解與資料恢複最佳實務》 51頁:
展示的是6個檔案系統分區的情況,當計算二級系統檔案分區1的絕對位址時,用2處地址做基址,二級擴充分區1的絕對位址用1處做基址;二級檔案系統分區2的基址是3,二級擴充分區2的基址還是1。
另外要注意到,6個檔案系統分區的組織情況是:三個主要磁碟分割和三個邏輯分區即二級檔案系統分區1,2,3都是邏輯分區,他們的EBR分區表最多包含兩項,一個邏輯分區一個擴充分區。
3、superblock
我們根據MBR和EBR的指引找到了每個檔案系統分區的類型,但我們怎麼知道這個檔案系統分區的名字是什麼呢?(比如我們關注比較多的data分區)在GPT分區中,我們通過GPT分區表就直接得到了每個檔案系統分區的分區名和地址,但在DOS分區中,我們需要利用超級塊得到Android鏡像各分區的名字。超級塊的位移0x78-0x87的16個位元組記錄了這個分區的分區名,因此,根據MBR和EBR分區表得到的檔案系統分區起始地址和對應超級塊中的分區名組合,我們就可以定位到目標資料分割的起始地址。
後續的解析工作就和解析ext4檔案系統過程一樣,不再重複。
參考:
馬林《資料重現-檔案系統原理精解與資料恢複最佳實務》 第二章和第五章
以晶片直讀方式得到的Android全盤鏡像解析——DOS分區