본문 바로가기

[+] Forensic

File System - Ext (12)

이번에는 디렉토리 엔트리에 대해서 알아 볼 것이다.

[디렉토리 엔트리]
디렉토리 엔트리는 파일이나 디렉토리의 이름을 저장하고, 파일이나 디렉토리에 할당 된 inode의 주소를 저장한다.
또 디렉토리 엔트리는 자신과 맵핑 관계인 디렉토리에 할당 된 블록에 위치한다. 
디렉토리 엔트리 데이터 구조에는 두 가지 유형이 존재한다. 하지만 이 두 유형의 크기는 같다. 다른 점이라면, 파일 타입이 있고 없고 이다. 디렉토리 엔트리에 어떤 유형이 사용되는지는 슈퍼블록에서 정의된다. 현재로서는 파일 타입 필드가 포함된 디렉토리 엔트리 유형을 사용하고 있다. 일단 파일 타입이 없는 데이터 구조를 확인하여 보자.

[그림 1 - 예전에 사용되었던 디렉토리 엔트리 구조]

 - inode 값 : inode 번호이다.

따로 모두 설명 할 필요 없는 직관적인 필드들이기 때문에 자세한 설명은 생략하도록 하겠다.

이번에는 현재 사용되고 있는 디렉토리 엔트리 데이터 구조이다.

[그림 2 - 현재 사용 중인 디렉토리 엔트리 구조]

 - inode 값 : 0x0000000B 값을 10진수로 변환하면 11 이라는 값이 나오므로 현재 위 이미지의 inode는 inode 11이다.

 - 이름 길이 : 해당 디렉토리 엔트리가 할당 된 파일(디렉토리)의 이름 길이이다.

 - 파일 타입 : 해당 디렉토리 엔트리가 할당 된 것이 파일인지 디렉토리인지를 구분하여 주는 필드이며, 아래 목록 값들에 따라 구분지어 진다.


[그림 3 - 디렉토리 엔트리가 할당 된 파일(디렉토리) 타입 목록]

 - 이름 : 이름 길이에 따라 이름 필드의 크기는 달라진다. [그림 2]의 경우 이름 길이가 1이므로 이름은 "." 이 된다. 즉, 자신을 가리키고 있는 디렉토리의 엔트리이다.


두 번째 디렉토리 엔트리들을 찾으려면 해당 엔트리의 크기를 해당 디렉토리 시작 오프셋에서 더하면 두 번째 디렉토리 엔트리를 찾을 수 있다.

이러한 식으로 계속 다음 디렉토리 엔트리를 찾으면 되는데 만약 디렉토리 엔트리 크기가 이름 길이에 비해 불 필요할 정도로 크다면 그 디렉토리 엔트리와 다음 디렉토리 엔트리 사이에 파일이 삭제되었음을 의미한다. 

'[+] Forensic' 카테고리의 다른 글

File System - UFS (1)  (0) 2012.03.01
File System - Ext (13)  (0) 2012.02.28
File System - Ext (11)  (0) 2012.02.27
File System - Ext (10)  (0) 2012.02.24