티스토리 뷰
1. ZIP 파일 개요
ZIP 파일은 무손실 데이터 압축 방식을 지원하는 아카이브 파일 형식입니다. 여러 파일과 디렉토리를 하나로 묶고, 크기를 줄여 효율적인 저장과 전송을 가능하게 합니다. ZIP 파일은 주로 Deflate 알고리즘을 사용하며, 다양한 운영 체제에서 널리 사용됩니다.
1.1 주요 특징
- 무손실 압축: 데이터 손실 없이 원본 상태 유지
- 다양한 플랫폼 지원: Windows, macOS, Linux 등
- 확장성: 다양한 파일과 메타데이터 저장 가능
- 빠른 압축 및 해제
2. ZIP 파일의 구조
ZIP 파일은 다음과 같은 주요 구조로 구성됩니다.
- Local File Header: 각 파일의 기본 정보 포함
- Central Directory: 파일 메타데이터와 구조 정보 저장
- End of Central Directory (EOCD): ZIP 파일의 끝을 나타내는 메타데이터
2.1 ZIP 파일 레이아웃
ZIP 파일은 다음과 같은 순서로 데이터를 저장합니다:
| Local File Header | File Data | Central Directory | End of Central Directory |
2.2 ZIP 파일 동작 원리
- End of Central Directory로 이동
- Central Directory 시작 오프셋을 확인
- Central Directory 내 파일 정보와 Local File Header를 통해 파일 데이터 위치 확인
- Local File Header를 읽고 파일 데이터로 접근
3. 주요 구조 상세
3.1 Local File Header
Local File Header는 압축된 각 파일에 대한 정보를 포함합니다.
필드 | 오프셋 | 크기 | 설명 |
Signature | 0x00 | 4바이트 | 0x04034B50 |
Version Needed | 0x04 | 2바이트 | 압축 해제에 필요한 버전 |
Flags | 0x06 | 2바이트 | 일반적인 플래그 |
Compression Method | 0x08 | 2바이트 | 압축 방법 (예: Deflate) |
Modification Time | 0x0A | 2바이트 | 마지막 수정 시간 |
Modification Date | 0x0C | 2바이트 | 마지막 수정 날짜 |
CRC-32 | 0x0E | 4바이트 | 데이터 무결성 확인 값 |
Compressed Size | 0x12 | 4바이트 | 압축된 데이터 크기 |
Uncompressed Size | 0x16 | 4바이트 | 압축되지 않은 원본 크기 |
File Name Length | 0x1A | 2바이트 | 파일 이름 길이 |
Extra Field Length | 0x1C | 2바이트 | 추가 필드 길이 |
File Name | 0x1E | 가변 | 파일 이름 |
Extra Field | 0x1E+N | 가변 | 추가 필드 |
3.2 Central Directory File Header
Central Directory는 ZIP 파일의 확장 정보를 포함하며, Local File Header를 참조합니다. 구조는 다음과 같습니다:
필드 | 오프셋 | 크기 | 설명 |
Signature | 0x00 | 4바이트 | 0x02014B50 |
Version Made By | 0x04 | 2바이트 | 생성된 버전 |
Version Needed | 0x06 | 2바이트 | 압축 해제에 필요한 버전 |
Flags | 0x08 | 2바이트 | 일반적인 플래그 |
Compression Method | 0x0A | 2바이트 | 압축 방법 |
Modification Time | 0x0C | 2바이트 | 마지막 수정 시간 |
Modification Date | 0x0E | 2바이트 | 마지막 수정 날짜 |
CRC-32 | 0x10 | 4바이트 | 데이터 무결성 확인 값 |
Compressed Size | 0x14 | 4바이트 | 압축된 데이터 크기 |
Uncompressed Size | 0x18 | 4바이트 | 압축되지 않은 원본 크기 |
File Name Length | 0x1C | 2바이트 | 파일 이름 길이 |
Extra Field Length | 0x1E | 2바이트 | 추가 필드 길이 |
File Comment Length | 0x20 | 2바이트 | 파일 주석 길이 |
Disk Number | 0x22 | 2바이트 | 파일이 위치한 디스크 번호 |
Internal Attributes | 0x24 | 2바이트 | 내부 속성 |
External Attributes | 0x26 | 4바이트 | 외부 속성 |
Local Header Offset | 0x2A | 4바이트 | Local Header 오프셋 |
File Name | 0x2E | 가변 | 파일 이름 |
Extra Field | 0x2E+N | 가변 | 추가 필드 |
File Comment | 0x2E+N+M | 가변 | 파일 주석 |
3.3 End of Central Directory
EOCD는 ZIP 파일의 끝을 나타내며, Central Directory 정보를 요약합니다.
필드 | 오프셋 | 크기 | 설명 |
Signature | 0x00 | 4바이트 | 0x06054B50 |
Disk Number | 0x04 | 2바이트 | 현재 디스크 번호 |
Central Directory Disk | 0x06 | 2바이트 | Central Directory 시작 디스크 |
Disk Entries | 0x08 | 2바이트 | 현재 디스크의 엔트리 개수 |
Total Entries | 0x0A | 2바이트 | 전체 엔트리 개수 |
Central Directory Size | 0x0C | 4바이트 | Central Directory 크기 |
Offset of Central Dir | 0x10 | 4바이트 | Central Directory 시작 오프셋 |
Comment Length | 0x14 | 2바이트 | ZIP 파일 주석 길이 |
Comment | 0x16 | 가변 | ZIP 파일 주석 |
4. 압축 및 플래그 상세
4.1 압축 방식
ZIP 파일은 다양한 압축 방식을 지원하며, 대표적으로 다음과 같은 값이 사용됩니다:
값 | 압축 방식 |
0x00 | 압축 없음 |
0x08 | Deflate (가장 많이 사용) |
0x0C | BZIP2 |
0x0E | LZMA |
4.2 플래그
플래그 값은 각 비트의 상태에 따라 다양한 설정을 나타냅니다:
비트 | 설명 |
0 | 암호화 여부 |
1-2 | 압축 옵션 |
3 | 데이터 디스크립터 여부 |
11 | 언어 인코딩 |
'Forensic > File Structure' 카테고리의 다른 글
코덱 - H.264, H.265 (0) | 2025.03.11 |
---|---|
MP4 File format Structure (0) | 2025.03.10 |
AVI File format Structure (0) | 2025.03.10 |
PNG 파일 구조 (0) | 2025.01.27 |