[FORENSIC] FAT 분석하기 & 파일 복구하기

두비니

·

2020. 8. 24. 00:49

 

 

 

KUCIS에서 진행한 과제에 대한 풀이이다.

과제는 FAT와 NTFS의 디스크 안에 삭제된 파일들을 각각 복구하는 것이였다. 

 

1) FAT 분석

 

 

 

전체적인 과정은 다음과 같다. 

우선 MBR(Master Boot Record)를 분석한다. 그 MBR을 통해 BR(Boot Record)의 위치를 찾아낸 후, 

 

MBR 구조

 

 

위 MBR 구조를 참고하여 첫 번째 섹터를 보자

 

 

4개의 파티션 중 유효한 값이 들어가 있는 것은 2개인 것을 알 수 있다. (3/4번째는 값이 전혀 들어가지 않아있음을 알 수 있음) 이걸 분석하여 FAT file system으로 들어갈 것이다.

 

이제 각 파티션의 구조를 알아보자.

 

부팅여부 시작 CHS 파티션 타입 마지막 CHS 시작 LBA 마지막 LBA
1 3 1 3 4 4

구조는 다음과 같이 구성되어 각 파티션은 16바이트를 구성한다.

여기서 사실상 중요한 부분은 LBA를 알려주는 부분이라고 한다. 

시작 LBA를 통해 해당 파티션이 어디서부터 시작하는지 알 수 있다. 즉 시작LBA에 들어가있는 값이 BR의 시작주소를 가리킨다고 한다.

 

1) 첫 번째 파티션 테이블

00 20 21 00 0C 35 70 05 00 08 00 00 00 00 40 00

00 : 부팅 여부; 부팅 불가     (cf. 08 = 부팅 가능)

20 21 00 : 시작 CHS

0C : 파티션 타입

35 70 05 : 마지막 CHS

00 08 00 00 : 시작 LBA

00 00 40 00 : 마지막 LBA

 

시작 주소 : 0x800 = 2048

끝나는 주소 : 0x400000

 

그래서 2048섹터로 넘어가보면 이렇게 잘 있는걸 볼 수 있다. 이 부분을 BR라고 한다. 

 

다음은 FAT 파일 시스템의 구조이다.

FAT파일 구조

우리는 BR을 통해서 FAT#1의 주소를, FAT#1을 이용해 FAT#2의 주소를, 그리고 마지막으로 FAT#2를 이용해 우리가 결국 구해내고 싶은 Root Directory의 주소를 구할 것이다.

 

다음은 FAT Boot Record부분의 구조이다. 

[jump boot code] [OEM name] [byte per sector] [Sector Per Cluster] [Reserved Sector Count] 

            [3]                  [8]                  [2]                       [1]                             [2]

[# of FATs] [*Root Directory Entry Count] [*Total Sector 16] [media] [FAT Size16] [Sector per Track] [# of Header] [ Hidden Sector]

        [1]                              [2]                                  [2]                  [1]              [2]                     [2]                  [2]                [4]

 

[Total Sector 32] [FAT Size 32] [Ext Flags] [File System Version] [Root Directory Cluster]

           [4]                    [4]               [2]                   [2]                            [4]

 

[FSInfo 구조체] [backup sector] []

       [2]                 [2]

 

 

FAT#1 찾는 공식

Reserved Sector Count + FAT BR Sector

 > 0x201E(8222) + 2048(dec) = 10270

FAT#2 찾는 공식

FAT#1 + FAT Size 32(BR에서 찾아야함)

 > 10270 + 0xFF1(4081) = 14351

FAT#2 찾는 공식

FAT#2 + FAT Size 32(BR에서 찾아야함)

 > 14351 + 0xFF1(4081) = 18432

 

실제로 FAT#2는 FAT#1의 백업본과 같기 때문에 hex값이 동일한 것을 확인할 수 있다. 

 

Root Directory의 영역은 다음과 같다.

이제 각 부분을 보자

02 30 00 2E 00 33 00 34 00 5F 00 0F 00 A9 53 00

8byte : 이름

3byte : 확장자명

1byte : 속성  // cf. 0F면 이름이 8바이트 이상이여서 다음 부분도 보라는 뜻. 

뒷부분은 쓸모없는듯하다.

아무튼 다음 섹터를 보라고 했기 때문에 하나에 32바이트니까 두줄 밑에있는 값을 확인하면 된다. 그 밑을 확인하면 또 0F라 넘어간다. 그러면 그 다음은 속성 부분에 0x20, 즉 일반파일이므로 마지막 32바이트를 분석하면 된다.

48 41 53 48 54 41 7E 31 45 58 45 20 00 08 B9 53

EE 4A EE 4A 00 00 99 4E EE 4A 06 00 A0 D8 11 00

 

여기서 봐줘야 할 점은 첫 번째 줄의 마지막 두 바이트. Create time의 의미를 가지고 있고, 이건 2진수로 바꾸어 봐야한다. 0x53B9 = 0b0101001110111001

위에거를 5/6/5로 나눠줌

01010  :  시 10

011101 : 분  29

11001  :  초  25

 

그리고 그 다음 2바이트는 Create Data이다. 계산하는 방법은 Create time과 비트만 다름. (7/4/6)

0x EE 4A

0100101 :  년  2017 

0111      :  월  7

01110    :  일  14

 

그 다음은 차례로 Last Access Date, First Cluster High, Write Time, Write Date, First Cluster Low, File size이라고 한다. file size(4바이트)를 제외하고 각각 모두 2바이트.

여기서 중요한건 First Cluster High, 그리고 First Cluster Low, File size부분이다. 

 

실제 주소 찾는 공식

First Cluster Low || First Cluster High * sector per cluster

(06 00 00 00) = 6 * 8 = 32

즉 찾아야 할 곳은 root directory + 32!

18464로 가주었다.

 

 

섹터 18464가 파일의 시작 섹터이고, 파일의 크기는 1169568이다. 따라서 이를 선택하여 새로운 파일로 복구해보자.

 

복구를 해본 결과, hashtab라는 파일의 설치 프로그램인걸 알게 되었다.

 

 

같은 방법으로 하나 더 알아내었다.

 

 

 

 

'FORENSIC' 카테고리의 다른 글

[Forensic] RDP 로그 분석 + 케이스분석  (0) 2022.10.24
Forensic Tools Starter Kit  (0) 2022.08.24
참고자료  (0) 2021.03.16
[FORENSIC] ZIP 파일헤더 및 분석방법  (0) 2021.03.06
[FORENSIC] 0822 KUCIS 필기본  (0) 2020.08.22