NTFS(New Technology File System) 4일차 NTFS Attribute Header
$STANDARD_INFORMATION 속성은 NTFS의 모든 파일에 기본적으로 존재하는 속성이다. 속성 타입 번호는 16번으로 속성들 중에서 타입번호가 가장 낮기 때문에 MFT 엔트리 내의 속성들 중 가장 처음에 위치한다.
공통된 헤더(16 byte)
범위(10 진수) | 범위(16 진수) | 설명 |
0 - 3 | 0x00 -0x03 | 속성 타입 식별자 |
4 - 7 | 0x04 - 0x07 | 속성 길이 |
8 - 8 | 0x08 - 0x08 | Non-resident 플래그 |
9 - 9 | 0x09 - 0x09 | 속성 이름 길이(N) |
10 - 11 | 0x0A - 0x0B | 속성 이름 시작 위치 |
12 - 13 | 0x0C - 0x0D | 상태 플래그 |
14 - 15 | 0x0E - 0x0F | 속성 식별자 |
Resident Attr Header
범위(10 진수) | 범위(16 진수) | 설명 |
0 - 15 | 0x00 - 0x0F | 공통된 헤더 |
16 - 19 | 0x10 - 0x13 | 속성 내용 크기 |
20 - 21 | 0x14 - 0x15 | 속성 내용 시작 위치 |
22 -22 | 0x16 - 0x16 | Indexed 플래그 |
23 - 23 | 0x17 - 0x17 | 사용되지 않음 |
24 - 24+2N | 0x18 - 0x18+2N | 속성이름(유니코드), 단 이름이 존재할 경우만 사용 |
24+2N+1 - | 0x18+2N+1 - | 속성 내용 |
속성 내용 크기 : 헤더 뒤에 오는 속성 내용의 크기
속성 내용 시작 위치 : 속성 내용이 시작하는 시작 위치
Indexed 플래그 : "1"값을 가지면 Index 정보로 사용한다. (보통 $FILE_NAME은 "1" 속성을 갖는다.)
속성 이름 : 속성 이름이 있을 경우(속성 타입에 따라 이름이 없는 경우도 존재)에만 존재
공통된 헤더
속송 타입 식별자 : 0x00000030 (48) : $FILE_NAME
속성 길이 : 0x00000068 (104) : 현재 속성의 크기
Non-resident 플래그 : 0x00
속성 이름 길이 : 0x00
속성 이름 시작위치 : 0x0018(속성 이름 길이가 0이므로 속성 이름은 존재하지 않는다)
상태 플래그 : 0x0000
속성 식별자 : 0x0003
Resident 헤더
속성 내용 크기 : 0x0000004A
속성 내용 시작위치 : 0x0018
Indexed 플래그 : 0x01
속성이름 : 존재하지 않는다.
Non - Resident Attr Header
범위(10진수) | 범위(16진수) | 설명 |
0 – 15 | 0x00 – 0x0F | 공통된 헤더 |
16 – 23 | 0x10 – 0x17 | 런리스트 시작 VCN(Virtual Cluster Number) |
24 – 31 | 0x18 – 0x1F | 런리스트 끝 VCN |
32 – 33 | 0x20 – 0x21 | 런리스트 시작 위치 |
34 – 35 | 0x22 – 0x23 | 압축 단위 크기 |
36 – 39 | 0x24 – 0x27 | 사용되지 않음 |
40 – 47 | 0x28 – 0x2F | 속성 내용 할당 크기(클러스터 크기) |
48 – 55 | 0x30 – 0x37 | 속성 내용 실제 크기 |
56 – 63 | 0x38 – 0x3F | 속성 내용 초기화된 크기 |
64 – 64+2N | 0x40 – 0x40+2N | 속성 이름(유니코드) 단, 이름이 존재할 경우만 사용 |
64+2N+1 – | 0x40+2N+1 – | 속성 내용 |
Non-resident는 속성 내용이 외부 클러스터에 저장되어 있으므로 해당 클러스터 정보를 담고 있는 런리스트 정보가 필요하다.
런리스트 시작 VCN , 런리스트의 끝 VCN
VCN은 특정 파일의 첫 번째 클러스트부터 순차적으로 부여한 번호이다.
$DATA 속성의 경우, 데이터가 매우 많이 조각이 난 경우 클러스터 런의 정보를 저장하기 위해 하나 이상의 MFT 엔트리를 사용하게 된다. 이때 런리스트의 시작과 끝을 표현하기 위한 정보이다.
런리스트 시작 위치 : 런리스트의 시작 위치
압축 단위 크기 : 압축 속성일 경우 압축 단위 크기
속성 내용 할당 크기 : 속성 내용이 할당된 클러스터 크기(클러스터의 배수)
속성 내용 실제 크기 : 순수한 속성 내용만의 크기
속성 내용 초기화된(initialized)크기 : 일반적으로 NTFS에 존재하는 초기화된 크기의 의미는 파일이 할당될 때 파일이 더 커질 것을 예상하고 추가 적인 공간을 할당한 경우가 있을 수 있다. 순수한 파일 데 이터의 크기는 초기화된 크기이고, 추가적인 공간까지 포함한 크기가 논리적 (Logical)크기이다. 대부분은 초기화된 크기와 논리적 크기는 동일하다.
$MFT 파일의 MFT 엔트리 속성 중 Non-resident인 $BITMAP이다.
공통된 헤더
속성 타입 식별자 : 0x000000B0 -> $BITMAP
속성 길이 : 0x00000050 -> 위 사진의 크기
Non-resident 플래그 : 0x01
속성 이름 길이 : 0x00
속성 이름 시작 위치 : 0x04
상태 플래그 : 0x0000
속성 식별자 : 0x0005
Non-resident 헤더
런리스트 시작 VCN : 0x00000000 00000000
런리스트 끝 VCN : 0x00000000 00000001
런리스트 시작 위치 : 0x0040
압축 단위 크기 : 0x0000
속성 내용 할당 크기 : 0x00000000 00002000
속성 내용 실제 크기 : 0x00000000 00001008
속성 내용 초기화된 크기 : 0x00000000 00001008
속성 이름 : 존재하지 않음
$MFT의 $BITMAP은 $MFT 파일에 연속되어 있는 1,024 바이트의 MFT 엔트리 중 현재 사용 중인 엔트리(“1”)와 사용하지 않는 엔트리(“0”)를 비트맵으로 표현한 것이다. $MFT 의 전체 MFT 엔트리를 비트맵으로 표현하기 위해 45,064 바이트를 사용한 것이다. 0으로 표기된 MFT 엔트리를 모으면 모두 현재 사용되지 않는 삭제된 MFT 엔트리거나 아직 할당 대기 중인 엔트리이다.