디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

Reading ZIP File Format #2, 전체 구조

DMW(125.138) 2010.10.24 02:55:17
조회 390 추천 0 댓글 3


크리에이티브 커먼즈 라이선스

Creative Commons License



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파일을 분석하려면 어떻게

해야 하는지에 대한 노하우도 조금은 얻을 수 있을꺼라능.....아마도 -_-


=================================================================================

디씨 게시판 너무 불편함 -_-;;

그래도....디씨야 아프지만 말아다오

추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 어떤 상황이 닥쳐도 지갑 절대 안 열 것 같은 스타는? 운영자 24/05/20 - -
220668 c++ 간단한거 질문좀 // tot+=a[i]이게 먼가영 [4] 123(121.167) 10.11.27 106 0
220667 토요일에는 코딩 버닝 [1] 넉넉한터갤로그로 이동합니다. 10.11.27 106 0
220666 블랙프라이데이는 저물고 파리대왕(173.164) 10.11.27 74 0
220665 하드 용량 계산좀 알려주세요ㅜㅜ [2] ㅇㅇ(121.129) 10.11.27 85 0
220664 ITBANK멀티캠퍼스 (C언어, 파헤치기!) [7] 아이티뱅크(211.217) 10.11.27 167 0
220663 어제 Xbox 키넥트 한번 써봤는데... [1] Rei@디씨갤로그로 이동합니다. 10.11.27 163 0
220662 횽아들 6/ -2 하고 싶은데 컴터에 에러나요... [2] ^^(218.52) 10.11.27 54 0
220661 한국어보다 C언어 잘하는 새퀴들아 이것좀 해석해봐라 [9] 카우보이(125.183) 10.11.27 203 0
220659 아이폰이 objective-c 만을 고집하는 이유? [4] ㄴㄷㅇㄹㅇㄴ(222.168) 10.11.27 179 0
220657 자바하라했다. c 붙잡고 같히 침몰당하지 말고 [8] 홍어(219.251) 10.11.27 188 0
220656 이런 날엔 집에서 주구창장 영화 보는게 제 맛 [6] 해일리갤로그로 이동합니다. 10.11.27 116 0
220653 내가 니들 주말 심심하지 않게 해줄깨... rntjr갤로그로 이동합니다. 10.11.27 191 0
220651 김늅늅님 일하신대로 보내주시기 바랍니다. 검토시간이 필요 [5] (220.121) 10.11.27 84 0
220650 내년에 군대 가는 사람? [5] ㅇㅇㅃ갤로그로 이동합니다. 10.11.27 102 0
220649 나도 12지신 시켜주세요 써니덕후갤로그로 이동합니다. 10.11.27 76 0
220647 이 시간에 있는 횽아들은 뭐해? [3] 해일리갤로그로 이동합니다. 10.11.27 76 0
220646 야 근데 아이폰 망할것 같지 않냐? [6] ***(203.93) 10.11.27 186 0
220643 내가 직접 프로그래밍해서 크롬의 기능을 약간 바꾸려면 뭘 공부해야되? [1] ㅈㄷㄱ(203.93) 10.11.27 102 0
220642 컴퓨터로 좋은일 하면 존나 재미없더라. [2] 꼬장왕(124.49) 10.11.27 154 0
220641 숏코드 문제 [13] ㅎㄷ(112.170) 10.11.27 186 0
220638 자냐? 정수 배열이 연속되지 않을때 빈곳 채우는 알고리즘인데 봐봐라 [1] 주방아가씨갤로그로 이동합니다. 10.11.27 130 0
220637 이것좀 한번 봐주세요 형님들.. [6] 시즈갤로그로 이동합니다. 10.11.27 147 0
220636 곰 플레이어 이전에 봤던 영상 목록 어떻게 보나요?ㅠㅠ ㅎ2(211.254) 10.11.27 216 0
220635 아놔 미치겠네 ㅡㅡ 형들 이거좀 도와줘 ㅠㅠ [3] 시즈갤로그로 이동합니다. 10.11.27 134 0
220634 크롬 보면서 생각난 획기적인 아이디어 [2] 홍다(114.199) 10.11.27 143 0
220633 여기는 컴퓨터 범행이나 개인정보 절도법을 물어보는 곳이 아닙니다. [5] 잡초맛튀김(211.202) 10.11.27 116 0
220632 크롬말이야 [12] 홍다(114.199) 10.11.27 149 0
220630 아이패드 예약판매 [1] ㅇㅇㅃ갤로그로 이동합니다. 10.11.27 89 0
220629 집에오는 지하철에서 이름모를 아가씨와 있었던 일 [2] ㅇㅇㅃ갤로그로 이동합니다. 10.11.27 202 0
220628 여자를 멀리 해야 합니다. [1] 군필병신(222.117) 10.11.27 129 0
220627 한빛미디어 책 반값 할인 한마음택배갤로그로 이동합니다. 10.11.27 138 0
220626 샤...샤워를 너무 오래 했나봐 DMW(125.138) 10.11.27 191 0
220624 미안 홍다(114.199) 10.11.27 41 0
220623 이사하고 오랜만에 잉터넷연결대서 글싸지름 고정닉을써주세요갤로그로 이동합니다. 10.11.27 37 0
220622 교복짤 말고 좀 별가사리(122.40) 10.11.27 146 0
220621 안드로이드 개발자 횽들한테 물어볼게 있는데 태블릿(59.15) 10.11.26 72 0
220619 방금 전철에서 이름모를 아가씨와 있었던일 [8] 개쉛기갤로그로 이동합니다. 10.11.26 148 0
220618 한양대 더럽네 [1] elwlwlwk갤로그로 이동합니다. 10.11.26 166 0
220614 야 크롬에서 주소창에 화살표 나오게 못하냐? [1] ewd(203.93) 10.11.26 151 0
220613 님들 하나 간과하고 있는 사실이 있는데 [2] 삼치맛후추(211.202) 10.11.26 78 0
220611 님들은 html5 대중화되도 못쓸지도 몰라 [1] 홍어(58.180) 10.11.26 119 0
220609 HTML5 어떻게 생각하빈까? [1] 한마음택배갤로그로 이동합니다. 10.11.26 129 0
220608 농구 역전해라!!! 홍어(58.180) 10.11.26 26 0
220605 취업힘들면 개발자가 최적인듯 [7] 따식이(180.65) 10.11.26 414 0
220604 프겔의 기준 [4] 분당살람갤로그로 이동합니다. 10.11.26 77 0
220603 성인용 페이스북 만들면 잡혀가냐? [6] 홍어(58.180) 10.11.26 209 0
220602 앞으로 java vs c# 의 승자는 [4] ㅐㅕ(203.93) 10.11.26 184 0
220601 요즘 걔가 안보이네 [4] 홍다(114.199) 10.11.26 99 0
220600 나 컴공과는 아닌데 자바 좀 잼잇는거 같네 [5] HERMES갤로그로 이동합니다. 10.11.26 172 0
220599 프겔은 정화가 좀 필요해 [5] 분당살람갤로그로 이동합니다. 10.11.26 84 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2