본문 바로가기

Forensics

ZIP 파일 구조

ZIP 파일

- 데이터를 압축, 보관하기 위한 파일 형식

- 하나 혹은 여러 개의 파일들을 크기를 줄여 압축하고 하나로 묶어 저장

- Deflate 알고리즘이 가장 많이 사용되고 지원되는 압축 알고리즘

 

 

 

 

 

ZIP 파일 구조

- Local File Header

- Central Directory

- End of central directory record

 

 

 

 

 

Local File Header

- 압축 파일에 대한 기본 정보들이 포함되어 있음

- 파일 헤더 시그니처: 50 4B 05 06 (4 bytes)

- version: 압축 해제 시 필요한 버전 (2 bytes)

- Flags: 바이트 식별자 (2 bytes)

 

- Compression method: 압축 유형 선택 (보통 0x08 Deflated 사용, 2 bytes)

- File modification: 마지막 파일 수정 시간 (2 bytes)

- File modification date: 마지막 파일 수정 날짜 (2 bytes)

- CRC-32 checksum: 파일 내용의 오류 체크, 이 필트가 작성되지 않으면 압축 해제 거부 (4 bytes)

- Compressed size: 압축된 데이터의 바이트 크기 (4 bytes)

- Uncompressed size: 원본 데이터의 바이트 크기 (4 bytes)

- File name length: 파일 이름의 길이 (2 bytes)

- Extra field length: 추가 예약 필드 (2 bytes)

- File name: 상대 경로를 포함하는 파일의 이름 (가변 크기)

- Extra field: 추가 정보를 저장하는 데 사용 (가변 크기)

 

 

 

 

 

File Name

- 압축된 파일 이름 형식에 대한 임의의 길이와 바이트 순서를 나타냄

 

 

 

 

 

File Data

- 임의의 길이로 구성된 바이트 배열 형태로 압축된 파일 컨텐츠

 

 

 

 

 

Central Directory

- Local File Header의 확장된 데이터 뷰 제공

- 시그니처: 50 4B 01 02 (4 bytes)

- 버전: 압축 생성 버전 (2 bytes)

- Vers. needed: 압축 해제 시 필요한 버전 (2 bytes)

- Flags: 바이트 식별자 (2 bytes)

- Compression method: 압축 유형 선택 (보통 0x08 Deflated 사용, 2 bytes)

- File modification time: 마지막 파일 수정 시간 (2 bytes)

- File modification date: 마지막 파일 수정 날짜 (2 bytes)

- CRC-32 checksum: 파일 내용의 오류 체크 (4 bytes)

- Compressed size: 압축된 데이터의 바이트 크기 (4 bytes)

- Uncompressed size: 원본 데이터의 바이트 크기 (4 bytes)

- File name length: 파일 이름의 길이 (2 bytes)

- Extra field length: 추가 예약 필드로 현재 사용하지 않음 (2 bytes)

- File comment length: 파일 코멘트 길이 (2 bytes)

- Disk # start: 디스크의 수 (거의 항상 0, 2 bytes)

- Internal attr.: 내부 파일 속성 (2 bytes)

- External attr.: 확장 파일 속성 (호스트 시스템에 의존적, 4 bytes)

- Offset of local header: Local File Header 구조의 시작 주소 (4 bytes)

- File name: 상대 경로를 포함하는 파일의 이름 (가변 길이)

- Extra field: 추가 정보를 저장하는 데 사용 (가변 길이)

- File comment: 파일 코멘트 (가변 길이)

 

 

 

 

 

 

End of Central Directory record

- 모든 아카이브의 싱글 템플릿으로 제공하며 아카이브의 종료를 작성

- 시그니처: 50 4B 05 06 (4 bytes)

- Disk Number: 디스크 개수 (2 bytes)

- Disk # w/cd: Central Directory가 시작되는 디스크 번호 (2 bytes)

- Disk entries: Central Directory에 있는 전체 항목의 수 (2 bytes)

- Total entries: 모든 항목의 총 수 (2 bytes)

- Central directory: Central Directory의 바이트 크기 (4 bytes)

- Offset of cd wrt to starting disk: Central Directory가 시작되는 오프셋 주소 (4 bytes)

- Comment length: 코멘트 필드의 길이 (2 bytes)

- ZIP file comment: ZIO 파일 코멘트 (가변 길이)

 

 

 

 

 

엔디안

- 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법

- 빅 엔디안과 리틀 엔디안으로 나눠짐

 

 

 

빅 엔디안

- 낮은 주소에 데이터를 높은 바이트 MSB부터 저장하는 방식

 

 

 

리틀 엔디안

- 낮은 주소에 데이터를 낮은 바이트 LSB부터 저장하는 방식

- 우리가 숫자를 사용하는 방식과 반대로 읽어야 함

 

 

 

 


해당 zip 파일로 파일 분석을 한 번 해보겠다.

스윙 6월 보안 뉴스 총 10장의 이미지를 하나의 압축 파일로 모은 파일

 

 

 

 

 

 

Local File Header

 

 

 

 

Local File Header의 시그니처 50 4B 03 04를 검색하면 총 10개의 검색 결과가 나온다.

 

 

 

 

 

 

헤더 시그니처 50 4B 03 04

 

 

001 이미지

 

 

 

 

 

 

헤더 시그니처 50 4B 03 04

 

 

002 이미지

 

 

 

 

 

 

version needed

 

 

 

 

 

 

Bit flag

00 00

0x00: encrypted file

 

 

 

 

 

Compression method

08 00

0x08: Deflated 방식 사용

.

.

.

 

 

 

 

 

Central Directory

 

 

Central Directory의 시그니처 50 4B 01 02를 검색해보았다.

 

 

총 10개의 검색 결과가 나옴

 

 

 

 

 

 

시그니처

 

 

 

 

 

 

version made

 

 

 

 

 

version needed

 

 

 

 

 

 

Bit Flag

00 00

0x00: encrypted file

.

.

.

 

 

 

 

 

 

End of Central Direcory Record

 

시그니처인 50 4B 05 06을 검색해보았다.

 

검색 결과는 1개

 

End of Central Directory Record를 끝으로 파일이 종료된다.

 

 

 

 

 

이게... 맞는 건가...?

'Forensics' 카테고리의 다른 글

[ctf-d] GrrCON 2015 #2  (0) 2022.08.02
[ctf-d] GrrCON 2015 #1  (0) 2022.08.02
PNG 파일 구조  (0) 2022.07.30
[ctf-d] 이 그림에는 뭔가 좀 수상한...  (0) 2022.07.29
[ctf-d] 저는 당신의 생각을 알고 있습니다.  (0) 2022.07.29