디시인사이드 갤러리

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

갤러리 본문 영역

Reading ZIP File Format #2, 전체 구조

DMW(125.138) 2010.10.24 02:55:17
조회 395 추천 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/06/17 - -
228150 플갤을 비방하는 글.txt [4] Grand갤로그로 이동합니다. 10.12.30 102 0
228149 c랑 java둘다 배우면 어디다 쓰냐 [2] ()ㅡ()(183.101) 10.12.30 113 0
228148 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 아이팟 2새끼 경쟁붙음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ [1] BTTTS!갤로그로 이동합니다. 10.12.30 55 0
228146 테크트리좀 봐주십쇼 ㅡㅡ !!! [2] Grand갤로그로 이동합니다. 10.12.30 118 0
228145 HCFC는 봅니다 [2] cyluss갤로그로 이동합니다. 10.12.30 39 0
228144 10원 경매 KBS 소비자 고발에 제보했는데 안나오넹 [3] 시불라미갤로그로 이동합니다. 10.12.30 95 0
228143 친구가 약속에 못나오는 이유... [1] 꿀레갤로그로 이동합니다. 10.12.30 71 0
228142 C언어 이런거 어떻게 구현함? [2] C늅늅E(175.199) 10.12.30 95 0
228141 이거 입찰 해야하냐 [1] BTTTS!갤로그로 이동합니다. 10.12.30 58 0
228139 아이팟은 꺼지랑께 [2] BTTTS!갤로그로 이동합니다. 10.12.30 73 0
228138 쇼핑몰합니다만 [4] 쇼show(112.153) 10.12.30 91 0
228137 SKOTLEX는 봅니다 [2] cyluss갤로그로 이동합니다. 10.12.30 94 0
228136 Downloading version check xml file 해결좀 [1] 초보(112.166) 10.12.30 107 0
228135 형들 isdigit 함수안쓰고 이거랑 똑같은 기능하는 코드를 짜야되는데 [4] HCFC갤로그로 이동합니다. 10.12.30 110 0
228134 고승덕 변호사 말이죠..천재일까요??? [1] 비밀(58.77) 10.12.30 138 0
228133 갈수록 기술이 발전하는데.. [17] Finalizer갤로그로 이동합니다. 10.12.30 198 0
228132 심심해서 이메일 보냈더니 오토잇코더갤로그로 이동합니다. 10.12.30 54 0
228131 유리한횽 잠깐만 봐주세요 [5] SKOTLEX갤로그로 이동합니다. 10.12.30 90 0
228130 속보~쥐식빵 자기집에서 직접 제조~ [5] 꿀레갤로그로 이동합니다. 10.12.30 100 0
228129 아 자바에 감격했따....ㅜ.ㅜ [5] 훙어(118.127) 10.12.30 172 0
228127 system("cls"); [4] BTTTS!갤로그로 이동합니다. 10.12.30 107 0
228126 형들 나 어떡하지.. [9] dd(168.131) 10.12.30 98 0
228124 SYSTEM("PAUSE"); [1] BTTTS!갤로그로 이동합니다. 10.12.30 78 0
228123 좀 쓸만한 태크닉 [2] DMW(125.138) 10.12.30 125 0
228122 촉수물만화 [3] C언어짱이다(119.195) 10.12.30 573 0
228121 횽들 isdigit함수 안쓰고 입력한게 숫자임을 출력가능? [4] HCFC갤로그로 이동합니다. 10.12.30 98 0
228120 int 변수의 내용을 char 배열에 넣기?? [7] SKOTLEX갤로그로 이동합니다. 10.12.30 445 0
228119 솦갤갔다왔는데 [2] 꿀레갤로그로 이동합니다. 10.12.30 54 0
228117 이글루 밸리 후보로 프로그래밍 밸리가 생겼는데 [4] prismatic갤로그로 이동합니다. 10.12.30 124 0
228111 자바 vs C/C++ [8] SKOTLEX갤로그로 이동합니다. 10.12.30 305 0
228110 사장:자네 왜 퇴근하나? [3] 꿀레갤로그로 이동합니다. 10.12.30 161 0
228108 요즈음 특정 기술에 심취하여 오로지 그것만 최고라고 주장하는 사람들이 있는데 [6] Rei@디씨갤로그로 이동합니다. 10.12.30 146 0
228107 어디가 오류난거? [15] 11학번(211.176) 10.12.30 185 0
228106 힘든 하루였다능 [5] DMW(125.138) 10.12.30 105 0
228105 9개월짜리 자바 학원인데 어떰? [6] 레디오헤드(124.153) 10.12.30 170 0
228104 오오 HQ9+를 배우는 동지가 또 있었다니 [2] Rei@디씨갤로그로 이동합니다. 10.12.30 93 0
228103 값은 제대로 출력되는데 오류발생해염 ㅠㅠ [14] 11학번(211.176) 10.12.30 98 0
228102 값은 제대로 출력되는대 오류뜨는건 머임? ㅠㅠ [3] 11학번(211.176) 10.12.30 50 0
228101 서버/클라이언트간 서로 자료 주고받기에 대한 질문 [3] SKOTLEX갤로그로 이동합니다. 10.12.30 84 0
228100 안드로이드에 플래쉬 애니메이션을 넣을까하는데 [5] Finalizer갤로그로 이동합니다. 10.12.30 92 0
228099 내가 24시간 눈팅하고 있다고 착각하지마라 [2] 꿀레갤로그로 이동합니다. 10.12.30 65 0
228097 [9] 넉넉한터갤로그로 이동합니다. 10.12.30 116 0
228096 다들 HQ9+ 해요 HQ9+ 쉬워요. [4] BTTTS!갤로그로 이동합니다. 10.12.30 111 0
228095 열강 C는 평판이 좋던데 C++은 왤케 평판이 떨어짐?? [3] ㅇㅇ(125.190) 10.12.30 183 0
228094 나 HQ9+ 언어 마스터함 ㅋ [4] BTTTS!갤로그로 이동합니다. 10.12.30 122 0
228093 프갤성님들 감사해요 [1] Kaev(211.198) 10.12.30 64 0
228092 인터넷강의와 학원의 장단점 ! [2] 질문!(121.172) 10.12.30 171 0
228091 전두환을 찬양하라 !!! [4] ㅇㅇ(58.77) 10.12.30 101 0
228089 자바 관련된걸 다삭제 했는데도 이럽니다 왜이런겁니까? [8] (1.224) 10.12.30 137 0
228088 아 그렇구나 안배우는게 이상하단뜻이였구나; [3] Kaev(211.198) 10.12.30 77 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2