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 |