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

아직 작성 중입니다.

3.   Local File

1.    Overview

전편에서 ZIP의 전체 구조를 살펴봤다. ZIP파일은 n개의 Local file entry 1개의 Central directory로 구성되어 있다능. Local file entry Local file header File data, Data descriptor로 구성되어 있다고 했따능. 일단 그림을 다시 한번 살펴보자능.


 

그림 4 Local File Entry

 

Local file header는 파일의 메타 데이터를 담고 있고 실제 데이터는 File data에 저장되어 있다. Data descriptor Local file header의 어떤 필드의 값에 의해서 있을 수도 있고 업ㅂ을 수도 있다. 각 섹션들이 어떤 필드들로 구성되어 있고, 각 필드 길이와 의미만 알면 그리 어렵지 않게 ZIP파일을 읽어낼 수 있다. 어떤 ZIP 파일의 local file entry를 통체로 들고 올태니 그걸 반찬삼아 각 섹션들을 분석해 보자능.

 

2.    Local file header

시험삼아 만든 ZIP 파일의 Local file entry 중 하나를 들고 왔다. 동일한 파일을 아래에 링크해 놓을태니 전체를 보고 싶으면 거걸 받아서 HxD 같은 툴을 사용하면 된다능. 일단 눈으로 읽기 쉽게 필드별로 색을 입혀 놓았다.

 

offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  50 4B 03 04 0A 00 00 00 00 00 EA 72 25 3D CB 1A  PK........er%=E.

00000010  49 DD 0B 00 00 00 0B 00 00 00 09 00 00 00 66 69  IY............fi

00000020  6C 65 31 2E 74 78 74 66 69 6C 65 31 0D 0A 74 65  le1.txtfile1..te

00000030  73 74                                            st

 

Local file header local file header signature로 시작한다. local file header signature의 값은 0x04034B50 인데, ZIP파일 포맷은 멀티 바이트 필드들은 little endian으로 저장하게 되어 있다. 따라서 눈으로 읽으면 순서가 거꾸로 뒤집힌 값을 보게 된다능. offset 0x0에서 나오는 50 4B 03 04 signature가 된다. 이런식으로 필드들을 해석하면 된다능. 역시 Local file header의 전체 구조를 살펴보고 이야기를 진행하자. 이제부터는 좀 지루한 내용이 될꺼라능.

 

Field

size

comment

local file header signature

4 bytes

0x04034b50

version needed to extract

2 bytes

 

general purpose bit flag

2 bytes

 

compression method

2 bytes

 

last mod file time

2 bytes

 

last mod file date

2 bytes

 

crc-32

4 bytes

 

compressed size

4 bytes

 

uncompressed size

4 bytes

 

file name length

2 bytes

 

extra filed length

2 bytes

 

file name

variable size

 

extra filed

variable size

 

1 Local file header

필드가 참...빌어도 못 먹을 만큼 많다. compressed size와 같이 직관적으로 의미도 알 수 있고 해석도 가능할 것 같은 것도 있고 general purpose bit flag 처럼 정체 불명인 것도 있다. 파일의 내용만을 복구할 거라면 compression method하고 file name만 가지고도 충분하지만...위에서 설명한 local file header signature를 제외한 12 필드의 의미를 다 살펴보고 넘어가자능.

 

1.     version needed to extract

2.     general purpose bit flag

3.     compression method

4.     last mod file time

5.     last mod file date

6.     crc-32

7.     compressed size

8.     uncompressed size

9.     file name length

10.   extra filed length

11.   file name

12.   extra filed

 

3.    File data

 

4.    Data descriptor

 



 




저작자 표시 비영리 동일 조건 변경 허락

댓글을 달아 주세요