# 4-3.5) MFT Entry 찾기(인덱스2, $ATTRIBUTE\_LIST)

**아래 실습은 NTFS 가상디스크를 만들어서 분석하였습니다.**

> 실습을 직접 따라 해보고 싶으신 경우 NTFS 분석 처음부터 따라오시는 것을 추천 드립니다.\
> \> [](https://bitnang.gitbook.io/bit_forensic/undefined/1.-bit/4/4-3-ntfs "mention")

## 2-10) 폴더에서 MFT Entry Number를 찾아보자.

1. 우선은 루트 디렉토리에서만 접근하는 것을 확인하였습니다.\
   이제 하위 디렉토리의 접근도 살펴봅시다.\
   \
   Directory 를 만들고 해당 디렉토리에 파일도 소수로 만들어 봅시다.\
   위에 공부한 대로라면 파일 개수가 몇 개 안되서 **Directory 1**의 MFT Entry 에 Index node를 가리키는게 resident로 있을 수 있을거 같은데 맞을지 살펴보도록 합시다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FFeBSCbb3iiIA1tKc3Bxi%2Fimage.png?alt=media&#x26;token=0ae456eb-ec56-49d8-ad42-757dee03f4a0" alt="" width="563"><figcaption></figcaption></figure>

   \\

2. 분석용 프로그램을 새로 재기동 한 뒤\
   루트디렉토리의 $INDEX\_ALLOCATION의 DATA runlist인 36번 클러스터로 가봅시다.\
   128 + 36 X 8 = 416  /  416 섹터로 가봅시다.\
   \
   INDEX\_ALLOCATION을 살펴보다보면 우리가 폴더명으로 했던 Directory 1을 볼 수 있습니다.\
   \
   Directory 1의 Index Node Header를 보면 해당 파일의MFT Entry number을 확인할 수 있습니다. \
   \
   참고로 $FILE\_NAME 속성을 보면 부모 디렉토리 MFT Entry Number를 확인 할 수 있는데 루트디렉토리인 5번 MFT Entry Number를 저장하고 있는것을 확인할 수 있습니다.\\

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2F6gF58eKdDapGTgQf8ew4%2Fimage.png?alt=media&#x26;token=b883bf1f-c288-4c4b-9c26-5959ec7cc850" alt=""><figcaption></figcaption></figure>

   다시 Index Node Header 구조를 되새겨봅시다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fd3pi4qo5zxWaaMdkogvp%2Fimage.png?alt=media&#x26;token=427c2040-def5-489d-a298-9f0bffb109b0" alt=""><figcaption></figcaption></figure>

   \- MFT Entry Number (=File Reference Address for File name) \
   &#x20; \> 38 00 00 00 00 00 (MFT Entry 넘버) /  01 00 (시퀀스 넘버) -> 38 (16진수) => 56\
   &#x20; **56번 MFT Entry 가 Directory 1의 MFT Entry Number입니다.**

3. $MFT 에서 56번 엔트리로 가봅시다. 이번엔 섹터로 이동해봅시다.\
   $MFT 파일 시작 섹터 + MFT Entry Number X 2 (MFT Entry 크기 1,024 = 2섹터)\
   \> 128 + 68,264 + (56 X 2) = 68,504 섹터\
   \
   Active Disk Editor에는 NTFS MFT Entry를 보기 쉽게 NTFS MFT File Record 템플릿으로 설정해서 해당 내용을 분석해볼 수 있습니다.\
   \
   그런데 여기 MFT Entry를 살펴보면 $INDEX\_ALLOCATION이 없고 $INDEX\_ROOT 속성만 있고, 우리가 폴더내 저장한 파일들의 Index node Entry를 바로 확인할 수 있습니다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2F22vOUJ5dMxhnCmP3pwqj%2Fimage.png?alt=media&#x26;token=6ca64529-f6fa-43cd-902f-8d131b3e11e6" alt=""><figcaption></figcaption></figure>

4. 속성을 다시 살펴보도록 합시다. 다 잊어버렸을 수 있으니 중요한것만 다시 살펴봅시다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2F6MrsFLj5t4YPHSlZwQNP%2Fimage.png?alt=media&#x26;token=2fa6f519-692c-4457-8ac6-3fa2f0342bd7" alt=""><figcaption><p>속성 구조 Hedaer</p></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FHzq61JFjz0t1ZeY3KipH%2Fimage.png?alt=media&#x26;token=03e6eadd-a7d1-42db-b499-469873f00d25" alt=""><figcaption><p>Index Header</p></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FtMYzOLBX8PRqvDo2a5zw%2Fimage.png?alt=media&#x26;token=a966817c-b6be-48f4-9c6e-adb557a9ebec" alt=""><figcaption><p>Index Node Header</p></figcaption></figure>

   \
   위 헤더+ Index Node Entries가 모두 연결되어 있는 상태입니다.\
   우선 이 속성은 Resident 속성인 것을 알 수 있습니다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FKZu9svFMFWMRmsj0wALT%2Fimage.png?alt=media&#x26;token=39e0c64d-219f-4bd2-8458-24262640afa4" alt=""><figcaption></figcaption></figure>

5. Index Node Entry를 살펴봅시다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FWaAy2w31wmyHV1T1pDRL%2Fimage.png?alt=media&#x26;token=cc560c4c-7dda-46ae-8f74-20dbf3cf46e7" alt=""><figcaption><p>Index Node Entry</p></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fu3Pn4Bh25SdocC54PzHi%2Fimage.png?alt=media&#x26;token=fc512152-3bb8-4baa-99b9-7352e0d60557" alt=""><figcaption></figcaption></figure>

   \[abcdefghijklmnopqrstuvxyz.txt]\
   \- MFT Entry Number (File Reference Address) : <mark style="color:red;">**3B 00 00 00 00 00**</mark> <mark style="color:red;"></mark> (59) -> 59번\
   \- $NAME  속성의 부모 디렉토리 MFT Entry Number : <mark style="color:blue;">**38 00 00 00 00 00**</mark> (56) -> 56번\
   \
   \[test.txt]\
   \- MFT Entry Number (File Reference Address) : <mark style="color:red;">**3A 00 00 00 00 00**</mark> <mark style="color:red;"></mark> (58) -> 58번\
   \- $NAME  속성의 부모 디렉토리 MFT Entry Number : <mark style="color:blue;">**38 00 00 00 00 00**</mark> (56) -> 56번\
   \
   \*Directory 1의 MFT Entry 가 56번 입니다.

6. 음 그렇다면 파일이 많아지면 56 MFT Entry가 가득 차겠죠? \
   파일명이 늘어나고, 파일명이 길어져 MFT Entry의 $INDEX\_ROOT의 용량이 모자르게 된다면 \
   이미 보았던 $INDEX\_ALLOCATION 이 생기게 될 것입니다. 한번 살펴볼까요?\
   \> e:     (NTFS 가상 디스크가 논리드라이브 명)\
   \> cd "Directory 1" \
   \> for /l %i in (1,1,50) do echo This is file %i > file%i.txt                 \
   &#x20;  \*file1.txt \~ file50.txt 만들기

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FViDyx9kba1IaOXHaEYYF%2Fimage.png?alt=media&#x26;token=83c96eec-fa39-4462-8e19-34d3a9d84b80" alt="" width="563"><figcaption></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2F2f2RpaNbDAdjjitM58te%2Fimage.png?alt=media&#x26;token=3a35316e-6135-490c-89bd-558d7e4b5ac2" alt="" width="560"><figcaption></figcaption></figure>

7. 분석 도구를 재시작 한 뒤 Directory 1의 MFT Entry(56번)를 다시 살펴 봅시다.\
   \> 128 + 68,264 + (56 X 2) = 68,504 섹터\
   \
   전반적으로 살펴보면 여러가지 흔적들을 발견할 수 있습니다. \
   파일이 생성되는 과정에 해당 MFT Entry가 쓰였던 것을 발견할 수는 있으나 일단 우리는 저장된 INDEX\_ROOT 부분을 다시 살펴봅시다.\
   \
   실제 $INDEX\_ROOT의 마지막 범위를 정확히 파악해봅시다.\
   그 뒤에는 새로 생긴 $INDEX\_ALLOCATION 속성이 시작 됩니다.&#x20;

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FegR9yv1ByGlEQVOoq9jD%2Fimage.png?alt=media&#x26;token=58a3ebfc-0db3-4c58-9498-1b40cf0f13f3" alt=""><figcaption></figcaption></figure>

8. Attirbute A0 ($INDEX\_ALLOCATION)속성을 살펴봅시다. 중요한 것만 빠르게 체크해봅시다.\\

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fe4FomaXeEG9jSpUkJgwc%2Fimage.png?alt=media&#x26;token=c40c0fca-63de-4a7f-8572-714739d420d3" alt=""><figcaption><p>Non-Residetn Attribtue Header</p></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FH6D9FTnoDIYUWxf87p7c%2Fimage.png?alt=media&#x26;token=5bf9598c-360e-4982-a02d-340b468ff6d0" alt=""><figcaption></figcaption></figure>

   \
   \- Non-Resident : 01   -> Non-Resident 속성\
   \- Data Run Offset : 48 -> 72   / Attribute Header에서 72 byte 뒤에 Data Runlist 위치\
   \- Run list : <mark style="color:blue;">**2**</mark><mark style="color:red;">**1 02**</mark> <mark style="color:blue;">**92 09**</mark> -> 클러스터 수 : 02    / 시작 클러스터 위치 : 92 09 -> 09 92 (16진수) =>2,450 \
   &#x20;\> 2,450 클러스터에 Index Allocation 위치

9. 2,450 클러스터로 가봅시다.\
   시작 파티션 + 클러스터 번호 X 클러스터 당 섹터 수 = 클러스터 위치\
   128 + 2,450 X 8 = 19,728 섹터\
   \
   루트 디렉토리의 $INDEX\_ALLOCATOIN($I30)과 동일한 구조로 \
   Index Record Header + Index Node Header + Index Entry + Index Entry ...\
   구조가 이어지고 있습니다.&#x20;

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FgCNi3v2wTAv7dA36HW62%2Fimage.png?alt=media&#x26;token=5c587797-f3a9-49db-afe5-b0c6c2d20b5b" alt=""><figcaption></figcaption></figure>

   FTK Imager에서도I30이 생겼네요!

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FeukZ1UbaLPaDByPnQV6l%2Fimage.png?alt=media&#x26;token=71607b9b-3679-4290-97ad-8df69f0a650f" alt=""><figcaption></figcaption></figure>

<details>

<summary>$INDEX_ROOT와 $INDEX_ALLOCATION을 통한 검색 관련, 대량 파일 생성[참고]</summary>

* **이건 친해지기 시리즈에서는 참고로만 알아두도록 합시다!** \\

  Directory 1의 MFT Entry (56번) 속성 중  INDEX\_ROOT를 다시 살펴 봅시다.\
  \> 128 + 68,264 + (56 X 2) = 68,504 섹터

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FV0Vsgh2jfikybcxmcSKY%2Fimage.png?alt=media&#x26;token=a9745951-ed07-4188-bbac-28cd10182319" alt=""><figcaption></figcaption></figure>

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FBLUq7CgSSaeo3h62HMol%2Fimage.png?alt=media&#x26;token=e29070c2-030f-4a0c-aca7-f685568e5471" alt=""><figcaption></figcaption></figure>

  \- 인덱스 속성 타입 :  30 ($FILE\_NAME)\
  \- Collation rule : 01   /  01 => 파일이름 대소문자 구분없이로 정렬    \
  \- 인덱스 할당 크기 : 00 10 00 00 -> 00 00 10 00 (16진수) => 4,096 (10진수)\
  \
  이어서 Index Node Header 가 이어집니다.

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2F4OXu30Z3U0tV8xZX7n2r%2Fimage.png?alt=media&#x26;token=91022207-7305-40a2-a0bd-ecb51d9ffc7f" alt=""><figcaption></figcaption></figure>

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FwX39aHYZEarSSKiEqwD5%2Fimage.png?alt=media&#x26;token=afc6b1b6-565d-4346-9edd-cef6f6207216" alt=""><figcaption></figcaption></figure>

  \-  Off set to First Index Entry : 10 00 00 00 -> 00 00 00 00 10 (16진수) => 16 (10진수)\
  &#x20;   \> Index node 기준 16 bytes 뒤에 Index Entry 시작\
  \- Total Size of The Index Entries : 98 00 00 00 -> 00 00 00 98 (16진수) => 152 (10진수)\
  &#x20;  \> Index Node Header 부터 152 bytes까지 Index Node 크기\
  \
  이어서 Index Node Entry 입니다.

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FNd0C3oF27fCvaDyEZI8k%2Fimage.png?alt=media&#x26;token=5de19e05-af89-4cbc-b641-a04d6923c4ec" alt=""><figcaption></figcaption></figure>

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2F7AxocAdWmyBTyvspLUUQ%2Fimage.png?alt=media&#x26;token=a0d0c80c-583d-4086-b4e3-db5289565780" alt=""><figcaption></figcaption></figure>

  \- File Reference Address for File name : 5E 00 00 00 00 00 02 00 \
  &#x20;      \> MFT Number :  5E 00 00 00 00 00 00 ->00 \~\~ 5E  => 94 MFT Entry 넘버  \
  &#x20;      \> Sequence Number : 02 00 \
  \- Length of this Index Entry : 70 00 -> 00 70 => 112 bytes\
  \- Length of $FILE\_NAME : 56 00 -> 00 56 => 86 bytes\
  \
  $FILE\_NAME 부분은 중요한것만 바로 봅시다.\
  \- Parent Directory MFT Entry number : 38 00 00 00 00 00 -> 00 \~ 38 => 56 번 MfT Entry\
  \- FILE NAME : file25.txt  (환경마다 파일명이 다를 수 있다.)\
  \
  &#x20;$INDEX ROOT에는 file25.txt(MFT Entry 94번)를 가리키고 있습니다.\
  그렇다면, $INDEX ALLOCATION의 FILE25.TXT는 어떻게 되어 있을까?\
  $INDEX\_ALLOCATION의 데이터 Runlist에서 클러스터 번호가 2,450로 가보도록 합시다.\
  128 + 2,450 X 8 = 19,728 섹터\
  \
  해당 Index Entries 를 살펴보면서, file25.txt를 찾아봅시다.\
  그런데 이상한게 발견됩니다. file25.txt 의 MFT Entry Number를 나타내는 부분이 비어 있습니다.

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fxhron9XX7FKON2tWVU4p%2Fimage.png?alt=media&#x26;token=85672c9a-d723-4e9a-b0be-d1fe83e00a84" alt=""><figcaption></figcaption></figure>

  \
  여기서 추가로  테스트를 하나 더 해보도록 하겠습니다.\
  file51\~file80.txt를 추가로 생성 해보도록 하겠습니다.\
  \> for /l %i in (51,1,80) do echo This is file %i > file%i.txt\\

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Frh1sJqJI3itPEzHvSUZd%2Fimage.png?alt=media&#x26;token=7594e3db-eb39-45ea-9289-3a82fe3fc547" alt=""><figcaption></figcaption></figure>

  \
  Directory 1의 MFT Entry (56번) 속성 중  INDEX\_ROOT를 다시 살펴 봅시다.\
  \> 128 + 68,264 + (56 X 2) = 68,504 섹터\
  Index Node Header 를 보면 \
  \- Total Size of The Index Entries 가 152 (10진수) 에서 376으로 늘어나있고\
  Index Node Entry 가 2개 더 늘어났습니다. file43.txt, file 61.txt

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fa5eFBMVEmPEoT9k6Bpcj%2Fimage.png?alt=media&#x26;token=e0c93d50-1f66-45cc-a7b6-234b3ab05668" alt=""><figcaption></figcaption></figure>

  $INDEX\_ALLOCATION의 데이터 Runlist에서 클러스터 번호가 2,450로 가보도록 합시다.\
  128 + 2,450 X 8 = 19,728 섹터\
  여기서 file43.txt, file61.txt 도 동일한 증상을 보입니다.&#x20;

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2Fw2f8VwXo0eJSWkTVxn7c%2Fimage.png?alt=media&#x26;token=103b5436-31e2-4f33-a538-39314ee95d80" alt=""><figcaption></figcaption></figure>

  \
  왜이러는 걸까요?\
  NTFS에서는 파일검색을 빠르게 하기 위해 약간은 변형된 B(Binary)-Tree구조를 사용합니다.\
  \
  (예)간단하게 Index\_Root에 있는 파일들의 파일명으로 정렬하였을 때 \
  file25보다 작은거, file25-43사이, file43-61사이, file61보다 큰거 순으로 \
  검색하여 검색을 보다 빠르게 하기 위함입니다.\
  \
  사실 정확하게 file1\~file100을 정렬하였을 때 우리가 이해하기 쉽게 숫자로 썻지만 문자형식에 따라 정렬상태가 조금은 다를 수는 있으나 대략적으로 이런 원리로 구성되게 됩니다.

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FOxOvB7jepiK5XAvN2tne%2Fimage.png?alt=media&#x26;token=2e184083-a07f-4563-88e1-4534d9195f6a" alt=""><figcaption></figcaption></figure>

  \\

  음 그렇다면 $INDEX\_ROOT가 넘치도록 엄청나게 많은 파일을 생성해보겠습니다.

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FCY9h7Zw6EPKIBlXyENb0%2Fimage.png?alt=media&#x26;token=5b1f3f30-56f9-48a1-bdbf-eab8ade36aa0" alt=""><figcaption></figcaption></figure>

  오잉 갑자기 file25, file43, fil61이 사라졋군요.\
  Index Node Entry를 다시 살펴보겠습니다.

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FjnylD3sgLUd5x7FjF75j%2Fimage.png?alt=media&#x26;token=5eecbb81-1e8c-4924-875d-4ac5fc16694e" alt=""><figcaption><p>Index Node</p></figcaption></figure>

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FfVPFizGQMXEKRgqk2WOS%2Fimage.png?alt=media&#x26;token=a599b455-9c76-47f3-a6ee-beb4d0e20683" alt=""><figcaption></figcaption></figure>

  \- MFT Entry Number : 00 00 00 00 00 00 00 00 \
  \- Length of this Index Entry : 40 bytes (Index Node Header 부터 치면 없습니다.)\
  \-  Leng of $FILE\_NAME : 00 00\
  \- Flag : 03 00 00 00  \
  &#x20;   \>> 01 (하위노드 있음) + 02 (인덱스 레코드 끝) = 03 (하위노드 있으면서 인덱스 끝)\
  \
  결론은 모두 사라졌습니다.\
  그렇다면 다시 확인 해봐야겠네요\
  $INDEX\_ALLOCATION의 데이터 Runlist에서 클러스터 번호가 2,450로 가보도록 합시다.\
  128 + 2,450 X 8 = 19,728 섹터\
  \
  \*아쉽게도 Acitve Disk Eidtor의 경우 아쉽게도 $I30 내 문자 검색이 어려워서 FTK Imager에서 검색해보도록 하겠습니다. \[Directory 1 폴더내에 있는 $I30 파일 선택 후 검색기능을 사용해 보겠습니다.]

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FlbeA3nb7GnP8GwQ8BWaT%2Fimage.png?alt=media&#x26;token=a158ae22-1e55-4194-8f34-93efaef76378" alt=""><figcaption></figcaption></figure>

  file25.txt, file43.txt, file61.txt 를 찾아보면 위에서 $ROOT\_INDEX에서만 보이던 MFT\_ENTRY 넘버가 이제는 보이기 시작하네요!

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FKIs15M2MjkAb2x6DyFUm%2Fimage.png?alt=media&#x26;token=31432c11-c078-4e7c-b2b7-d66f4fcd4f01" alt="" width="371"><figcaption></figcaption></figure>

  \
  그리고.. 전반적으로\
  원래는 초반에 test.txt가 있었는데 file1\~로 시작하는게 다시 정렬되었네요

  <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FnPn156bWDSzsib0rZ6hR%2Fimage.png?alt=media&#x26;token=f7415e76-cfe0-4ead-9bb1-0a99f7bc060d" alt="" width="386"><figcaption></figcaption></figure>

</details>

## 2-11) Attribute\_list 속성

* MFT Entry의 속성이 너무 많아지면 MFT Entry 안에 다 담을 수 없기에 여러개의 MFT Entry 를 나눠 저장합니다. 이때 $ATTRIBUTE\_LIST 속성 내에 MFT Entry 를 담게 됩니다.\
  $ATTRIBUTE\_LIST Type ID : 20

1. 여러 파일들을 저장한 경우 루트디렉토리에 이렇게 Attribute\_list가 설정되어 있을 수 있습니다.\
   루트 디렉토리,바로 하위 디렉토리에 많은 파일을 생성하면 루트디렉토리는 Attribute\_list 속성을 갖게 됩니다.  (아래 실습 화면은 Directory1의 폴더에 약 300개의 파일을 생성 후 진행하였습니다.)\
   \
   먼저 루트디렉토리 5번 MFT Entry 로 이동해봅시다.\
   ($MFT) 68,392 섹터에서 5 X 1,024 = 5,120 오프셋 이동

2. $ATTRIBUTE\_LIST 속성은 기본적으로 아래의 특성을 갖습니다.\
   \- $STANDARD\_INFORMATION 시작하며, 자동적으로 base MFT Entry에 존재하게 된다.\
   \- $ATTRIBUTE\_LIST 속성은 반드시 base MFT Entry에 위치해야 한다.\
   \- $ATTRIBUTE\_LIST 속성은 크기가 가변적이며 Resident 형식과 non-Resident 형식 모두 가능\
   \- Non-Resident 형식이라면 속성의 Run List의 크기가 base MFT Entry를 넘어서는 안된다.\
   \- $ATTRIBUTE\_LIST 이후 $FILE\_NAME 속성이 위치한다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FueQNMwmTpUmdQG0T1Npx%2Fimage.png?alt=media&#x26;token=ab6b1df9-37dd-439a-93a6-29bedeeb2de2" alt=""><figcaption></figcaption></figure>

3. 속성 헤더를 한번 살펴보면,&#x20;

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FyuXhBGg7WHf8Pnx1rZ2K%2Fimage.png?alt=media&#x26;token=a60d60e5-6fa6-4879-960c-4becaf385557" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FsiEJm9WAdziqtaP7Ejk6%2Fimage.png?alt=media&#x26;token=97d343e1-bccb-4511-904e-98ba3180f028" alt=""><figcaption></figcaption></figure>

   \- Attribute Type ID : 20 00 00 00 -> 00 00 00 20\
   \- Non-Resident : 00 으로 Resident 속성을 가집니다.

4. $ATTRIBUTE\_LIST 구조를 살펴봅시다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2F3yfF3cQzAy2cHTbKoNwB%2Fimage.png?alt=media&#x26;token=bc665900-a8c2-4e93-abb9-5ae9bf9d5272" alt=""><figcaption><p>$ATTRIBUTE_LIST 구조</p></figcaption></figure>

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FMbjKVu07EuNMYGYZgzE9%2Fimage.png?alt=media&#x26;token=5c427afe-eaba-416d-802e-6e346c9795d0" alt=""><figcaption></figcaption></figure>

   \
   \- Attribute Type ID : 10 00 00 00 -> 00 00 00 10 -> $STANDARD\_INFORMATION ($10)\
   \- Entry Size : 20 00 -> 00 20 (16진수) => 32 bytes\
   \- 이름 길이 : 00\
   \- 이름 위치 : 1A => 26 오프셋\
   \- 속성 시작 VCN : 00 00 00 00 00 00 00 00\
   \- 속성이 위치한 File MFT Entry Address : 05 00 00 00 00 00 / 05 00 \
   &#x20;          -> MFT Entry number : 5 / Sequence Number : 5 => 루트 디렉토리의 MFT Entry Number\
   \- 속성 ID : 00 00

   속성이 위치한 MFT Entry Address를 보면 자기 자신인 5번 MFT Entry 를 가리키고 있네요!

5. 루트 디렉토리니까 폴더  내 파일 목록을 확인하기 위해 Index Root($90), Index Allocation($A0)의 Attribute\_list Record를 살펴봅시다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FGpbaFg6gSCKNIlIqo34b%2Fimage.png?alt=media&#x26;token=ee9046af-3ade-45e0-b0dc-a2330ea46250" alt=""><figcaption></figcaption></figure>

   \- 속성이 위치한 File MFT Entry Address : 70 00 00 00 00 00 / 01 00 \
   &#x20;     \> 00 00 00 00 00 70 -> 112 MFT Entry  Number\
   &#x20;  즉, 112번 MFT Entry 에 속성들이 있는지 살펴보도록 합시다.

6. $MFT 파일에서 112번 MFT Entry 로 이동해봅시다.\
   68,392($MFT) 섹터에서 112 X 1,024 = 114,688 오프셋 이동

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FLXiNNirIYd2XwCfdWX7X%2Fimage.png?alt=media&#x26;token=28db5e50-0a04-4e68-bd6e-b6aef073bef8" alt=""><figcaption></figcaption></figure>

   \- File Reference to Base MFT Entry : 05 00 00 00 00 00 / 05 00   => 5번 MFT Entry\
   &#x20;  \> 부모 MFT Entry 번호를 표시해주는 것을 알 수 있습니다!\\

7. $INDEX\_ALLOCATION($A0)의 속성을 살펴보면 Non-Resident 루트 디렉토리의 파일 Index가 있는 \
   INDEX\_ALLOCATION 데이터 영역이 몇 번 클러스터인지 살펴보면 36번 클러스터에 해당 합니다.

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FiuHpOLMEKb0KrPFUNx6F%2Fimage.png?alt=media&#x26;token=d9f3329b-0725-4216-9ffa-3991b0f74edd" alt=""><figcaption></figcaption></figure>

8. 36번 클러스터에 가서 확인을 해봅시다.\
   128 (파티션 시작 위치 ) + 36 X 8 (클러스터 당 섹터 수) = 416 섹터 확인 되네요!

   <figure><img src="https://4016728483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fa2NNzpsEy1B0QNWi34cs%2Fuploads%2FTN3tehowycEr0MqcQxQ5%2Fimage.png?alt=media&#x26;token=d039ad50-31cc-467f-875b-e5e761f0b662" alt="" width="563"><figcaption></figcaption></figure>

   즉, 이러한 방식으로 Attribute\_list 를 통해 다른 MFT Entry로 확장하여 사용하고 있습니다.
