본문 바로가기

포렌식

File System - FAT (10) 이번 글에서는 디렉토리 엔트리에 대해서 알아 볼 것이다. 디렉토리 엔트리에는 디렉토리의 이름과 여러 데이터를 대신 설명 해주는 메타데이터가 포함되어 있다. 이러한 엔트리들은 파일과 디렉토리 모두에 할당이 되며 엔트리 위치는 할당 된 파일이나 디렉토리의 부모 디렉토리 클러스터에 위치하게 된다. 엔트리에 저장되는 이름의 최대 길이는 확장자를 제외하고 8글자이며, 확장자는 최대 3글자이다. 디렉토리 엔트리의 바이트 오프셋은 아래와 같으며 부가적 설명이 필요한 항목은 따로 설명을 하도록 하겠다. [그림 1 - 디렉토리 엔트리 바이트 오프셋] - 파일이름의 첫 문자 또는 할당 상태 : 이 항목은 디렉토리나 파일의 이름 첫 번째 문자가 설정되는 부분이며 해당 디렉토리 엔트리가 비 할당 상태일 시 문자대신 "0xE5.. 더보기
File System - FAT (9) 이번 글 에서는 예약영역 다음 섹터부터 시작하는 FAT 영역에 대해서 알아 볼 것이다. FAT 영역은 FAT 파일시스템에서 중요한 역할을 담당하고 있는데, 그 역할은 다음과 같다. - 클러스터 할당 상태 파악 - 어떠한 파일이나 디렉토리에 할당 된 클러스터의 다음 클러스터 주소 파악 FAT은 보통 FAT 파일시스템에서 두 개가 존재하며, 정확한 번호는 부트 섹터에서 할당한다. 첫 번째 FAT은 예약 영역 섹터 다음부터 시작하며, 부트섹터에서 전체크기를 할당 한다. 두 번째 FAT은 만약 존재한다면 첫 번째 FAT 마지막 섹터 다음부터 시작하며, 구성은 같은 크기의 엔트리들로 구성된다. * 참고 : 엔트리에 Header와 Footer는 존재하지 않는다. 각 엔트리 크기는 FAT 종류마다 다른데, 해당 종류.. 더보기
File System - FAT (8) 이번 글 부터는 FAT 파일시스템의 각 데이터 구조체들을 자세히 살펴 보도록 하겠다. 현재 글에서는 부트 섹터와 FAT 32 파일시스템에만 존재하는 FSINFO 구조체를 알아 볼 것이다. 일단 부트 섹터는 파일시스템 첫 섹터에 존재하며 FAT 파일시스템의 종류에 따라 조금씩 다르다. 하지만 첫 36byte는 동일하다. 일단 부트 섹터의 36byte부터 살펴보자. [그림 1 - 부트섹터 처음 36byte] 위 이미지만 봐서는 정확히 설명이 안되는 부분이 있기 때문에 아래에 설명이 필요한 부분을 따로 설명 해 두었다. - 부트 코드 점프 명령어 : 해당 부분은 부팅 파일시스템이 아니면 설정되지 않아도 되는 부분이다. - 섹터당 바이트 수 : 이 부분은 주로 512, 1024, 2048, 4096 바이트로 할.. 더보기
File System - FAT (7) 이번 글에서는 파일 복구와 FAT 파일시스템의 종류를 결정하는 방법, 일관성 검사에 대해서 알아보도록 하겠다. [파일 복구] 파일 삭제 과정을 보면 FAT 엔트리가 0이 되고 디렉토리 엔트리가 비 할당 상태로 바뀌면서 디렉토리 엔트리의 첫 바이트가 "0xE5" 로 설정된다. 파일을 복구하기 위해서는 파일의 시작 위치(시작 클러스터)와 크기를 알아야 한다. 하지만 시작 클러스터만 알 수 있을 뿐 나머지 연계되는 클러스터는 정확하게 알지 못한다. 파일시스템의 파일의 클러스터들 배치는 아래와 같은 경우들이 있다. - 연속적인 클러스터 할당의 경우 [그림 1 - 연속 할당 클러스터] 위 경우 파일 복구는 정말 쉽다. 시작 클러스터인 45를 시작으로 파일의 크기만큼인 48까지만 복구해주면 된다. - 할당 클러스터.. 더보기
File System - FAT (6) 이번 글에서는 FAT 파일시스템에서 파일 생성, 삭제가 어떻게 이루어지는지에 대해서 이야기 할 것이다. 생성, 삭제 수행들은 여러 참조 모델들의 데이터를 이용하여 이루어 지는데 그 과정은 아래와 같다. [파일생성 과정] 디렉토리(dir)는 생성되어 있으며 클러스터의 크기는 4096byte이고 파일 크기는 5000byte라고 가정한 과정이다. 1. 볼륨 섹터 0에서 부트 섹터를 참조하고, FAT 구조체와 데이터영역, 루트 디렉토리의 위치를 파악한다. [그림 1 - 1번 과정] 2. 디렉토리를 찾기 위해 루트 디렉토리에서 각 디렉토리 엔트리를 해석하고, 찾을려고 하는 디렉토리의 이름과 디렉토리 속성을 이용하여 찾으려고 하는 디렉토리의 엔트리를 찾는다. [그림 2 - 2번 과정] * 참고 : 루트 디렉토리에는.. 더보기