ext4_image1.001 이미지를 HxD 프로그램으로 분석하고 파일을 추출해보자.
1. HxD 프로그램 열기
[도구] - [디스크 이미지 열기] - [ext4_image1.001 파일 선택]

디스크 이미지 열기를 하면 섹터 (512byte) 단위로 분석할 수 있다.
2. MBR 분석
MBR이란 저장 매체(물리 디스크)의 첫 번째 섹터에 위치하며 512Byte의 크기이다.

맨 마지막 2byte 가 MBR signature 부분이다.
MBR signature = 0x55AA

연두색 네모 부분이 다음과 같은 구조를 가진다.
• Part type
- 0x83 --> Linux native file system (ex2fs/xiafs)
• LBA 시작주소 (Starting LBA Addr)
- 실제 파티션이 시작되는 섹터의 위치
- 주소계산 할 때 사용
- 0x00000800 = 2048 (Little Endian)
3. Super Block
LBA 시작주소인 섹터 2048이 Superblock의 주소이다.
[ 섹터 2048, 2049 ]

섹터 2048, 2049는 다음과 같이 0패딩이 되어있어 0으로 채워져 있다.
[ 섹터 2050 ~ ]

superblock은 총 1024byte로 실제 사용하는 영역은 상위 264byte이고 나머지 하위 영역은 예약된 영역이다.
아래와 같은 구조를 가진다.

• Log Block Size
- 블록의 크기 지정
- 0 : 1KB, 1 : 2KB, 2 : 4KB
- 0x02 = 2 --> 블록 크기는 4KB이다.
• Block Per Group
- 각 블록 그룹에 속한 블록 개수
- 0x8000 = 32768
• Inode Per Group
- 각 블록 그룹에 속한 아이노드 개수
- 0x1FF0 = 8176
• Magic Signature
- 슈퍼블록의 시그니처
- 0x53EF
Super Block은 총 1block의 크기를 지닌다.
블록의 크기가 4KB이므로 SuperBlock은 8sector의 크기이다. (1KB = 1024byte)
• Boot Sector 영역 (0패딩) = 2sector
• Superblock의 실제 영역 = 2sector
• unused 영역 = 4sector

따라서 Group Descriptor Table 영역 시작 주소는 섹터 2056이다.
4. Group Descriptor Table
Group Descriptor Table 시작 주소인 섹터 2056으로 이동하자.


연두색 네모 부분이 다음과 같은 구조를 가진다.
맨 처음 32byte 부분이 0번 블록그룹 정보이다.
그 다음도 32byte씩 1번, 2번 등등의 블록그룹 정보가 저장되어 있다.
0번 블록그룹 정보를 자세히 살펴보자.
• Block Bitmap 시작 주소 ( Starting Block Address of Block Bitmap )
- 0x0396 = 918
- 섹터단위 주소계산
= Block Bitmap 시작 주소 x 1 block 크기 + LBA 시작주소
= ( 918 x 8 ) + 2048 = 9392
• Inode Bitmap 시작주소
- 0x03A6 = 934
- 섹터단위 주소계산 = ( 934 x 8 ) + 2048 = 9520
• Inode Table 시작주소
- 0x03B6 = 950
- 섹터단위 주소계산 = ( 950 x 8 ) + 2048 = 9648
5. Block Bitmap
Block Bitmap 시작 주소인 섹터 9392로 이동하자.
Block Bitmap은 블록의 사용 현황을 Bit로 표현하여 나타낸 것이다.
ex) 0xFF = 0b1111 1111
--> 1의 개수 = 8
--> 8개 블록 사용중

• 오프셋 496000 ~ 496474 : 0xFF로 채워져 있다.
--> 8 * ( 16 * 47 + 5 ) = 5056
• 오프셋 496475 : 0x0F
--> 4
--> 5056 + 4 = 6060
• 블록현황 : 6060개 블록 사용 중
6. Inode Bitmap
Inode Bitmap 시작 주소인 섹터 9520으로 이동하자.
Inode Bitmap은 아이노드의 사용 현황을 Bit로 표현하여 나타낸 것이다.

• 0xFFFF = 0b 1111 1111 1111 1111
• 아이노드 현황 : 16개 아이노드 사용 중
7. Inode Table
Inode Table 시작 주소인 섹터 9648으로 이동하자.

Inode 크기 = 256byte
한 섹터 당 두개의 Inode를 지니고 있다.
Inode 2번이 Root Directory이다.
따라서 Inode 2번을 자세히 살펴보자.
[ Inode 2번 ]


Inode의 구조는 다음과 같다.
• Direct Pointer
- 파일의 내용이 들어있는 블록의 번호 기록
- 루트 디렉토리의 포인터
- 0x23A6 = 9126
- 섹터주소 계산 : ( 9126 * 8 ) + 2048 = 75056
8. Directory Entry

Director Entry 구조는 다음과 같다.

다음과 같이 lost+found 디렉토리 1개와 KAKAO.jpeg, TEST_FILE, apeach.png, kakao_apeach.png, toystory.jpeg 파일 5개가 이미지 안에 저장되어 있는 것을 알 수 있다.
먼저 KAKAO.jpeg 파일을 추출하기 위해 아이노드 12번을 자세히 살펴보자.
8.1. KAKAO.jpeg
Inode 1번이 섹터 9648이므로 Inode 11번은 섹터 9653이다.

[ 아이노드 12번 ]

• Direct Pointer : 0x8396 = 33686
• 주소 계산 : ( 33686 * 8 ) + 2048 = 271536
KAKAO.jpeg 정보가 저장되어 있는 섹터 271536로 이동하자.

• JPEG 파일
- 헤더 시그니처 : FF D8 FF E0 --> 오프셋 : 8496000
- 푸터 시그니처 : FF D9 --> 오프셋 : 849CC99
1) [편집] - [블록단위 선택] : 오프셋 8496000 부터 오프셋 849CC99 까지 블록선택을 하고 복사를 한다.
2) [파일] - [새로 만들기] : 새로운 창에 복사한 값을 붙여넣기 삽입한다.
3) KAKAO.jpeg로 저장한다.
KAKAO.jpeg 파일을 열어보면 다음과 같은 사진을 볼 수 있다.

8.2. TEST_FILE
[ 아이노드 13번 ]

• Direct Pointer : 0x839D = 33693
• 섹터 주소 계산 : ( 33693 * 8 ) + 2048 = 271592
TEST_FILE 정보가 저장되어 있는 섹터 271592로 이동하자.

2020 FaS filesystem!!!! 라고 저장되어 있는 것을 볼 수 있다.
8.3. apeach.png
[ 아이노드 14번 ]

파일 사이즈가 0으로 파일을 찾을 수 없다.
8.4. kakao_apeach.png
[ 아이노드 15번 ]

• Direct Pointer : 0x839E = 33694
• 섹터 주소 계산 : ( 33694 * 8 ) + 2048 = 271600
kakao_apeach.png 정보가 저장되어 있는 섹터 271600으로 이동하자.

• PNG 파일
- 헤더 시그니처 : 89 50 4E 47 0D 0A 1A 0A --> 오프셋 : 849E000
- 푸터 시그니처 : 49 45 4E 44 AE 42 60 82 --> 오프셋 : 855B23F
1) [편집] - [블록단위 선택] : 오프셋 849E000 부터 오프셋 855B23F 까지 블록선택을 하고 복사를 한다.
2) [파일] - [새로 만들기] : 새로운 창에 복사한 값을 붙여넣기 삽입한다.
3) kakao_apeach.png로 저장한다.
kakao_apeach.png 파일을 열어보면 다음과 같은 사진을 볼 수 있다.

8.5. toystory.jpeg
[ 아이노드 16번 ]

• Direct Pointer : 0x845C = 33884
• 주소 계산 : ( 33884 * 8 ) + 2048 = 273120
toystory.jpeg 정보가 저장되어 있는 섹터 273120으로 이동하자.

• JPEG 파일
- 헤더 시그니처 : FF D8 FF E0 --> 오프셋 : 8496000
- 푸터 시그니처 : FF D9 --> 오프셋 : 849CC99
1) [편집] - [블록단위 선택] : 오프셋 849E000 부터 오프셋 855B23F 까지 블록선택을 하고 복사를 한다.
2) [파일] - [새로 만들기] : 새로운 창에 복사한 값을 붙여넣기 삽입한다.
3) toystory.jpeg로 저장한다.
toystory.jpeg 파일을 열어보면 다음과 같은 사진을 볼 수 있다.

9. 총 정리
따라서 ext4_image1.001의 디렉터리 구조는 다음과 같다.

'Digital Forensic > File System' 카테고리의 다른 글
| [ Ext4 File System ] 3.1. image 파일 파이썬으로 파싱해서 파일 목록 리스트 구하기 ( ext4_image1.001, ext4_image2.001 ) (0) | 2020.10.04 |
|---|---|
| [ Ext4 File System ] 2. Ext4 파일시스템이란? (0) | 2020.09.09 |
| [ File System ] 1. 파일 시스템이란? (0) | 2020.09.09 |