보안을 그리다, 훈이

[Forensics] ZIP File Format 본문

Security/Digital Forensics

[Forensics] ZIP File Format

HooNeee 2021. 12. 10. 20:17

 

ZIP File Format

 

ZIP File Format에 대해 알아봅시다.

 

ZIP File Format

 

압축 파일은 일반적으로 크게 Local File HeaderCentral DirectoryEnd of central directory record 총 3개의 파일 구조로 이루어져 있습니다.

 

Local File Header는 압축 파일에 대한 기본 정보들이 포함되는 공간으로, 압축 전후 파일 크기, 파일 수정 시간, CRC-32 Checksum, 파일 이름의 지역 포인터, 압축 해제시 필요한 아카이브 버전 등이 포함되어 있습니다.

 

File Name은 압축된 파일 이름 형식에 대한 임의의 길이와 byte 순서를 나타내며, 파일 이름의 길이는 65536 문자를 초과할 수 없습니다.

 

File Data는 임의의 길이로 구성된 byte 배열 형태로 압축된 파일 컨텐츠입니다. 파일이 비어 있거나 디렉토리를 포함하는 경우, 이 배열은 용되지 않지만 그 다음 Local File Header 제목은 해당 파일이나 디렉토리를 설명합니다.

 

Central Directory는 Local File Header의 확장된 데이터 뷰를 제공하며, Local File Header에 포함된 데이터를 더하여 파일 속성, 구조에 대한 local 기준을 가집니다.

 

End of central directory record는 모든 아카이브의 싱글 템플릿으로 제공하며 아카이브의 종료를 작성합니다. 포함된 데이터에서 가장 중요한 데이터는 Central Directory 블록의 시작과 local 참조의 시작, 아카이브 레코드들의 숫자입니다.

 

(Windows 사용하시는 분들은 ZIP File Format 템플릿을 지원하는 010 Editor 툴을 통해 좀 더 가시적으로 압축파일을 분석하실 수 있습니다.)

 

이제 Local File Header, Central Directory, End of central directory record 각각의 구조를 확인해 봅시다.

 

 

Local File Header 구조

 

Local File Header

 

필드
크기
설명
Signature
4 바이트
시그니처 (0x04034b50, 리틀엔 - 50 4B 03 04)
Version
2 바이트
압축 해제 시 필요한 버전
Flags
2 바이트
바이트 식별자
 
Bit 00    : 암호화된 파일
Bit 01    : 압축 옵션
Bit 02    : 압축 옵션
Bit 03    : 데이터 기술자(data descriptor)
Bit 04    : 강화된 디플레이션(deflation)
Bit 05    : 압축된 패치 데이터
Bit 06    : 강력한 암호화
Bit 07-10 : 사용하지 않음
Bit 11    : 언어 인코딩
Bit 12    : 예약
Bit 13    : 헤더값을 마스크
Bit 14-15 : 예약
Compression method
2 바이트
압축 유형 선택 (보통 0x08 Deflated 사용함)
 
00    : 더 이상 압축하지 않음
01    : 수축(shrunk)
02    : 1 압축 요소로 감소
03    : 2 압축 요소로 감소
04    : 3 압축 요소로 감소
05    : 4 압축 요소로 감소
06    : 파열(imploded)
07    : 예약
08    : 수축(deflated)
09    : 강화된 수축(enhanced deflated)
10    : PKWare DCL 파열(imploded)
11    : 예약
12    : BZIP2 압축
13    : 예약
14    : LZMA
15-17 : 예약
18    : IBM TERSE 압축
19    : IBM LZ77 z
98    : PPMd version I, Rev 1
File modification time
2 바이트
마지막으로 파일 수정 시간
Bits 00-04 : seconds divided by 2
Bits 05-10 : 분
Bits 11-15 : 시간
File modification date
2 바이트
마지막으로 파일 수정 날짜
Bits 00-04 : 날
Bits 05-08 : 월
Bits 09-15 : years from 1980
Crc-32 checksum
4 바이트
파일 내용의 오류 체크
이 필드가 작성되지 않을 경우 압축 프로그램은 손상된 파일로 간주하여 압축해제를 거부함.
Compressed size
4 바이트
압축된 데이터의 바이트 크기
Uncompressed size
4 바이트
원본 데이터의 바이트 크기
File name length
2 바이트
파일 이름의 길이
Extra field length
2 바이트
추가 예약 필드로 현재 사용하지 않음.
File name
가변 크기
상대 경로를 포함하는 파일의 이름
Extra field
가변 크기
추가 정보를 저장하는 데 사용됨.
이 필드는 헤더와 데이터 쌍의 순서로 구성됨.
여기서 헤더는 2 바이트 식별자와 2 바이트 데이터 사이즈 필드를 갖음.

 

 

Central Directory 구조

 

Central Directory

 

필드
크기
설명
Signature
4 바이트
시그니처 (0x02014b50, 리틀엔 - 50 4B 01 02)
Version
2 바이트
압축 생성 버전
 
상위 바이트 :
00 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems)
01 - Amiga
02 - OpenVMS
03 - UNIX
04 - VM/CMS
05 - Atari ST
06 - OS/2 H.P.F.S.
07 - Macintosh
08 - Z-System
09 - CP/M
10 - Windows NTFS
11 - MVS (OS/390 - Z/OS)
12 - VSE
13 - Acorn Risc
14 - VFAT
15 - alternate MVS
16 - BeOS
17 - Tandem
18 - OS/400
19 - OS/X (Darwin)
20 - 255: unused
 
하위 바이트 :
zip 사양 버전
Vers. needed
2 바이트
압축 해제 시 필요한 버전
Flags
2 바이트
바이트 식별자
 
Bit 00    : 암호화된 파일
Bit 01    : 압축 옵션
Bit 02    : 압축 옵션
Bit 03    : 데이터 기술자(data descriptor)
Bit 04    : 강화된 디플레이션(deflation)
Bit 05    : 압축된 패치 데이터
Bit 06    : 강력한 암호화
Bit 07-10 : 사용하지 않음
Bit 11    : 언어 인코딩
Bit 12    : 예약
Bit 13    : 헤더값을 마스크
Bit 14-15 : 예약
Compression method
2 바이트
압축 유형 선택 (보통 0x08 Deflated 사용함)
 
00    : 더 이상 압축하지 않음
01    : 수축(shrunk)
02    : 1 압축 요소로 감소
03    : 2 압축 요소로 감소
04    : 3 압축 요소로 감소
05    : 4 압축 요소로 감소
06    : 파열(imploded)
07    : 예약
08    : 수축(deflated)
09    : 강화된 수축(enhanced deflated)
10    : PKWare DCL 파열(imploded)
11    : 예약
12    : BZIP2 압축
13    : 예약
14    : LZMA
15-17 : 예약
18    : IBM TERSE 압축
19    : IBM LZ77 z
98    : PPMd version I, Rev 1
File modification time
2 바이트
마지막으로 파일 수정 시간
Bits 00-04 : seconds divided by 2
Bits 05-10 : 분
Bits 11-15 : 시간
File modification data
2 바이트
마지막으로 파일 수정 날짜
Bits 00-04 : 날
Bits 05-08 : 월
Bits 09-15 : years from 1980
Crc-32 checksum
4 바이트
파일 내용의 오류 체크
이 필드가 작성되지 않을 경우 압축 프로그램은 손상된 파일로 간주하여 압축해제를 거부함.
Compressed size
4 바이트
압축된 데이터의 바이트 크기
Uncompressed size
4 바이트
원본 데이터의 바이트 크기
File name length
2 바이트
파일 이름의 길이
Extra field length
2 바이트
추가 예약 필드로 현재 사용하지 않음.
File comm. len
2 바이트
파일 코멘트 길이
Disk # start
2 바이트
디스크의 수 (거의 항상 0 임)
Internal attr.
2 바이트
내부 파일 속성
External attr.
4 바이트
확장 파일 속성 (호스트 시스템에 의존적임)
Offset of local header
4 바이트
Local File Header 구조의 시작 주소
File name
가변 길이
상대 경로를 포함하는 파일의 이름
Extra field
가변 길이
추가 정보를 저장하는 데 사용됨.
이 필드는 헤더와 데이터 쌍의 순서로 구성됨.
여기서 헤더는 2 바이트 식별자와 2 바이트 데이터 사이즈 필드를 갖음.
File comment
가변 길이
파일 코멘트

 

 

End of central directory record 구조

 

End of central directory record

 

필드
크기
설명
Signature
4 바이트
시그니처 (0x06054b50, 리틀엔 - 50 4B 05 06)
Disk Number
2 바이트
디스크 갯수 (Central Directory 레코드의 종료를 포함)
Disk # w/cd
2 바이트
Central Directory 가 시작되는 디스크 번호
Disk entries
2 바이트
Central Directory 에 있는 항목의 총 수
(파일과 디렉토리 수)
Total entries
2 바이트
모든 항목의 총 수
(파일과 디렉토리 수)
Central directory size
4 바이트
Central Directory 의 바이트 크기
Offset of cd wrt to starting disk
4 바이트
Central Directory 가 시작되는 오프셋 주소
Comment len
2 바이트
코멘트 필드의 길이
ZIP file comment
가변 길이
ZIP 파일 코멘트

 

 

[참고]

https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html

https://koromoon.blogspot.com/2020/02/zip-file-format.html

 

 

Comments