
FAT 파일 시스템 탐색, 추출, 복구 및 포렌식 도구

이 도구는 FAT 파일 시스템을 조작하여 탐색, 추출, 복구, 복원 및 포렌식 분석을 수행할 수 있도록 설계되었습니다. 현재 FAT12, FAT16 및 FAT32를 지원합니다.
fatcat을 다음과 같이 빌드할 수 있습니다:
mkdir build
cd build
cmake ..
make
그런 다음 설치합니다:
make install
Fatcat은 이미지를 인자로 받습니다:
fatcat disk.img [options]
참고: 빌드 방식에 따라 옵션을 disk.img 앞에 지정해야 할 수 있습니다. 즉 fatcat [options] disk.img
-O 옵션으로 파일 내 오프셋을 지정할 수 있습니다. 이는 블록 장치에 여러 파티션이 있는 경우 유용합니다. 예:
fatcat disk.img -O 1048576 [options]
이렇게 하면 fatcat이 1048576번째 바이트부터 시작합니다. 파티션 튜토리얼을 참조하세요.
-l 옵션을 사용하여 FAT 파티션을 탐색할 수 있습니다:
$ fatcat disk.img -l /
Listing path /
Cluster: 2
d 24/10/2013 12:06:00 some_directory/ c=4661
d 24/10/2013 12:06:02 other_directory/ c=4662
f 24/10/2013 12:06:40 picture.jpg c=4672 s=532480 (520K)
f 24/10/2013 12:06:06 hello.txt c=4671 s=13 (13B)
-l /some/directory처럼 경로를 제공할 수도 있습니다.
-L을 사용하면 경로 대신 클러스터 번호를 제공할 수 있습니다. 때로 유용합니다.
-d를 추가하면 삭제된 파일도 볼 수 있습니다.
목록에서 접두사 f 또는 d는 해당 항목이 파일인지 디렉터리인지 나타냅니다.
c=는 클러스터 번호, s=는 바이트 단위의 크기(괄호 안의 표시 크기와 동일)를 나타냅니다.
끝에 h 문자가 있으면 파일이 숨김으로 표시되었음을 의미합니다.
끝에 d 문자가 있으면 파일이 삭제되었음을 의미합니다.
-r을 사용하여 파일을 읽을 수 있으며, 파일은 표준 출력에 기록됩니다:
$ fatcat disk.img -r /hello.txt
Hello world!
$ fatcat disk.img -r /picture.jpg > save.jpg
-R을 사용하면 경로 대신 클러스터 번호를 제공할 수 있지만, 파일 크기 정보는 손실되며 파일은 할당된 클러스터 수로 반올림됩니다. 읽을 파일 크기를 지정하려면 -s 옵션을 제공하세요.
-x를 사용하여 FAT 파일 시스템 디렉터리를 디렉터리로 추출할 수 있습니다:
fatcat disk.img -x output/
특정 클러스터에서 추출하려면 -c를 제공하세요.
추출 시 -d를 제공하면 삭제된 파일도 추출됩니다.
위에서 설명한 대로, -d를 제공하면 목록에서 삭제된 파일을 찾을 수 있습니다:
$ fatcat disk.img -l / -d
f 24/10/2013 12:13:24 delete_me.txt c=5764 s=16 (16B) d
탐색하여 파일이나 흥미로운 삭제된 디렉터리를 찾을 수 있습니다.
삭제된 파일을 복구하려면 간단히 -r을 사용하여 읽습니다. 생성된 파일은 원래 FAT 시스템에서 연속적으로 읽히며 손상될 수 있습니다.
삭제된 디렉터리를 복구하려면 해당 클러스터 번호를 기록하고 위와 같이 추출합니다:
# 삭제된 디렉터리 클러스터가 71829인 경우
fatcat disk.img -x output/ -c 71829
참조: 삭제 취소 튜토리얼
디스크에 손상된 섹터가 있다고 가정할 때, 복구를 수행하려 할 수 있습니다.
첫 번째 조언은 ddrescue를 사용하여 데이터의 복사본을 만들고, 디스크를 다른 디스크나 정상 파일로 저장하는 것입니다.
섹터가 손상되면 해당 바이트는 ddrescue 이미지에서 0으로 대체됩니다.
가장 먼저 시도할 방법은 위와 같이 -l을 사용하여 이미지를 탐색하고 -i를 확인하여 fatcat이 디스크를 FAT 시스템으로 인식하는지 확인하는 것입니다.
그런 다음 -2를 확인하여 파일 할당 테이블이 다른지, 병합 가능한지 살펴볼 수 있습니다. 병합 가능할 가능성이 높습니다. 이 경우 -m을 사용하여 FAT 테이블을 병합할 수 있습니다. 그 전에 백업하는 것을 잊지 마세요(아래 참조).
파일 시스템이 손상되면 일반 시스템에서 접근할 수 없는 파일과 디렉터리가 존재하며, 이를 "고아"라고 합니다.
fatcat은 이러한 노드를 찾는 옵션을 제공합니다. 시스템을 자동으로 분석하고 할당된 섹터를 탐색합니다. 이 작업은 -o로 수행됩니다.
다음과 같은 디렉터리와 파일 목록이 표시됩니다:
There is 2 orphaned elements:
Directory clusters 4592 to 4592: 2 elements, 49B
File clusters 4611 to 4611: ~512B
그런 다음 -L과 -R을 직접 사용하여 해당 파일과 디렉터리를 확인할 수 있습니다:
$ fatcat disk.img -L 4592
Listing cluster 4592
Cluster: 4592
d 23/10/2013 17:45:06 ./ c=4592
d 23/10/2013 17:45:06 ../ c=0
f 23/10/2013 17:45:22 poor_orphan.txt c=4601 s=49 (49B)
고아 파일의 크기는 알 수 없으므로, 읽으면 클러스터 크기의 배수인 파일을 얻게 됩니다.
참조: 고아 파일 튜토리얼
fatcat을 사용하여 FAT 파일 시스템을 해킹할 수 있습니다.
-i 플래그는 파일 시스템에 대한 많은 정보를 제공합니다:
fatcat disk.img -i
이를 통해 섹터 크기, FAT 크기, 디스크 레이블 등 헤더 데이터를 얻을 수 있습니다. 또한 FAT 테이블을 읽어 디스크 사용량을 추정합니다.
-@를 사용하여 특정 클러스터에 대한 정보를 얻을 수도 있습니다:
fatcat disk.img -@ 1384
이를 통해 클러스터 주소(파일 시스템 내 클러스터 오프셋)와 두 FAT 테이블에서 다음 클러스터의 값을 얻을 수 있습니다.
-b를 사용하여 FAT 테이블을 백업할 수 있습니다:
fatcat disk.img -b backup.fats
-p를 사용하여 다시 쓸 수 있습니다:
fatcat disk.img -p backup.fats
-w와 -v를 사용하여 FAT 테이블에 쓸 수 있습니다:
fatcat disk.img -w 123 -v 124
이렇게 하면 123의 다음 클러스터 값으로 124를 씁니다.
-t를 사용하여 테이블을 선택할 수도 있습니다. 0은 두 테이블, 1은 첫 번째, 2는 두 번째입니다.
-2를 사용하여 두 FAT의 차이를 볼 수 있습니다:
# 차이 보기
$ fatcat disk.img -2
Comparing the FATs
FATs are exactly equals
# FAT1의 500번째 클러스터에만 123 쓰기
$ fatcat disk.img -w 500 -v 123 -t 1
Writing next cluster of 500 from 0 to 123
Writing on FAT1
# 차이 보기
$ fatcat disk.img -2
Comparing the FATs
[000001f4] 1:0000007b 2:00000000
FATs differs
It seems mergeable
-m을 사용하여 두 FAT를 병합할 수 있습니다. 테이블에서 각각 다른 항목에 대해 하나가 0이고 다른 하나가 0이 아니면 0이 아닌 값이 선택됩니다:
$ fatcat disk.img -m
Begining the merge...
Merging cluster 500
Merge complete, 1 clusters merged
참조: FAT 수정 튜토리얼
Fatcat은 손상된 FAT 체인이 있는 디렉터리를 수정할 수 있습니다.
이를 위해 -f를 사용하세요. 파일 시스템 트리를 탐색하여 FAT에서 할당되지 않았지만 fatcat이 읽을 수 있는 디렉터리를 FAT에 수정합니다.
-e를 사용하여 항목에 대한 정보를 얻을 수 있습니다:
fatcat disk.img -e /hello.txt
이를 통해 항목의 주소(파일 자체가 아님), 클러스터 참조 및 파일 크기(디렉터리가 아닌 경우)가 표시됩니다.
-c [cluster] 플래그를 추가하여 항목의 클러스터를 변경하고, -s [size] 플래그를 추가하여 항목 크기를 변경할 수 있습니다.
참조: FAT 재미 튜토리얼
-k를 사용하여 클러스터 참조를 검색할 수 있습니다.
-z를 사용하여 0으로, 또는 -S를 사용하여 임의 데이터로 할당되지 않은 섹터 데이터를 지울 수 있습니다.
예를 들어, 삭제된 파일은 이후에 읽을 수 없게 됩니다.
MIT 라이선스 하에 있습니다.