1. 程式人生 > >以芯片直讀方式得到的Android全盤鏡像解析——DOS分區

以芯片直讀方式得到的Android全盤鏡像解析——DOS分區

xtend gpt 裏的 per 記錄 style 工作 計算 區號

  最近得到了一個依舊用芯片直讀方式得到的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分區