해당 사이트에서 문제를 확인하고 파일을 받으니 다음과 같은 파일을 볼 수 있다.
정사각형의 이미지 파일이 반밖에 안와서 깨졌다는 것을 문제에서 강조하고 있음으로 사진의 크기를 원상태로 복구하면 flag를 얻을 수 있겠다고 생각하고 파일 크기를 확인해보았다.
파일 크기가 역시 512x256 으로 세로가 반이 잘린 것을 확인하였고 이를 통해 세로 크기를 복구하면 되겠다 생각하면서 진행했다.
HxD로 확인하였고 png 파일 시그니쳐에 대한 정보들에 대해 찾아보았다.
89 50 4E 47 0D 0A 1A 0A
-> PNG 파일의 파일 시그니쳐 (8바이트) / 실제로 ASCII 값으로도 PNG에 해당하기에 PNG 파일임을 확인할 수 있다.
{
Length (4 bytes),
Chunk Type (4 bytes),
Chunk Data (Length bytes)
CRC (4 bytes)
}
png 파일은 이후 N개의 위와 같은 chunk로 구성되어 있다.
위의 HxD에서는 다음과 같은 부분이 청크로 확인된다. Chunk type -> IHDR, Chuck Data -> 0x200 0x100 (가로 512, 세로 256) 를 확인할 수 있다.
새로 크기를 0x200으로 바꾸고 실행해보면 다음과 같은 사진이 나오며 flag를 획득할 수 있다.
정답을 넘어서 png 파일의 필수 chunk 3가지를 확인해보겠다.
1. IDHR
위의 청크 형식에 해당된다.
{
Length : 00 00 00 0D (4 bytes),
Chunk Type: IHDR(4 bytes),
Chunk Data (13 bytes (모든 IHDR은 Chunk Data가 13바이트이다.)),
{
Width (4 bytes),
Height (4 bytes),
Bit depth (1 byte),
Color Type (1 byte),
Compression method (1 byte),
Filter method (1 byte),
Interlace method (1 byte)
}
CRC (4 bytes)
}
이렇게 나타나며 Chunk Data 내부는 항상 13바이트며 width, height 등등 정보들이 담긴 것을 확인할 수 있다.
- Bit depth -> 한 픽셀이 차지하는 비트의 양을 의미
- Color Type -> 색의 유형
- method -> 압축, 필터 : 0 (한가지) / Interlace : 0, 1 (두가지)
* Interlace 0 : No interlace , 1 : Adam 7 interlace
-> 이미지 표시할 때 로딩 완료 전 낮은 해상도로 보여주는 형식
2. IDAT
{
Length (4 byte),
Chunk Type : IDAT(4 byte),
Chunk Data (Length byte),
{
Filtered, Compressed Data
.
.
}
CRC (4 byte)
}
실제로 이미지 데이터가 들어가는 부분
한개의 png 파일은 여러 IDAT 청크를 가질 수 있음.
IDAT 청크가 있어야 이미지 디코딩이 가능함. -> 전체 이미지를 한번에 압축한 후 여러 IDAT 청크에 나누어 담는 방식
3. IEND
IEND{
Length : 00 00 00 00 (4 byte),
Chunk Type : IEND (4 byte),
Chunk Data (0 byte),
CRC (4 byte)
}
이미지 파일의 끝을 나타내는 청크
참고
https://mineeeee.tistory.com/entry/PNG-%ED%8C%8C%EC%9D%BC%EA%B5%AC%EC%A1%B0
'Forensic' 카테고리의 다른 글
[Forensic] FAT32 / NTFS / exFAT 파일시스템 정리 (2) | 2024.07.25 |
---|---|
[Forensic] zipper (3) | 2024.07.24 |
[Forensic] steganography - Mountains beyond mountains (0) | 2024.07.24 |
[Forensic] zip 파일 구조 정리 (2) | 2024.07.24 |
[Forensic] Steganography 개념 및 툴 정리 (2) | 2024.07.24 |