1. upgradepng1.png

2. Explanation
파일을 실행시켜보았을 때 정상적인 이미지 데이터가 출력되지 않기에 파일을 복구하기 위하여 010 editor를 이용하여 파일의 HEX 데이터를 분석해본다.
파일의 구조를 분석해 보았을 때, PNG format에 해당하는 header signature인 '89 50 4E 47 0D 0A 1A 0A' 값이 있으며 IHDR, IDAT, IEND, PLTE Chunk 등이 있으나 fcTL, acTL, fDAT, tRNS Chunk들도 존재하기에 이 파일은 APNG(Animated PNG) 파일임을 유추해 볼 수 있다. 따라서 이 파일은 APNG format임을 가정하고 파일을 복구한다.

APNG format에서 파일의 데이터로 "DELETE THIS SENTENCE!!!"와 같이 변환되는 문자열이 필요한 경우는 없기에 해당하는 값들을 지운다.

그리고 APNG format임을 가정하고 파일을 복원하므로 JPEG extension의 footer signature 값인 'FF D9'도 지운다.


IEND Chunk뒤에 다른 데이터가 있어도 파일의 데이터가 정상적으로 출력될 수 있으나 IEND Chunk는 출력하고자 하는 파일 데이터의 끝에 있어야 하므로 우선 파일의 끝에 IEND Chunk를 복사하고 지운 뒤에 삽입한다.

여기까지 HEX 데이터를 수정하였을 때 다음과 같은 이미지 데이터가 출력되지만 flag를 찾기 위하여 명확한 데이터를 복원해 본다.
APNG 파일의 구조를 분석해 보았을 때 APNG format에 따른 Chunk들의 위치가 알맞게 있지 않으므로 이를 수정한다. 010 editor에서 Chunk의 Length와 CRC32 값을 활용하여 각 Chunk의 길이를 확인한 뒤에 Chunk에 해당하는 데이터를 복사한 뒤 삭제하고 붙여넣기를 통하여 Chunk를 옮길 수 있으나 이를 더 빠르게 수행하기 위하여 tweakpng를 실행하여 파일을 연다.

위와 같이 위치하여 있는 Chunk들을 APNG format에 맞게 move down, up을 통하여 아래와 같이 옮긴다.
- PLTE Chunk와 tRNS Chunk, tEXT Chunk는 PNG format에 맞게 IHDR Chunk 뒤에 차례로 옮긴다.
- 기본 이미지가 APNG에서 첫 번째 프레임으로 포함될려면 IDAT Chunk 직전에 프레임을 제어하는 fcTL Chunk가 필요하므로 'seq#=0'을 갖는 fcTL Chunk를 IDAT Chunk 앞에 위치시킨다.
- PNG 사양에 정의된 애니메이션을 제어하는 acTL Chunk도 PNG 스트림 내에서 첫 번째 IDAT Chunk 앞에 위치해야 하므로 IDAT Chunk 앞에 위치 시킨다.
- fdAT Chunk는 여기서 두 번째인 후속 프레임으로 추정되기에 마찬가지로 'seq#=1'을 갖는 fcTL Chunk를 fdAT Chunk 직전에 위치시킨다. 여기서 fdAT Chunk는 앞에 시퀸스 번호가 붙는 것을 제외하면 IDAT Chunk와 동일한 구조와 목적을 가지며 각 프레임에는 최소 하나의 fdAT Chunk가 필요하다.

이후에 APNG 파일을 APNG Disassembler를 실행하여 각각의 PNG 파일로 아래와 같이 나누면


위와 같은 4개의 파일들이 생성된다.
여기서 'apngframe2.png' 파일을 실행시켜보면

flag를 찾을 수 있다.
3. Reference
APNG file Specification: https://wiki.mozilla.org/APNG_Specification
위 문제는 23년도에 DEBUG에서 출제한 CTF 문제입니다.
'Digital_forensic > CTF' 카테고리의 다른 글
| [TetCTF 2024] TET & 4N6 Write-up (1) | 2024.05.29 |
|---|---|
| [Dreamhack] Snowing! Write-up (0) | 2024.01.28 |
| [DEBUG] ExpertPNG Write-up (1) | 2024.01.27 |
| [Sooboon] Sob_PNG_Lv1.5 Write-Up (0) | 2024.01.26 |
| [Sooboon] l'm s0o0o0o0o00o00o0o higH!!! Write-up (1) | 2024.01.26 |