※ 해당 글에 대해 무단 재배포 및 상업적으로 사용하실 수 없습니다.


HFS+ 소개

• Hierarchical File System Plus의 약자
• HFS의 개량 버전
• 애플 메킨토시 컴퓨터 및 기타 MAC OS를 사용하는 시스템의 파일 시스템
• 파일이나 폴더 이름에 UTF16으로 인코딩
• NTFS와 마찬가지로 n-forked 파일 시스템
• 32 bitAllocation Mapping Table 이용

※ n-forked : 하나의 파일 시스템 오브젝트에 여러 개의 임의의 길이의 데이터를 연관시킬 수 있음


HFS+ 구조



테스트 환경

• OS : Mac OS X 10.8 ver
• 분석 HDD : SCSI HDD 10GB
• File System : HFS+
• Mount Pointer : /Volumes/TEST
• Create File : test(text file)

• Data : hello Mac



Volume Header

• 예약된 영역(1024 byte)는 사용 안함
• 섹터 2개 이후 Volume Header가 위치
• HFS+시그니처, 볼륨 정보, Catalog File 정보 등
• 대체 볼륨 헤더로 알려진 볼륨 헤더의 복사본은 볼륨이 끝나기 전에 1024바이트부터 저장
• 볼륨 헤더는 5개의 특별한 파일, 파일 시스템 페이로드를 액세스 하는 데 필요한 파일 
  시스템 구조를 저장
• the catalog file / the extents overflow file / the allocation file / the attributes file /
  the startup file 등의 정보를 찾아가는데 필요한 정보를 기록

• 파일의 정보를 찾기 위해서 Catalog File를 분석

Volume Header 구조

<Volume Header>

<Block Size>

- Block Size 확인(Big Endian)


<Catalog File>

- Volume Header에서의 Catalog File의 위치 확인

- HFSPLUSForkData 구조로 속성 파일의 위치와 크기 기록

- Catalog File첫번째 시작은 0x00008650

- 계산 방법 : catalog file start block * block size = Offset

=> 0x8650 * 0x1000 = 0x8650000

- Catalog FileOffset은 해당 파티션의 시작 위치를 기준
- 섹터 단위로 이동 하기 위해서 해당 값을 계산
- 계산 방법 : 0x8650000 -> 10진수 변환 -> 140836864 / 512 = 275072
- 파티션의 시작 위치 + Catalog File 위치 // Sector 단위
 => 409640 + 275072 = 684712 sector

해당 섹터에 Catalog File의 정보가 기록되어 있음



Catalog File

• B-tree 파일로 구성되어 있음
• Header Node, Index Node, Leaf Node로 구성
• 첫 번째 NodeHeader Node
• 각 파일이나 폴더에서 Catalog File 고유의 Catalog Node ID 가 할당됨(CNID)
• catalog File에서 기본 node 크기 4KB, Mac OS x에서는 8KB
• 파일의 계층 구조 저장(위치, 크기)

• 일반적으로 root node 위치, leaf record 개수, first leaf node 위치, last leaf node,
  node size 등을 확인
Catalog File 구조

    <Catalog File>        <Header Node>         <Node 구조>


<Catalog File>

<Node Descriptor>

- Node 분석시 먼저 Node Descriptor의 Type 확인

- Header Node에서  확인 및 레코드 수 3개 확인

※ Node 분석시 항상 Node의 종류부터 확인해야 함


종류

 -1 

Leaf node

0

Index node

1

Header Node

2

Map Node

<종류에 따른 값>


<B-tree Header Record>
NodeHeader 정보에서 Root Node노드 번호와 Node size를 확인
Root Node로 이동
계산 방법 : root node * node size = (Catalog File 기준)offset

=> 0x03 * 0x2000 / 512 => 48 + 현위치(684712) = 684760

Root Node 구조
<Root Node>
Index Node 정보는 Record에 순차적 기록
- Node ID를 보고서 해당 Node의 위치를 파악
- “TEST”Child Pointer로 이동하면 만든 test 파일의 Node를 확인 가능
- Node 4번 위치로 이동 방법

=> 0x04 * 0x2000 / 512 + 684712(기준점) = 684776 sector

Leaf Node 구조

<Leaf Node>


<Node Descriptor>

- Leaf NodeType-1(0xFF)

Leaf Node는 파일과 디렉터리의 기본 정보와 데이터의 위치를 기록
HFSPlusCatalogFile, HFSPlusCatalogFolder로 구분하여 분석
HFSPlusCatalogFolder의 크기는 88 byte
HFSPlusCatalogFile의 크기는 248 byte

<"tset"파일의 Record>

- test파일의 Record를 확인

- testfile이므로 HFSPlusCatalogFile로 분석

- test 고유한 CNID : 0x5E

- teststart block : 0x01004A

- testdata 위치 계산 방법 : start block * block size / sector size = offset
=> 계산 : 0x1004A * 0x1000 / 512 = 524880 sector

- offset + 파티션의 시작 위치

=> 계산524880 + 409640 = 934520 sector

- 934520 sector이동시 test의 데이터 확인 가능

"test" 파일의 데이터 확인










'Disk Forensic > File System Forensic' 카테고리의 다른 글

FAT 구조 4 - FAT 구조  (0) 2015.04.03
FAT 구조 3 - FSINFO 구조  (0) 2015.04.03
FAT 구조 2 - BR 구조  (0) 2015.03.31
FAT32 구조 1 - FAT 개요 및 구조  (0) 2015.03.26
MBR 구조  (0) 2015.03.23
GPT(GUID Partition Table) 구조  (0) 2015.03.12
Posted by Gedor
,