디시인사이드 갤러리

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

갤러리 본문 영역

Reading ZIP File Format #2, 전체 구조

DMW(125.138) 2010.10.24 02:55:17
조회 394 추천 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 - -
227948 움.. 왜 나보고 BITTS 라는거야? ㅜㅜ BTTTS는 약자인데 [9] BTTTS!갤로그로 이동합니다. 10.12.30 87 0
227946 나도 멋있어 해주세요! [13] 해일리갤로그로 이동합니다. 10.12.30 94 0
227944 JAVA와 C의 차이점 [12] 꿀레갤로그로 이동합니다. 10.12.30 420 0
227943 서버구축은 리눅스가 좋은가? 그럼 붉은별 OS 써도 된단말임? [7] BTTTS!갤로그로 이동합니다. 10.12.30 161 0
227941 gccsense & gcc-code-assist 좋네요. [4] 우분투짱(174.21) 10.12.30 78 0
227939 갈릴레오 64비트 어디서 받나?? [10] asdf(121.166) 10.12.30 147 0
227938 전쟁나면 대출부터 받아. 잔뜩. [10] BTTTS!갤로그로 이동합니다. 10.12.30 232 0
227937 C를 제일먼저 해야되는이유 [16] 꿀레갤로그로 이동합니다. 10.12.30 221 0
227935 시불라미 // 과연 책이 문제가 맞습니다. [15] BTTTS!갤로그로 이동합니다. 10.12.30 100 0
227934 프겔에 새로운 봇이 등장했네 [10] 분당살람갤로그로 이동합니다. 10.12.30 117 0
227932 책이 리얼 상병신이라 시작을 안했는데 어떤 언어로 시작할까? [13] BTTTS!갤로그로 이동합니다. 10.12.30 133 0
227931 한성컴 포기하고 소니로 돌아섰다 ㅋㅋ [7] .3(124.137) 10.12.30 130 0
227930 아침인데 다들 잠만 주무시는 건가요? [5] BTTTS!갤로그로 이동합니다. 10.12.30 75 0
227927 [네비게이션맵변경] 개럴들아 유동한테 자비점 베풀어줘 [7] ㅇㅇ(112.160) 10.12.30 328 0
227926 와이프 출근시키고 프겔들어오는 여유~~~ 컹 [2] 한강구조견(118.37) 10.12.30 151 0
227925 흔한_Hello_world.c [5] 초밥맛시금치(110.15) 10.12.30 85 0
227924 Emacs 맘에 듭니다. [4] 우분투짱(174.21) 10.12.30 86 0
227922 건드리지 말았어야 했다... [4] 탄맛토(110.15) 10.12.30 105 0
227921 ㅋㅋㅋ 나도 프겔의 고소미 바람 타볼까 ㅋㅋㅋㅋㅋ [8] dㅇ(118.45) 10.12.30 106 0
227920 내친구 너무 불쌍해 엉엉엉 [17] Minryu갤로그로 이동합니다. 10.12.30 261 0
227919 내방진짜 완전춥다 [12] 꿀레갤로그로 이동합니다. 10.12.30 94 0
227918 어휴_이건_뭐_어셈도_아니고.c [9] 경유맛감자(110.15) 10.12.30 125 0
227917 자바스크립트 책 추천좀여 [9] 갤러리갤로그로 이동합니다. 10.12.30 164 0
227916 윈도우 시스템 해킹 [5] 호궁이(124.54) 10.12.30 213 0
227915 이거 제대로 번역한거냐. [10] Finalizer갤로그로 이동합니다. 10.12.30 127 0
227913 html랑 css를 배우고 싶은데 [16] 갤러리갤로그로 이동합니다. 10.12.30 181 0
227912 자바엔 신도 부처도 없어! [5] 자두맛페인트(110.15) 10.12.30 99 0
227910 고슬링 그는 신이다! [6] Finalizer갤로그로 이동합니다. 10.12.30 120 0
227909 ';location.href='http://se.naver.com';// [4] 페이퍼(112.153) 10.12.30 136 0
227908 아직도 동생 숙제중 [1] elwlwlwk갤로그로 이동합니다. 10.12.30 119 0
227907 아아 무료하다 [2] 땡칠도사갤로그로 이동합니다. 10.12.30 81 0
227904 안녕? [2] 김늅늅(175.198) 10.12.30 68 0
227903 디엔비엔푸 재밌따 elwlwlwk갤로그로 이동합니다. 10.12.30 52 0
227901 한참 삽질하다 알아낸 사실 [2] Rei@디씨갤로그로 이동합니다. 10.12.30 140 0
227896 난 옛날에 디씨하다가 끊은사람임 [3] 냠냠(121.130) 10.12.29 89 0
227895 프갤분위기 [9] cyluss갤로그로 이동합니다. 10.12.29 134 0
227894 우크라이나 친구랑 얘기하다가 존나 격하게 공감한 것 [6] 물속의다이아갤로그로 이동합니다. 10.12.29 169 0
227893 rfid 관련해서 조언 바랍니다. [2] 이미(125.128) 10.12.29 70 0
227892 다운안된다고 레알.. [2] Grand(221.162) 10.12.29 82 0
227891 형들, 한글97 바이패스하고 싶은데.. [3] Grand(221.162) 10.12.29 89 0
227890 누가 디시지우개좀 ㅠㅠ [13] Grand(221.162) 10.12.29 158 0
227889 컴퓨터 조립은 대체 어떻게 하는거임? [5] DMW(125.138) 10.12.29 121 0
227888 근데 플갤러들 모든 제품 정품쓰나 ? 어쩔수없나 ? [5] 풋사과1갤로그로 이동합니다. 10.12.29 120 0
227887 드... 드디어 발매되는건가??? 컹? [5] 한강구조견(118.37) 10.12.29 115 0
227886 디씨에 취직하기 vs 백수로 살기 갤러리갤로그로 이동합니다. 10.12.29 67 0
227885 이거 도대체 머임?????????? [11] 초심(110.8) 10.12.29 150 0
227884 안녕하세요 [1] 아주아슬갤로그로 이동합니다. 10.12.29 51 0
227883 c에서 10진수-> 2진수 변환 쉽게 가는법 없음? [5] ㅁㄴㅇㄹ(121.137) 10.12.29 240 0
227882 dc 써주리라는 전갤 순회프로그램 가지신분 있나요? [3] 탁구왕김제빵갤로그로 이동합니다. 10.12.29 70 0
227881 간만에 책을 폈다. 이모군(1.225) 10.12.29 57 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2