엄청 오랜만에 suninatas에 있는 남아저 문제를 풀어 보았다.
이제 20번, 27번, 31번, 32번 문제가 남았다.
32번 문제
문제를 해결하기 위해서 했던 과정을 작성해서 문제와 상관없는 내용이 있을 수도 있습니다.
문제 :
문제를 풀기 위해서 해결해야 할 사항
: USB 이미지 파일의 손상된 부분을 인식할 수 있도록 수정해야 함.
우선, 파일을 다운로드한다.
해당 파일을 [ HxD ] 프로그램으로 열어보았다.
뭐가 잘못되었는지 모르겠다 ㅠㅠ
USB 이미지를 열기 위해서
포렌식 도구인 "FTK Imager"을 다운로드해 본다.
https://www.exterro.com/ftk-imager
설치가 되었으면, [+] 버튼을 눌러서 Image File을 로드
USB 이미지 파일 자체가 손상되어서 인식이 안 되는 것 같다.
맨 앞의 HEX 값을 인터넷에 검색해 보았는데 [ FAT32 구조 ]의 파일이라고 한다.
FAT 32 구조를 대입하면 될 거 같다. 이제 FAT 32에 대해 알아야 할 거 같다.
FAT32 구조를 공부하면서 참고했던 사이트 :
2. https://blog.forensicresearch.kr/13
3. https://hec-ker.tistory.com/268
결과를 정리해 보았다.
[FAT32 구조]
간단하게 FAT32는 Reserved Area, FAT, Data Area로 구성되어 있다고 한다.
Reserved Area (Boot Sector, FSINFO ..) |
FAT #1 | FAT #2 | Root Directory | Data Area |
1. Reserved Area - Boot Sector
1.1 Jump Command to Boot Code (0x00 ~ 0x02, 3Byte)
File System Format | CPU Jump Command (little Endian) |
FAT 12/16 | 0x903CEB |
FAT 32 | 0x9058EB |
NTFS | 0x9052EB |
1.2 OEM(Original Equipment Manufacturing) ID (0x03 ~ 0x0A, 8Byte)
FAT 12/16/32는 MSDOS5.0을 표시
NTFS는 NTFS와 공백을 표시
일종의 제조사 ID 같은 형식으로 박혀 있는 시그니쳐
1.3 BPB(BIOS Parameter Block) (0x0B ~ 0x59, 78Byte)
파일에 대한 다양한 정보를 포함하고 있으며 BPB의 마지막 부분을 보면 FAT32라고 되어 있음.
파티션 정보를 포함하여 BPB에 포함된 정보를 바탕으로 파일시스템이 부팅을 진행
의미 | 내용 |
Byte Per Sector | 한 섹터가 몇 바이트로 구성되어 있는지 나타냄 (기본 512바이트) |
SP | 클러스터를 구성하는 섹터의 수. 기본적으로 8개의 섹터 사용 (4096바이트) |
RS (Reserved Sector) | 예약된 섹터의 개수 |
FAT 개수 | FAT의 개수를 나타냄 (기본적으로 FAT32는 2개 사용) |
Media Type | 볼륨이 어떤 미디어 매체를 이용하는지 나타냄 (고정식 디스크는 0xF8 사용) |
Total Sector 32 | 파티션 상의 총 섹터 개수를 나타냄 |
FAT Size 32 | FAT 영역의 섹터 수를 나타냄 (단, FAT 1개에 대한 크기) |
File System Version | FAT32의 버전 정보를 나타냄 |
Root Directory Cluster | 루트 디렉토리의 시작 위치를 나타냄 |
File System Information | FSInfo 구조체에 대한 정보가 어디에 저장되어 있는지를 나타냄 (BR 기준 보통 1번 섹터에 저장) |
Boot Record Backup Sector | BR이 백업된 섹터 번호를 나타냄 (기본값으로 6을 사용) |
Volume ID | 볼륨 시리얼 번호를 나타냄 |
Volume Label (1, 2) | 볼륨의 이름을 기록 |
File System Type | 해당 파일 시스템의 타입을 나타냄 (FAT32의 값을 저장) |
1.4 Boot Code Error Message (0x5A ~ 0x1FD, 419Byte)
1.5 Signature (0x1FE ~ 0x1FF, 2Byte)
VBR 영역의 시그니처는 0x55AA로 고정
2. Reserved AREA - FSINFO, BootStrap
FSINFO 구조체의 시작을 알리는 시그니처가 4 bytes의 RRaA (52 52 61 41)
FSINFO 구조체가 끝나기 전 두 번째 시그니처는 rrAa(72 72 41 61)
그다음 4 bytes는 사용 가능한 클러스터의 수를 나타낸다고 합니다. 위 사진에서는 D7 E3 03 00 (0X0003E3D7) 으로 10진수로 254,935
그다음은 사용 가능한 클러스터의 시작위치를 나타낸다. 위 사진에서는 96 04 00 00 (0X00000496)
FSINFO의 마지막은 부트 섹터와 같이 55 AA
3. FAT Area(File Allocation Table)
FAT Area는 데이터 영역의 클러스터 할당 상태를 표시
FAT32는 32 bits(4 bytes)로 데이터 영역의 시작 클러스터부터 마지막 클러스터까지의 할당 상태를 표시
FAT Area는 일반적으로 2개이며, FAT Area #1, #2에서 2는 1을 위한 백업용
4. Data Area
4.1. Root Directory
DATA Area 어느 곳에나 올 수 있지만, 기본적으로 FAT Area 끝나면 바로 다음에 나옴.
4.2. Data Area
저장되는 데이터는 크게 디렉터리와 파일로 나뉨.
문제로 다시 돌아와서 Reserved Area의 Boot Sector를 확인해 보면
1.1 Jump Command to Boot Code 부분이
EB 58 90 이므로 0x9058EB(리틀엔디안 방식)으로 FAT32에 해당된다.
추가 적으로
- 섹터당 바이트 수 : (0B~0C) : 0x0200 = 512 바이트
- 클러스터당 섹터 수 : (0D~0D) : 0x08 = 8 섹터
- 클러스터당 바이트 값 : 512 * 8 = 4096 바이트
그리고 다른 것들은 특이사항이 없는데,
1.5 Signature (0x1FE~ 0x1FF, 2Byte) 는 55 AA 로 고정인데
고정된 위치에 55 AA 이 없고 훨씬 뒤쪽에 보였다...
혹시나 하고 00 00 00 00 으로 가득 찬 부분을 지우고 저장한 뒤 FTK 툴에서 열어 보았더니
▼
열렸다!!
하지만 글자가 깨지고 문서랑 사진이 열리지 않는 걸 보니까 뭔가 잘못 복구된 거 같다...
재시도 !
1.5 Signature (0x1FE ~ 0x1FF, 2Byte) 에서
이번에는 고정된 위치 앞쪽에 있는 55 AA를 뒤로 옮겨 보았다.
그 앞에 00 00 00 00 부분에 00을 잔뜩 넣어서 0x1FE~0x1FF에 55 AA가 들어가도록 만들었다.
55AA에 맞춰서 넣으니, 그 뒤에
FSINFO 구조체의 시작을 알리는 시그니처인 RRaA (52 52 61 41)까지 보인다.
해당 USB 이미지를 저장한 후에 FTK Imager로 열어보니 이제 깨지는 글자도 없고 잘 열린다.
파일 들을 Export 시켜 저장한 다음
문서를 확인하면 2차 테러 계획 파일을 확인할 수 있다.
테러 위치는 Rose Park로 확인되고,
파일의 마지막 수정일시는 2016년 5월 30일 월요일, 오전 11시 44분 2초로 확인된다.
인증키 형식 : lowercase(MD5(YYYY-MM-DD_HH:MM:SS_장소) 에 맞춰주면,
2016-05-30_11:44:02_Rose Park
이다. 이걸 다시 MD5로 바꿔서 인증을 하면
문제 해결!