크리에이티브 커먼즈 라이선스
2. Overall Structure of ZIP
1. Overall Structure
앞 쳅터에서 우리는 ZIP 파일 포맷을 하향식으로 살펴본다고 했다. 모르는 사람은 업ㅂ겠지만
하향식 (Top-Down)으로 살펴본다는 말은 최상위 구조를 먼저 파악한 후 디테일한 내용은 나중에
설명하겠다는 말이다. 그래서 이번 쳅터에서 설명할 ZIP 파일 포맷의 전체 구조는 뒤에 오는
내용들을 가늠하게 될 중요한 내용이다. 최상위 레벨에서 바라 보았을 때 ZIP 파일의 구조는
심플하기 짝이 업ㅂ으니 일단 가벼운 맘으로 시작하자능.
ZIP 파일의 전체 구조는 위의 그림처럼 생겼다. 자질구레한 섹션들은 삭제하고 굵직굵직한
섹션만 포함시켰을 때 위와 같은 모습이 된다. 복수의 Local File Entry와 하나의 Central
Directory로 구성되어 있다. 저것만 알아도 ZIP파일의 Hex 덤프를 보고 내용을 어떤 파일들이
압축되어 있는지 내용을 파악할 수 있다.
2. Local File En+try
Local File Entry가 어떻게 생겼는지 구조만 살펴보고 넘어가보자. 자세한 내용들은 다음 쳅터에서
설명하기로 했으니 우리는 그림만 살펴보고 넘어가자.
점선으로 표시한 Data Deor는 Local File Header의 내용에 따라 있을 수도 있고 업ㅂ을 수도
있다. 짐작은 하겠지만 Local File Header에 파일 이름이나 뭐 이런 정보가 저장돼있고 File Data에
실제 파일의 내용이 압축된 상태로 저장돼 있다. Local File은 Local File Header와 File Data의
내용만 멀쩡하다면 전체 ZIP 파일이 완전하지 않더라도 원본 파일로 복원할 수 있다. 우리가 받다
말은 ZIP파일의 내용을 훔쳐볼 수 있는 이유가 바로 이 때문이다.
3. Central Directory
Central Directory는 Local File Entry들의 메타 데이터를 담고 있다. 역시 자세한 내용은 뒤에서
다룰 테니 그림을 먼저 보자.
Central Directory의 File Header는 Local File Entry의 Local File Header와 매우 유사한 데이터를
담고 있다. 데이터가 중복 저장되는 이유는 이렇게 하면 Central Directory만 파싱하면 전체 ZIP
파일의 구조를 한번에 파악할 수 있기 때문이다. Central Directory를 파싱하면 한번에 모든 Local
File의 메타 데이터를 획득할 수 있으니 꽤 중요하다고 할 수 있겠다. 이런 이유로 Central
Directory의 File Header는 Local File Header와의 relative offset도 담고 있어 빠르게 Local File을
찾을 수 있게 해준다. 참고로 실제 압축 파일에 Local File Entry가 담겨 있는 순서와 Central
Directory의 File Header가 담겨 있는 순서가 틀려도 관계 없다.
Digital Signature는 있어도 그만 없어도 그만인 것 같은데 PKWARE의 Application Note에서 정확한
정보를 찾을 수 없었다. 실제로 파일을 압축해보면 Digital Signature가 들어있지 않다. 정확한 정보를
계속 찾고 있으니 찾아 내는 데로 문서에 반영될 꺼라능.
4. miscellaneous
전체 구조를 대충 살펴 봤으니 이제 PKWARE의 Application Note에서 소개해주는 진짜 전체 구조를 살펴보자.
위에서 봤던 구조랑 비슷한데 뭐가 이것저것 더 붙어 있다. 일단 처음 나오는걸 살펴보자능. EFS라고
표시된 섹션들은 Strong Encryption Specification과 관련이 있다. 우리는 Encryption과 관련된
내용은 다루지 않을 거기 때문에 저건 없다고 생각하자.
이름이 Zip64로 시작하는 섹션들은 오리지널 ZIP 포맷의 크기 제한을 없에는 ZIP64 포맷과 관련이 있다.
우리는 이 내용도 다루지 않을 꺼다. 참고로 오리지널 ZIP 포맷의 크기 제한이란 전체 ZIP 파일의
크기와 Local File의 압축된 크기 및 압축이 해제된 크기의 4GB 제한과 전체 Local File Entry의 개수가
65535개로 제한되는 것을 말한다. 아무튼 저 두 섹션들도 없다고 생각하자.
각각의 Central Directory의 File Header는 version needed to extract라는 이름으로 자신의 압축을
해제하기 위해 구현해야 되는 ZIP 파일 포맷의 스펙의 버전을 명시하고 있다. 이걸 보고 위의 두 가지
특징들이 사용되었는지 알 수 있다.
다음 챕터부터 Local File Entry와 Central Directory의 구조를 살펴보면서 리얼 월드에서 돌아다니고
있는 ZIP파일의Hex dump를 분석해볼 꺼라능. 이 과정에서 프로그램으로 ZIP파일을 분석하려면 어떻게
해야 하는지에 대한 노하우도 조금은 얻을 수 있을꺼라능.....아마도 -_-
=================================================================================
디씨 게시판 너무 불편함 -_-;;
그래도....디씨야 아프지만 말아다오
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.