2024. 3. 28. 18:25ㆍ보안/포렌식
File Signature
파일 시그니처란 , 파일들이 각각 가지고 있는 고유한 포맷으로, 포맷의 기본이 되는 내용이다. 보통 처음에 위치하는 헤더 시그니처이지만, 마지막에 존재하는 푸터 시그니처도 있다.
89 50 4E 47 0D 0A 1A 0A
PNG 파일은 8바이트의 시그니처를 갖는다. ASCII값으로 0x50 = P , 0x4E = N , 0x47 = G 이기도 해서
이 부분을 보고 PNG파일이라고 판단할 수 있다.
Chunk
청크란, 한 개의 묶여진 정보를 의미하는데 어떤 방식으로 묶느냐에 따라 코드를 기억하는 용량과 속도가 빨라진다.
PNG 파일은 N개의 청크로 구성되는데, 구조는 이와 같다.
{
Length (4 byte), # Chunk의 크기
Chunk Type (4 byte), # Chunk의 타입
Chunk Data (length byte), # Chunk 내용
CRC (4byte) # 오류 검사를 위한 값
}
PNG파일에 반드시 포함되어야 하는 세 가지 청크가 있다.
- IHDR
- IDAT
- IEND
IHDR
PNG 파일의 가장 앞에 위치하는 청크로, 이미지의 크기, 필터링 방식, 압축 방식 등을 알려준다.
{
Length : 00 00 00 0D (13 byte),
Chunk Type : IHDR,
Chunk Data ( 13 byte ),
{
Width (4 byte),
Height (4 byte),
Bit depth (1 byte),
Color Type (1 byte),
Compression method (1 byte),
Filter method (1 byte),
Interlace method (1 byte),
}
CRC
}
IHDR 청크의 데이터 길이는 언제나 13byte이다.
- Width , Height
이미지와 폭, 높이를 지정한다. 브라우저나 이미지 뷰어들이 이 값을 바탕으로 데이터를 디코딩하고 출력하기 때문에 이 부분을 조작하여 이미지의 부분을 숨기거나 조작하는 것이 가능하다. - Bit depth, Color Type
이미지의 색상을 어떻게 구성할 것인지 정하고, 하나의 채널이 몇 비트로 구성될 지를 정한다. - Compression method
압축 방식 지정 - Filter method
필터링 방식 지정 - Interlace method
이미지 로딩이 완료되기 전, 먼저 해상도가 낮은 이미지를 보여주기 위해 사용
IDAT
실제로 이미지 데이터가 들어가는 부분. 원본 픽셀 데이터가 필터링과 압축을 거쳐서 저장된다.
인코딩 : 픽셀 데이터 -> Filter -> Compression -> IDAT chunk data
디코딩 : IDAT chunk data -> Decompression -> Unfilter -> Pixel data
하나의 IDAT 청크라도 사라지면 압축된 이미지를 디코딩 할 수 없다. 모든 IDAT 청크가 있어야 한다.
IEND
이미지의 맨 뒤에 존재하는 청크.
{
Length : 00 00 00 00 (0 byte),
Chunk Type : IEND,
Chunk Data (0 byte),
CRC
}
데이터를 담는 목적이 아니기에 길이는 언제나 0으로 고정되있다.
'보안 > 포렌식' 카테고리의 다른 글
FAT32 시스템 구조 (0) | 2024.04.01 |
---|---|
ZIP 파일 구조 (0) | 2024.03.28 |
[Dreamhack] Basic_Forensics_1 write-up (0) | 2024.03.23 |
[Dreamhack] FFFFAAAATTT write-up (0) | 2024.03.23 |
Net-Force Steganography 6번 Write-up (0) | 2024.03.17 |