- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- System
- synology
- 메소드
- 리눅스
- GUI
- ACL
- Java
- Tkinter
- centos docker
- Linux
- GPIO
- 그라파나
- 네트워크
- 쉘 스크립트 기초
- LEVIATHAN
- RaspberryPi
- Shell script
- 클라우드
- 프로젝트
- 쉘 스크립트
- nginx
- 자바
- 쉘 스크립트 if문
- Android
- Python
- API
- 안드로이드
- JSP
- 라즈베리파이
- docker
- Today
- Total
IT창고
VHD로 알아보는 FAT32 본문
2018/07/06 - [보안/Digital forensic] - FAT32 파일시스템에서 FAT32에 대해 알아봤으며 이번에는 실제PC에서 VHD를 만들어 자세히 살펴보도록 하겠습니다.
사용할 에디터는 hex editor입니다. 에디터의 종류도 여러가지가 있는데 010editor가 가장 유명하며 winhex도 있습니다. 010editor의 경우 유료 라이센스를 5만원 정도로 구입해야만 합니다.
hex editor의 경우 https://mh-nexus.de/en/downloads.php 에서 무료로 다운로드가 가능합니다.
하드디스크의 구조를 잠시 살펴보면 1개의 sector가 512byte이며 대부분 클러스터 단위로 많이 관리를 합니다. 단 문제가 될 경우가 있는데 DB의 경우 DB의 칼럼 용량을 주의해야하며 클러스터를 너무 크게 할 경우 낭비공간과 읽기/속도가 느려집니다.
본격적으로 FAT32에 대해 살펴보겠습니다. 테스트 환경은 실제PC에서 VHD를 만듭니다.
실행창에 diskmgmt.msc 를 입력하면 위와 같은 창이 나옵니다. VHD를 만드는 법은 동작 -> VHD만들기를 클릭합니다.
원하는 위치에 가상디스크를 지정하고 저는 3GB의 고정크기로 만들었습니다.
만들었다면 아직 초기화가 되어있지 않다고 나와있습니다. 초기화를 시킬때 MBR형식으로 초기화 시켜줍니다.
초기화 시키고 볼륨까지 생성했다면 실제PC에서 폴더에 방금만든 드라이브가 추가된것이 눈에 보입니다.
위의 드라이브로 테스트를 진행합니다.
볼륨을 생성시킬때 할당받는 크기가 있습니다. 기본값으로 할 경우 8개의 sector가 1개의 클러스터입니다. 즉 1cluster = 8sector = 4096byte 입니다.
HxD에서 기타설정에 보면 디스크 열기가 있습니다. 논리디스크와 물리디스크가 있으며 만약 논리디스크로 열게 되면 0섹터가 MBR부터가 아닌 BR부터 시작되게 됩니다.
MBR에 대한 자세한 내용은 2018/07/05 - [보안/Digital forensic] - 디스크 주소 표현 방식, MBR를 참고합니다. 부트코드의 마지막 부분을 보면 디스크 서명이 있습니다. 부트코드는 모든 윈도우10과 같지만 디스크 서명만큼은 다른 값을 가지게 됩니다.
정확히 살펴보면 440byte까지는 부트코드이며 그 다음 4byte가 디스크 서명이고 그 다음 2byte는 보통 00 00의 값을 가지며 446byte 모두를 모두 부트코드라고 합니다.
부트코드 아래에 64byte가 파티션의 정보이며 마지막 4byte는 시그니처입니다.
윈도우는 Little Endian방식을 사용하며 시그니처를 읽을 경우 AA 55로 읽어야만 합니다. Big Endian보다 속도는 빠르지만 안정성은 떨어지는 편입니다.
만약 MBR에 문제가 생기면 부트코드 안에 존재하는 에러메세지가 출력되게 됩니다.
현재 만든 파티션은 FAT32이며 하나의 파티션만 존재합니다.
00 |
부팅불가 (부팅가능은 80) |
02 03 00 |
사용하지 않음 |
0C |
FAT32(0x0B, 0x0C) (0x07은 NTFS, 0x05 확장파티션) |
8C 0A 82 |
사용하지 않음 |
80 00 00 00 |
LBA시작주소 (128번 섹터가 FAT32 시작지점) |
00 00 20 00 |
총 섹터의 수 (2097152*512= 값/1024 = 값/1024= 1024즉 1GB) |
파티션의 정보를 읽어보면 위와 같습니다.
Tip.
하드디스크의 부팅순서를 보면 먼저 BIOS 하드웨어 검사 -> 부팅순서 확인 -> MBR읽기 -> 부팅가능하면 해당 파티션으로 가기 -> 해당 파티션안에 있는 OS를 읽기 입니다.
대표적으로 USB는 기본 파일시스템이 FAT32입니다. 만약 앞에 80이 아닌 00으로 바꿔버리면 부팅이 불가능해집니다.
Tip.
VHD 확장파티션 만들기
VHD의 확장파티션은 디스크 관리에서는 만들수가 없습니다. cmd를 관리자 권한으로 들어가서 diskpart툴을 사용해야 합니다. 사용명령어는 위와 같으며 사용가능한 공간이 있어야만 합니다. 마지막에 명령어 assign를 입력하면 자동으로 드라이브명을 할당해줍니다.
실제로 논리 드라이브가 생긴걸 확인할수있습니다.
RootDirectory를 찾도록 하겠습니다.
RootDirectory는 MBR~BR과 예약된 영역과 FAT#1+FAT#2를 모두 합한 위치가 RootDirectory의 위치입니다.
FAT의 BR구조이며 MBR~BR의 값은 MBR에 있는 파티션에서 찾아볼수있습니다. 128섹터로 이미 알고 있습니다.
예약된 영역(Reserved Sector Count)는 128번 섹터에서 찾아볼수있습니다.
위의 사진이 현재 테스트중인 BR이며 예약된 영역은 0x10 0x0E로 4110입니다. 128 + 4110을 할 경우 클러스터 테이블로 갈수있습니다.
실제로 4238섹터에 클러스터 테이블이 존재합니다.
FAT#1의 경우는 FAT size 32입니다. 0x07 0xF9이며 2041입니다.
FAT#2도 같은 값을 가지므로 2041입니다.
이제 MBR~BR 과 예약된 영역과 FAT#1,2를 더해보면 128 + 4110 + 2041+ 2041 = 8320섹터입니다.
RootDirectory를 제대로 찾아오게 되었습니다.
테스트를 위하여 폴더와 텍스트 파일을 생성하여 넣어두었습니다. HxD로 RootDirectory가보면 방금 생성한 실제 파일들의 정보가 있습니다. RootDirectory Entry 구조는 아래의 그림을 참조합니다.
gsk.txt파일의 정보를 살펴보면 아래와 같습니다.
47 53 4B 20 20 20 20 20 |
NAME (GSK) |
54 58 54 |
확장자 TXT |
20 |
0x20은 일반파일 0x10은 디렉토리 0x01은 읽기전용 0x02는 숨김파일 |
18 |
X |
A6 |
X |
0B BF |
10111 111000 01011 23 56 11*2 즉 오후 11시 56분 22초입니다. |
3A 4D |
0100110 1001 11010 (1980년이 기준점) 1980+38 9 26 즉 2018년 9월 26일 입니다. |
3A 4D |
접근 날짜 |
00 00 |
상위 클러스터 |
1A BF |
수정 시간 |
3A 4D |
수정 날짜 |
08 00 |
하위 클러스터 |
1C 00 00 00 |
29Byte 크기 |
날짜 계산법과 시간 계산법은 이진수로 바꿔서 구분합니다.
실제 gsk.txt파일이 있는곳으로 이동해보겠습니다.
하위 클러스터를 참고하여 하위 클러스터 -2 *8 = 값 + RootDirectory = 실제 파일위치 입니다.
계산해보면 8 - 2 * 8 = 48 + 8320 = 8368섹터입니다.
실제로 어떤 데이터가 존재하며 TXT는 시그니처가 없기 때문에 위의 데이터를 복구해보겠습니다.
.txt의 확장자로 파일을 복구해보면 실제 gsk.txt파일의 내용을 복구해낼수있습니다.
'보안 > Digital forensic' 카테고리의 다른 글
NTFS 파일 시스템 (0) | 2018.10.09 |
---|---|
FAT32 파일 및 폴더 hex editor로 만들기 (0) | 2018.09.27 |
감염된 디스크 복구 (3.20 전산대란) (2) | 2018.07.08 |
우리은행 가짜 보안로그 프로그램 디스크 복구 (0) | 2018.07.08 |
Golden_Eye 랜섬웨어 디스크 복구 (2) | 2018.07.08 |