jwmsg

FAT32 분석기 – 1

요즘에는 잘 사용하는지는 모르겠으나, 몇년전까지만 해도 대부분의 USB와 SDCard 같은 경우 FAT32를 쓰곤 했습니다.  파일시스템을 공부하면서 FAT 이미지 에서 데이터를 카빙하거나, 디렉터리 목록을 긁어오는등을 하며 조금 감각을 익혀가긴 했었는데,, 과도한 입시 공부를 하느라(거짓말) 파일시스템이 기억도 안나고 감각이 무뎌져 다시 공부를 시작했습니다.

일단, 그냥 글로만 보면 이해가 잘 안되서, C++로 코드를 작성하고 Sample 이미지를 기반으로 공부를 해 나가보겠습니다. 일단 이번 글에서는 FAT32의 기본적인 부부분만 짚고 넘어가 봅시다!

일단, FAT는 File Allocation Table 의 약자 입니다. 이는 매우 단순한 파일시스템 입니다. 과거 XP이전 시대때 주로 사용되었고, 현재는 작은 용량의 저장소 (흔히 2~16기가 미만)의 파일시스템 입니다.

기본적인 FAT 구조

위 그림은 기본적인 FAT 구조 입니다. 일단 먼저 예약된 영역에는 이 파일시스템을 정의(?)하는 영역입니다. 주로 첫 섹터에 부트섹터가 존재합니다. 부트섹터에서는 아래와 같은 정보를 알 수 있습니다.

BootSector 구조체
(표로 만들기 힘들어서,,, ㅠㅜㅠㅜ 조만간 표로 만들어서 업데이트 할께요,,)

여기서 가장 중요한것들만 모아 봤습니다. 이 아래에 있는 목록들만 있어도 충분히 FAT32의 디렉터리, 데이터 들을 분석할 수 있고, 카빙도 가능합니다.

  • (Dec)11~12 번째 offset의 섹터당 바이트수
  • (Dec)13 번째 offset 에 있는 클러스터당 섹터수,
  • (Dec)14~15번째 offset의 예약된 영역의 섹터크기
  • (Dec)16번째 offset의 FAT영역의 개수
  • (Dec)36~39번째 offset의 FAT 영역의 섹터 수
  • (Dec)44~47번째 offset의 루트디랙터리의 클러스터 번호 (주로 2 입니다.)

일단 여기까지 글의 시작을 알리며  다음 내용 (FAT32의 디렉터리 정보를 불러오기)를 통해 계속 이어나가겠습니다. 아 참, 그리고 EVTX 도 이어서 올리도록 하겠습니다!