-
2팀_장지은_Write_Ups (HackCTF_Magic PNG)2021/Write-Ups 2022. 1. 12. 23:46
HackCTF의 [Forensics파트] 'Magic PNG'를 풀어보겠습니다.
첨부된 'MP_1.zip' 파일에는 'MP_1.PNG' 파일이 들어있는데, 열어보니 다음과 같았습니다.
파일 형식이 지원되지 않는다고 하네요. Hxd 프로그램에 넣어 봅니다.
헤더가 잘못된 걸 알 수 있습니다.
저번 게시글을 참고해볼까요?
PNG의 헤더는 89 50 4E 47 0D 0A 1A 0A 입니다.
파일의 헤더는 89 50 4E 47 2E 0A 2E 0A 로 되어있네요.
푸터도 다른가 확인해봤습니다.
다행히도 푸터는 정상적이네요. 헤더만 변경해서 저장해볼까요?
온전하지 않아보입니다. 여기서부터는 검색의 도움을 받았습니다.
/PNG 파일 구조의 이해
PNG 파일 구조 = 파일 시그니처 + 다양한 청크들의 집합
- 파일 시그니처 : '이 다음부터 나오는 데이터는 어떤 포맷(형식)을 따른다.' 라는 것을 알려준다. (8B)
- 청크 : 공통된 데이터를 가지고 있는 데이터들의 집합
- 청크의 형식(구성)
-> Length : Chunk Data의 길이 (4B)
-> Chunk Type : 청크의 타입 (like IDHR, ASCII코드로 이루어짐 ) (4B)
-> Chunk Data : 실제 데이터
-> CRC : Cyclic Redundancy Check(순환 중복 검사), 데이터의 오류 확인
- 청크의 종류
-> 중요 청크 : 첫글자가 대문자 (IHDR, IDAT, PLTE, IEND)
-> 보조 청크 : 첫 글자가 소문자
*모든 PNG 파일에는 IHDR 청크와 IDAT 청크 IEND 청크가 들어있다.
[ IHDR ] PNG 파일의 기본 정보를 담고 있는 청크
- "Image Header"
- 기본정보
->가로(Width, 4B)
->세로(Height, 4B)
->비트 깊이(Bit Depth, 한 픽셀이 차지하는 비트의 양, 1B)
->색 타입(Color Type, 색의 유형을 숫자로 나타낸 값, Alpha는 투명도, 1B)
표에 주어지지 않은 상황의 이미지 데이터는 만들 수 없다. 예를 들면 Bit Depth가 4인 truecolor같은 경우는 만들 수 없다. ->압축 메소드(Compression method, 0 (Deflate) 한 가지, 1B)
->필터링 메소드(Filter method, 0 (Adaptive Filtering) 한 가지, 1B)
->인터레이스 메소드(Interlace method, 0 (No interlace), 1 (Adam7 interlace) 두 가지, 1B)
ㄴ웹 페이지 등에 이미지를 표시할 때 이미지 로딩이 완료되기 전 먼저 해상도가 낮은 이미지를 보여주기 위하여 사용
[ IDAT ] 실질적 이미지 데이터가 들어가는 부분
- "Image Data"
- 한 개의 PNG 파일은 여러개의 IDAT 청크를 가질 수 있는데, 이는 데이터를 스트리밍 방식으로 전송하기 위한 것
- 하나의 IDAT 청크가 이미지의 특정 부분을 나타내는 것은 아니기 때문에 모든 IDAT 청크가 있어야만 이미지 디코딩을 정상적으로 할 수 있다
- 원본 데이터가 필터링 메소드와 압축 메소드를 거친 후에 나온 것
- 반대로 압축을 풀고 필터링을 해제하면 원본 데이터를 얻을 수 있다.
[ PLTE ] 팔레트, 즉 색 공간을 표시하는 청크
- IDAT 청크에서 PLET 청크의 색상 번호로 색을 표현
- Color Type 3에서는 색을 표시하기 위해 항상 PLTE 청크가 필요, color type 2또는 6에서는 선택적으로 필요
- bit depth에 관계없이 한 샘플(색상 채널 ex. R, G, B, A) 당 8 비트를 사용
- 팔레트 항목 수는 bit depth로 표현할 수 있는 범위를 초과하지 않는다.
[ IEND ] 이미지의 맨 뒤에 위치하는 청크
- 이미지 파일의 끝을 표시한다.
- 아무 데이터가 없기에 길이는 0
*출처 : https://eece-labs.tistory.com/2?category=794291, https://eece-labs.tistory.com/7?category=794291
PNG파일의 구조에 대해서 알아보았습니다. 실직적인 이미지 데이터가 담긴 곳은 IDAT라는 것을 알 수 있습니다.
Hxd에 IDAT를 검색해볼까요.
한 군데가 IDAT가 소문자로 작성되어있네요.
변경해주고 저장하고 다시 파일을 열어봅시다.
HackCTF{c@n_y0u_$ee_m3?}를 찾을 수 있네요.
정답!
'2021 > Write-Ups' 카테고리의 다른 글
3팀_김소희_Write-Ups (N0Named Wargame-MagicIMAGE/회사 찾기) (0) 2022.01.16 3팀_김기연 write-ups (HackCTF_나는 해귀다) (0) 2022.01.15 1팀 이유진 Write-Ups (Suninatas_17) (0) 2022.01.12 1팀 이유진 Write-Ups (Suninatas_26) (0) 2022.01.12 4팀_박윤진 write-ups (ctf-d_오른쪽 위의 표지판을 읽을 수...) (0) 2022.01.12