|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1923 [복사]
옛날에 동영상 보면서 정리해둔건데
도움되시라고 올려봅니다.
## MFT(Master File Table)
# MFT란
- MFT Entry들의 모음
- MFT의 시작위치는 BR에서 확인한다.
- MFT의 크기는 볼륨에 있는 파일과 디렉토리의 개수에 비례한다.
예)볼륨에 파일과 디렉토리의 개수가 60000개일 때 MFT Entry개수는 대략 60000개 이상 차지한다.
60000 * 1KB = 60000 KB = 약 60 MB
# MFT Entry
- 파일 또는 디렉토리에 대한 정보를 담고 있다.파일명,크기,시간,파일내용,위치,권한,할당량 ...
- 기본적으로 파일이나 디렉토리는 하나의 Entry를 사용하며 기록할 내용이 많은 경우 Entry를
여러 개 사용할 수도 있다.
- 기본 크기는 1KB이다.(BR 또는 MFT Entry Header에서 확인가능)
- MFT Entry는 섹터 2개를 차지한다.
- MFT Entry Header와 여러 개의 속성들(Attributes)로 구성된다.
- MFT Entry 마지막 속성의 뒷부분에 End Marker(0xFFFFFFFF)로 끝난다.
## MFT Entry Header
- 크기가 42 bytes
# Signature
- MFT Entry임을 나타내는 표시이다.
- 위치: 0~3번 바이트
- 크기: 4 Bytes
- 정상 Entry에는 FILE 이라는 문자열이 적혀있다.
- 문제가 발견된 Entry에는 BAAD라고 적혀있다.
# Offset of Fixup Array
- MFT Entry 시작 위치로부터 Fixup 배열까지의 거리
- 위치: 4~5번 바이트
- 크기: 2 Bytes
- 보통 0x48이라고 적혀있다.
(참고) Fixup Array
- 데이터가 저장된 섹터의 내용의 손상여부를 확인하기 위한 기법
- 섹터의 마지막 2바이트를 특정 Signature로 바꿔놓고 원래의 2바이트 값은 Fixup배열에
기록해 둔다.
- Signature값은 Fixup 배열의 맨앞에 기록한다.
- 섹터를 읽을 때 Signature값이 틀리면 손상된 섹터로 간주한다.
- 위치: 보통 MFT Entry Header가 끝나고 바로 이어진다. Offset to Fixup Array항목에서 확인
- 크기: Count of Fixup Values 항목에서 확인
- 이 기법이 사용되는 항목은 MFT Entry,Index Record, RCRD Record, RSTR Record 등이다.
- 파일 내용이 들어가는 클러스터의 섹터에는 적용하지 않는다.
# Count of Fixup Values
- Fixup 배열(Array)의 크기(항목의 개수)
- MFT Entry는 기본적으로 3이다.
(MFT Entry가 1KB이므로 섹터 2개를 사용 + Signature가 1개 항목 사용)
- 위치: 6~7번 바이트
- 크기: 2 바이트
# $LogFile Sequence Number(LSN)
- 설명은 뒤에서 다시 다룬다.
- 내용은 다양한 값을 가질 수 있다.
- 위치: 8~15번 바이트
- 크기: 8 바이트
# Sequence Value
- MFT Entry가 할당 또는 해제될 때 값이 증가한다.
- MFT Entry를 재할당하면 이값이 바뀌므로 내용이 바뀌었다는 것을 추측할 수 있다.
- 위치: 16~17번 바이트
- 크기: 2 바이트(16 bit)
(참고) File Reference Address (64 bit)
Seqence Value(16 bit) + MFT Entry Address(48 bit)
# Hard Link Count
- 하드 링크의 개수
- 보통 1 이다. Base MFT Entry에서만 사용된다.
- Hard Link 개념을 윈도우에서도 사용할 수 있다. 하지만 실제 도구가 없어서 사용할
수 없다. 그러나 MS에서 제공되는 도구가 있다.
- 위치: 18~19
- 크기: 2 Bytes
# Offset to First Attribute
- MFT Entry의 첫 번째 속성(Attribute)의 위치(Offset)
- 보통 56(D)=0x38 이지만 얼마든지 다른 값이 올 수 있다. 확인 필수
- 위치: 20~21
- 크기: 2 Bytes
# Flags
- MFT Entry의 상태정보
- 내용이 0x1 이면 MFT Entry가 사용 중임을 나타낸다.
- 내용이 0x2 이면 MFT Entry가 디렉토리에 사용되고 있음을 나타낸다.
- 위치: 22~23번 바이트
- 크기: 2 바이트
# Used Size of MFT Entry
- MFT Entry 전체크기(보통 1KB)중에서 사용중인 공간의 크기를 나타낸다. 정확하지는
않고 8의 배수로 기록된다.
- 내용: 다양한 값을 가질 수 있음.
- 위치: 24~27번 바이트
- 크기: 4 바이트
# Allocated Size of MFT Entry
- MFT Entry 전체크기를 나타낸다.
- 보통 1024 가 적혀있다. (MFT Entry는 1KB로 고정되어 있음)
- 위치: 28~31번 바이트
- 크기: 4 바이트
# File Reference to Base MFT Entry
- Non-Base MFT Entry의 Base MFT Entry의 위치를 나타낸다.
- File Reference Address로 기록되어 있다.
- Non-Base MFT Entry 에서만 기록된다.
- Base MFT Entry에서는 언제나 0 이다.
- 위치: 32~39번 바이트
- 크기: 8 바이트
(참고) Base MFT Entry & Non base MFT Entry
# Next Attribute ID
- 현재 MFT Entry에 새로운 속성이 기록될 때 사용할 속성ID(고유한 값, 속성 TYPE ID와 다름)
- 위치: 40~41번 바이트
- 크기: 2 바이트
## Attribute(속성)
# 구성
- 속성 헤더(Header) + 속성 내용(Content)
# 속성 헤더 구조 (Resident)
- Resident 형태의 속성은 내용이 MFT Entry내에 있다
- $FILE_NAME (파일 이름 속성)
# 속성 헤더 구조 (Non-Resident)
- Non-resident 형태의 속성은 내용이 다른 클러스터에 들어있고 속성에는 위치만 기록됨.
# 속성 종류(Attribure Type)
$STANDARD_INFORMATION
$ATTRIBUTE_LIST
$FILE_NAME
$VOLUME_VERSION
$OBJECT_ID
$SECURITY_DESCRIPTOR
$VOLUME_NAME
$VOLUME_INFORMATION
$DATA
$INDEX_ROOT
$INDEX_ALLOCATION
$BITMAP
$SYMBOLIC_LINK
$REPARSE_POINT
$EA_INFORMATION
$EA
$LOGGED_UTILITY_STREAM
# $STANDARD_INFORMATION
- 파일과 디렉토리에 대한 시간정보/소유자/보안설정/파일종류/할당량 등의 정보를 담는다.
- 모든 파일과 디렉토리에 대한 Base MFT Entry에는 반드시 존재하는 속성
- 속성 타입 번호 : 0x16
- 저장 형태: 반드시 Resident 형태만 가능함
- 크기: 보통 72(Byte), 다를 수 있음, 확인 필요
- 속성 구조 요약
항목 이름 설명 위치 크기
Created Time 처음으로 파일이 생성된 시간 정보 0~7 8
Modified Time 마지막으로 파일 내용이 수정된 시간 8~15 8
MFT Modified Time MFT Entry 내용이 마지막으로 수정된 시간 16~23 8
Accessed Time 마지막으로 파일 내용을 접근한 시간 24~31 8
Flags 파일의 특성 32~35 4
Maximum number of version 36~39 4
Version Number 40~43 4
Class ID 44~47 4
Owner ID 파일의 소유자의 ID 48~51 4
Security ID 52~55 4
Quota Charged 56~63 8
Update Sequence Number 64~71 8
# $FILE_NAME
- 파일이나 디렉토리의 이름과 이름에 관련된 추가 정보가 저장되는 속성이다.
- 이 속성은 반드시 Base MFT Entry에 있어야 읽을 수 있다.
- 속성 타입 번호 : 0x48
- 저장 형태: 반드시 Resident 형태만 가능함
- $FILE_NAME의 Attribute Content 구조
위치 크기 설명
0~7 8 부모 디렉토리의 File Reference Address
8~15 8 Created Time
16~23 8 Modified Time
24~31 8 MFT Modified Time
32~39 8 Accessed Time
40~47 8 파일의 할당 크기
48~55 8 파일의 실제 크기
56~59 4 Flag
60~63 4 Reparse Value
64~64 1 이름의 길이
65~65 1 이름의 형식
66~?? 동적 이름
- 이 속성은 Index Entry에도 존재하며 Index Entry에 있는 $FILE_NAME속성을 우선적으로 갱신한다.
- Flag 항목은 $STANDARD_INFORMATION 속성의 flag와 동일한 구조이다.
# $DATA
- 실제 파일이나 디렉토리의 내용이 저장되는 공간이다.
- 속성 타입 번호 : 0x128
- 저장 형태: 700 Byte를 기점으로 작으면 Resident 형태로 저장되고 크면 Non-Resident 형태로 저장된다.
# $DATA속성의 ADS 항목
- Alternate Data Stream
- 파일이나 디렉토리에 추가되는 $DATA 속성
|
Hit : 14657 Date : 2012/01/11 11:47
|