2014-11-19 4 views
1

플래시 드라이브의 데이터 복구를 시도하는 중 FAT 디렉터리 항목을 검색 할 수있는 도구를 작성하려고합니다. 필자는 FAT를 사용하여 어디를보아야하는지 알 수 없으므로 드라이브 섹터 (실제로 드라이브의 이미지 덤프)를 간단히 스캔합니다.FAT 디렉터리 항목 검색

문제는 섹터/클러스터에 FAT 디렉토리 항목이 있는지 감지하는 방법에 대한 정보를 찾을 수 없다는 것입니다. 나는 structure of a directory entry을 알고 있지만 주어진 바이트 묶음이 실제로 하나를 구성하는지 여부를 감지하는 방법은 알지 못합니다. 하위 디렉토리의을 시작 찾기

방금 ​​바이트가 0x20에서 바이트 0x00에서 ..에서 .를 검색 할 수 있기 때문에 충분히 간단하지만, 이것은 단지 하위 디렉토리의 첫 번째 섹터, 이후되지 분야에 도움 , 다른 위치에있는 루트 디렉토리 나 하위 디렉토리 조각이 아닙니다.

대략적인 가이드로 날짜 범위, 파일 크기, 클러스터 범위, 잘못된 파일 이름 문자를 사용했지만 너무 신뢰할 만하지 않았습니다.

디스크 편집기에서 이미지를 열고 PgDn 키를 누르고 있으면 올바른 디렉토리 항목이 포함 된 섹터가 내 시야를 통과 할 때 내 두뇌가 감지 할 수 있지만 어떻게 프로그램에서 구현할 수 있습니까? ? FAT 디렉토리 항목을 감지 할 수있는 방법이 있습니까?

+0

이걸 조사한 적이 있습니까? http://en.wikipedia.org/wiki/Design_of_the_FAT_file_system 및 http://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html – Joao

+0

예, 두 가지 모두를 보았습니다 (사실, 유일한 질문은 위키 피 디아 페이지 링크입니다.) 마커를 식별하는 것과 레이아웃 만 말하는 것은 아닙니다. 임의의 바이트 묶음을 디렉토리 항목으로 해석 할 수없는 이유는 없습니다. 난 * 유효한 * 디렉토리 항목인지 알아낼 방법이 있는지 결정하려고합니다. – Synetech

+0

http://www.tavi.co.uk/phobos/fat.html, 즉 'The File Attributes'섹션에서 0x10 '항목이 하위 디렉토리를 설명합니다.'라고 말하십시오. – Joao

답변

0

디렉토리 항목을 식별하는 데 완벽한 작업을 수행 할 수는 없지만 간단한 경험적 방법을 사용하여 합리적인 결과를 얻을 수 있어야합니다.

앞에서 말씀 드린대로 오프셋 0x00에서 . 문자를 찾아 볼 수 있습니다. 그곳에 없다면 엔트리는 확실히 디렉토리가 아닙니다.

파일 속성 (오프셋 0x0B)의 비트 4는 디렉토리 항목 인 경우 설정됩니다. 그 비트가 설정되어 있지 않으면, 확실히 디렉토리가 아닙니다. 또한 문서에서는 비트 6이 디스크 장치로 설정되지 않는다고 말합니다. 따라서 비트 6이 설정되면 유효한 FAT 항목이 아닐 것입니다. 0x0F의 값은 VFAT 긴 파일 이름 항목을 지정하기 때문에주의해야합니다.

0x0E의 두 바이트가 생성 시간입니다. 디코딩 된 시간이> 23이거나 디코드 된 시간이> 59이거나 디코드 된 시간이> 29 인 경우에는 의심스러운 것으로 볼 수 있습니다. 일 수 있습니다. 누군가가 망쳐 놨거나 어떻게 든 손상된 디렉토리 항목 일 수는 있지만 가능성은 희박합니다.

0x14의 액세스 권한은 비트 12-15를 0으로 설정해야한다고 말합니다. 이러한 비트가 설정되어 있으면 의심스러운 것으로 간주하십시오.

0x1C의 4 바이트가 파일 크기를 제공합니다. 그것들은 디렉토리 엔트리에 대해 0이되어야합니다. 그렇지 않은 경우 의심스러운 것으로 간주하십시오.

그와 같은 다른 표시가있는 것으로 보입니다. 당신이해야 할 일은 코드가 할 수있는 것을 식별하고 증거에 기반하여 결정을 내리는 것입니다. 100 % 정확하지는 않습니다 (즉, 속일 수 있음).하지만 꽤 좋을 것 같습니다.

+0

'그곳에 없으면 엔트리는 확실히 디렉토리가 아닙니다. '내가 말했듯이, 이것은 단지 디렉토리의 ** 시작 **만을 식별합니다. 디렉토리는 조각화 될 수 있으며 이후 조각은 섹터 시작시이를 포함하지 않습니다. (따라서, 조각 모음되지 않은 디렉토리조차도 디렉토리의 첫 번째 섹터를 지나치지 않는다.) – Synetech