FAT는 

File Allocation Table로 파일 할당 테이블이다.




위와 같이 MBR /예약영역(Reserved Area)/FAT영역/DATA영역으로 나누어진다.


예약영역에는

Boot Record

File Information

BR Backup

FI Backup 이 존재한다.  Boot Record는 파일 시스템의 정보가 있다.


FAT 영역은 파일의 할당 유무를 알려준다. 원래는 기본적으로 2개가 있다.

하나는 FAT1 하나는 FAT2이다. 둘다 파일의 할당 정보가 들어가있다.

데이터영역은 Root Directory 라고 한다

파일의 주소들이 적혀있고 그곳으로 따라가면 거기 정보가 있다.



HxD로 자세히 살펴본다.

63번섹터로 가보자.






처음 3바이트는 부트로더를 찾아가는 코드이다. 이 파티션은 부팅 파티션이 아니므로 상관없다





예는 OEN NAME이라 한다. 해당 파일시스템의 이름이나 운영체제의 이름을 뜻한다.

여기서는 MSDOS5.0으로 표시되어 있다. 8바이트로 나타낸다





그다음 2바이트는 섹터의 바이트를 적어놓는다. 거꾸로 읽어야 하므로 0200이다.

16진수이므로 10진수로 바꿔주면 512이다. 이 의미는 한 섹터의 바이트가 512바이트라는 의미이다.




그다음 1바이트는 한 클러스트에 있는 섹터의 갯수롤 알려준다.

08 이므로 한 클러스터에는 8개의 섹터가 있다는 의미이다.




그다음 2바이트는 예약섹터의 갯수이다.

2200이 아니라 0022라고 읽어야한다. 34개의 섹터가 예약 섹터이다.






그 다음 바이트는 FAT영역의 갯수이다. FAT1 FAT2로 기본적으로 나누어져 있어서 2이다.





두번째 줄 끝에서 4바이트는 히든섹터이다.

사용하지 않는 섹터이며 00 00 00 3F 이므로 10진수로 63이다.

0번부터 62번 섹터까지는 숨겨져 있다는 뜻이다.





표시된 4바이트는 총 섹터의 갯수이다. 파일시스템도 MBR로 갈 필요없이 한번에 확인하기 위해 기록한다.

00 3F FA 86 이므로 4192902개이다.

여기서 512를 곱하고 1024/1024를 하면 M바이트 단위로 구할 수 있다. 계산하면 2기가가 나온다.





표시된 4바이트는 실제 FAT하나의 영역의 섹터 갯수를 나타낸다.

0FF7는 10진수로 4087이다. 그럼 위와같은 분석을 통해 아래와 같은 그림이 그려진다.






MBR로 가서 테이블을 타서 63섹터로 이동한다.

예약섹터의 갯수가 34개 이므로 예약영역은 63섹터~97섹터 사이이다.

하나의 FAT영역은 4087이다. 따라서 97~4184(97+4087)이 FAT1영역이고

4184(97+4087)부터 8271(4184+4087)까지 FAT2 영역이다.


8271섹터부터 데이터의 영역이 시작된다는 의미이다.





그리고 표시된 4바이트는 00 00 00 02로 10진수로 2인데

이 의미는 루트 디렉토리가 시작되는 곳이 2번 클러스터라는 의미이다.

루트 디렉토리는 데이터영역에 있다.







내리다보면 69번섹터에 똑같은것이 있는데 백업파일을 따로 만들어 논 것이다.





97섹터이다. FAT1의 시작 섹터이다.

FAT는 파일을 볼때 여기를 먼저보고 해당 파일이 몇번 클러스터에 있는지 확인을 한다.

그리고 그쪽 영역으로 이동하는 구조이다.




4바이트당 한 클러스터로 보면된다.

루트디렉토리가 2번 클러스터부터 있다고 아까 알려주었다.

따라서 0번 1번 클러스터는 사용하지않고 2번부터 사용을 하게 된다.







2번클러스터는 3번째 줄이 쳐져있는 곳이다.

0F FF FF FF-> 루트디렉토리의 클러스터이다.

그 뒤에는 다 00 인데 아무런 내용이 없기 때문이다.







데이터 영역 시작의 섹터로 이동해보자.

8271번 섹터이다. 아무런 파일이 없다. 이 하드에 TXT파일에 아무 내용을 쓰고 저장한 후에 다시 새로고침을 해본다.







전과 다르게 무언가 생겼다.

표시한 3바이트는 확장자를 나타낸다. 54 58 54 는 아스키코드로 TXT이다.




표시된 1바이트는 파일인지 디렉토리인지 알려준다.

20이면 일반파일이고 10이면 디렉토리이다.





끊어서 3개를 표시해놨다

첫번째 A3는 -TIME2

75 OB -TIME1

4C 93 -년도 이다.




먼저 4C 93부터 계산하여보자.


2진수로 바꾸면 

100110010010011


0100110  0100   10011 (6/4/5)로 나눈다

  38           4         19                        

+1980                                             

-----------------------------------------

2018 년    4 월     19일              


으로 계산한다.     

년도에 1980을 더하는 이유는 FAT가 1980년에 나와서 이다.


그다음 TIME1은

75 0B = 111010100001011

4/6/5 로 나눈다


1110 101000 01011

 14      40         11 


마지막에 초를 X2를 한다. 왜냐하면 5비트로는 59까지 표현할 수 없기 때문이다.


그다음에 TIME1은

A3 는 10진수로하면 163이다 /100하면1.63이 된다. 

앞에 몫이 1이면 +1 0이면 냅둔다


이게 무슨말이냐면 방금 초를 구하기위해 정해진 5비트를 사용하여 억지로 표현했다.

5비트로는 59까지 표현이 되지 않아서 X2를 하는데 여기서 발생하는 문제는 모든수에 X2를 하면 

홀수를 구할 수 없다. 그런 문제로인해 TIME1을 두어서 앞으 몫이 있다면 +1초를 하고 아니면 그대로 두는 방식을

사용하는 것이다.


따라서 이 파일은 2018년 4월 19일 14시 40분 23초에 생성이 되었다!






그다음 표시한 2바이트는 액세스한 날짜






표시한 4바이트는 수정된 날짜이다. TIME1이 없기 때문에 수정된 날짜에는 홀수가 나올수가 없다!.

만약 수정된 날짜에 홀수가 있다면 이상한 것이다.





표시된 2바이트 2바이트는 스타팅 클러스터 하이/ 스타팅 클러스터 로우이다.

하이+로우를 하여 합치면

00 00 00 03이다. 이것은 3번 클러스터로가면 해당 파일에 내용이 있다는 것이다.

아까 처음에 정보에서 한 클러스터는 08이라는 값으로 8개의 섹터가 있다고 구했다.

그렇다면 저 파일의 내용을 보기 위해서는 클러스터 3개를 건너 뛰어야한다.

지금 섹터는 클러스터 2의 섹터이다. 왜? 아까 데이터영역이 2번클러스터였으니까.







표시된 4바이트는 00 00 00 0E로 14인데 이것은 파일의 크기를 나타낸다.





아까 2번클러스터의 섹터가 8271이다.

파일의 내용이 3번 클러스터에 있다고 하였다.

클러스터 하나는 8개의 섹터로 이루어 졌다고 하였다.

그러므로 8271+8 섹터로 가면 방금 만든 파일에 내용을 볼 수 있다.!


파일안에는 Hello Forensic이라고 적혀 있다.





하드디스크에 파티션을 만들었다. 

3개의 파티션 1개의 확장파티션 안에 2개의 논리드라이브로 구성되어 있다.




HxD프로그램으로 하드 내용을 봐보자


아래 드래그한 곳이 파티션테이블이다.





첫번째 바이트는 부팅파티션인지 아닌지를 판별한다

01이면 부팅파티션이다.





그다음 5번째 바이트는 파일시스템을 나타낸다.

OB=FAT32

07=NTFS

0F=는 확장파티션을 나타낸다




그 다음 색칠된 부분이 파티션의 시작 섹터를 알려준다. 

cpu방식으로 읽혀진것이라 거꾸로 읽어줘야한다 

00 00 00 3F

00 3F FA C5

00 7F F5 8A

00 BF F0 4F

가 각 파티션 시작주소이다.




그다음 색칠된 곳은 섹터의 갯수이다.

섹터 하나는 512바이트이므로 계산을 할 수 있다.

첫번째 86 FA 3F 00 은 00 3F FA 86이므로 계산을 해보면

4192902이다. 섹터의 갯수는 4192902이고 이것을 기가로 나타내면

4192902*512/1024/1024를 하면 약 2047M 정도 나온다.

2G라는걸 알 수 있다.




두번째 파티션을 봐보면 07이니 NTFS인걸 알 수 있고

시작 섹터는 00 3F FA C5인걸 알 수있다. 






00 3F FA C5는 10진수 4192965로 계산되었다.


이런식으로 3번째 파티션도 0B 이므로 FAT32인걸 알 수 있고

00 7F F5 8A로 계산을하면 8385930이 나온다. 

직접 저 섹터로 한번 이동해본다.




직접 섹터에 있는곳으로 가보면 

MSDOS5.0 이라는 버전과 FAT32

부팅할때 필요한 NTLDR도 보인다.







다시 처음 MBR로 돌아가서 마지막 파티션을 알아보자

0F인것을 보아 파일시스템이 NTFS와 FAT32는 아니라는 것을 알 수 있다.

파티션의 시작주소가 00 BF F0 4F이므로 12578895이다.

직접 가본다.







그럼 00 00 00 3F가 나오는데 이것은 63으로 처음 MBR에서도 똑같은 주소가 있었다.

왜냐하면

확장 파티션은 그 확장파티션에 있는 정보로부터 논리 드라이브가 시작되기 때문이다.






지금 섹터로부터 63번째 뒤 섹터로 가보자.





그러면 FAT32가 보인다.

다시 -63을 하여 돌아가자.


두번째 파티션을 보면 파일확장자가 05이다.


일단 시작위치 00 3F FA C5로 가보자.

10진수로 4192965이므로 더해준다.





그러면 07이 보인다. 이것은 NTFS라는 의미이고 시작위치가 또 3F이다.


두번째 파티션테이블에 있는 시작주소로 이동하면 2번째 논리드라이브가 나올줄 알았지만 PBR이 다시 나온다. 

2번째 PBR에서 다시 63번째섹터로 이동해야 논리드라이브가 나온다

만약 논리드라이브가 하나 더있다면 파티션테이블에 있는 정보는 PBR의 주소이지 3번째 논리드라이브에 주소가 아니다

3번째 논리드라이브로 가려면 PBR에서 다시 이동해야 한다.

정리하면 확장파티션을 할 때 정보를 기록하는 방법은 PBR로 이동을 한 후에 논리드라이브로 이동을 하는

방식이라는 것을 알 수 있다.

만약 3번째 논리드라이브로 가려면

MBR의 확장파티션테이블-PBR-1번 논리드라이브(안에있는 PBR)-2번 논리드라이브(안에있는 PBR)-3번째 논리드라이브

식으로 이동해야 한다.





FAT12 FAT16 UFAT FAT32 exFAT의 특징


FAT12

1980년 ,16MB ,플로피디스크,계층적인 구조X

리눅스처럼 root /bin 이런게 없고 바로 밑에 폴더들이 나열,용량이 적고 이름수에 제한(8글자)


FAT16

1980년 후반

2GB HDD

이름수제한,확장자 제한


NTFS(93년도)


UFAT

94년도

2GB HDD,계층적인구조,이름수제한,확장자제한 없음 (255글자)


FAT32

95년도

32GB 

USB,SD카드에 쓰려고 만듬

이 이후로엔 FAT가 없다고 했지만 exFAT가나옴 윈도우 XP, 비스타,2000


exFAT

06년에 나옴

플래시 메모리로 쓰려고 나옴

FAT를 개선해서 32GB이상일때 사용

USB샀을때 32기가 위는 exFAT고 아래는 FAT일 것이다 최고가 아마 2ZB라고함

권고하는 용량은 5TB이다.


XP를 탑재한 VM과 HxD 프로그램을 준비하자.



폴더옵션에 '보호한 운영 체제 파일 숨기기'를 해제한다.





그럼 부팅과 관련된 파일들이 나온다. 여기서 ntldr 파일을 삭제하면 부팅이 되지 않는다.





Vmware 메뉴에서

Player-Manage-Virtual Machine Settings -ADD

하드디스크를 선택한다.

NEXT-NEXT- 10G -Store virtual disk as a single file -finish

VMware에서 가지고 놀 하드디스크를 하나 추가한다.






10기가짜리 하드디스크를 하나 추가하고






윈도우키+R을 눌러 

diskmgmt.msc 를 입력하면 위와같은 화면이 뜬다. 아직 파티션을 할당하지 않은 상태로 HxD로 열어본다.







아무 내용이 없다.






디스크를 초기화하고 HxD에서 F5를 눌러보자.






무언가 적힌것을 볼 수 있다.

MBR이 적힌것인데 MBR에 구조는 총 3개가 있고. 512바이트로 구성되어 있다.


Boot Strap Cord(446바이트)

-부팅할때 부팅파티션이 어디있는지 구동하는 기계어


Signatuer(2바이트)


Patition table entry(64바이트)

-파티션 구조 정보





파란부분이 BootStap Code이다.

Invalid partition table.Error loading operating system.Missing operating system ->오류코드 메시지 데이터도 같이 들어있음





노란색 부분이 파티션테이블이다. 16바이트로 구성되어 있고

64바이트 이므로 4개의 파티션테이블을 만들 수 있다.

파티션 테이블은

주파티션

논리드라이브를 만들기위한 틀인 확장 파티션

4개의 파티션테이블이 부족하면 사용하는 논리드라이브가 있다.

디스크관리자에 가서 파티션을 만들어보자.





여기를 보면 논리드라이브는 체크를 못하는데 아직 주파티션이 하나도 없기 때문이다.






2G만 주고 파티션을 생성한다.




여기서 '비어 있는 NTFS 폴더의 탑재' 라는 것이 있는데

이론상 리눅스에서 폴더에 마운팅 하듯이 폴더에 마운팅하면 무한대로 가능하다.



FAT32가 포렌식하는 것에 기초이므로 FAT32로 포맷하자.

FAT32 할당 단위 크기의 기본값은 4K이다.





이제다시 HxD로 들어간다.






아까 노란색으로 치던곳에 숫자가 들어간 것을 확인 할 수 있다.

맨 처음 00은 파티션의 종류를 나타낸다


지금은 00이니 일반 파티션이고

80이면 부팅 파티션을 나타낸다.

이 하드에는 우리가 윈도우를 깔고 부팅할 것을 깐게 아니므로 00으로 표시된 것이다.


그리고 5번째 (2번째줄 3번째)를 보면

0B 라고 나타나있는데 이 파티션이 현재 쓰고있는 파일 시스템을 보여준다.

FAT32는 0B로 표시한다.


그 바로다음에 있는 FE 7F 04 는 끝의 주소를 나타낸다


그다음이 중요한데

3F 00 00 00 은 ->LBA(Logical Block Address)의 시작 주소이다.


CPU는 주소를 거꾸로 읽어주어야 하기 때문에 3F 00 00 00

00 00 00 3F가 된다. 따라서 3F가 시작주소이므로 63이 시작주소라는 뜻이다.




위에 섹터에 63을 입력하여 가보자.






오른쪽에 보면 FAT32와 NTLDR이 보인다. 이곳이 LBA가 저장된 곳이다.




다시 돌아오면 그다음 마지막 86 FA 3F 00은 총 섹터의 갯수를 의미한다

즉 거꾸로 읽어서 00 3F FA 86인데 이것은 10진수로 4192902이다.


섹터하나에 크기는 512바이트 이다. 계산을 한번 해보자.





4192902 x 512 / 1024 /1024/1024 =1.99xx

약 2에 가까운 수이다. 아까 파티션을 지정할때 2G로 해줬기 때문이다.

이 처럼 디스크의 저장되어있는 MBR로 디스크에 정보를 얻을 수 있었다.


'디지털 포렌식' 카테고리의 다른 글

[Forensic]FAT의 구조  (0) 2018.04.20
[Forensic]논리디스크와 PBR  (0) 2018.04.19
[Forensic]포렌식개념  (0) 2018.04.18

Digital Forensic->사건 현장에서 수집한 증거를 추출/수집/이송/분석/문서화하여 법정에서 제출가능한, 증명력있는 증거자료의 수집과정,기법,기술

아날로그포렌식->DNA,족적 등

FAT32로 진행 EXT는 어렵

CERT에서 포렌식 사용


Digital Information

디지털정보의 특징

-대규모성 

-복사가쉬움

-위,변조 쉬움

-초국경성 (경계가없음)

-비가시성 (육안으로 식별 어려움)


Forensic

국가적측면->범죄수사->사이버수사대,국과수,검찰,기무대(군대) =긴시간~달

기업적측면->침해대응 =실시간 ~일


Forensic 종류

-Network포렌식

-Disk ->파일시스템 ->FAT32(USB,XP),EXT(리눅스),NTFS(윈도우)

-Mobile

-System


Anti-Forensic

-포렌식 못하게 복원을 막는것

-해킹을 막는다

-스테가노그래피 (데이터은닉)



+ Recent posts