SharkyCTF의 포렌식 첫번째 문제
문제 설명을 읽어보면 루피가 자기 사진을 가지고 놀았는데
그 뒤로 사진 파일이 열리지 않는다고 도와달라 한다.
여기서 루피는 원피스에 나오는 그 루피가 맞다.
주어지는 문제파일은 7uffy.png 파일이다.
7uffy.png 파일을 열어보면
사진파일이 깨진듯 '이 파일 형식은 지원되지 않는 것 같습니다.' 라는
문구가 뜬다.
문제를 풀기전 PNG 파일의 구조를 알아보자.
모든 PNG 파일은 89 50 4E 47 0D 0A 1A 0A 로 시작한다.
이런걸 파일 시그니처 라고 하는데
아무 PNG 파일이나 골라서 HxD 프로그램으로 열어보면
이렇게 파일의 맨 앞에 89 50 4E 47 0D 0A 1A 라고 적혀있는것을 볼 수 있다.
이걸 디코딩한 값이 ‰PNG 이다.
모든 PNG 파일은 이렇게 시작한다.
파일 시그니처 뒤에오는 PNG파일 구조를 살펴보면
Chunk라는 그룹으로 이미지 데이터를 저장하고 있다.
Chunk 는 크게 세 가지 정도로 나눌 수 있는데
- IHDR : 이미지 헤더 정보
- IDAT : 이미지 데이터 정보
- IEND : 아미지 트레일러 정보(PNG 파일 끝)
이렇게 세 가지로 구분된다.
(물론 부가적인 정보를 저장하는 Chunk가 더 있다.)
윈도우의 캡쳐도구를 이용해 작은 크기의 PNG 파일을 하나 생성해보면
구조를 확인할 수 있다.
맨 먼저 ‰PNG 파일 시그니처가 오고
그다음 IHDR 청크에서 헤더정보를 저장하는것이 보인다.
그다음 IDAT 에서 실제 이미지의 데이터를 저장하고,
마지막으로 IEND 청크가 와서 파일이 끝났음을 알려준다.
PNG 구조를 분석해주는 Tweakpng 라는 도구가 있다.
이 도구를 이용해서 7uffy.png 파일의 구조를 살펴본다.
구조를 봤더니
IHDR과 IEND 청크는 보이는데
IDAT 청크는 온데간데 없고 EASY 라는 이상한 청크가 4개 있는것이 보인다.
당연한거지만 PNG 파일에 EASY라는 청크는 없다.
HxD 도구로 7uffy.png 파일을 열어서
바꾸기 기능을 이용해 EASY를 모두 IDAT로 바꿔준다.
바꾸고 나서 다시 7uffy.png 파일을 열어보면
이렇게 루피가 플래그를 알려준다.
'CTF > 포렌식' 카테고리의 다른 글
[SharkyCTF] Pain in the ass - 포렌식 / Wireshark / Blind SQL injection (47) | 2022.08.10 |
---|---|
[SharkyCTF] Basic LSB - 포렌식 / 스테가노그래피 / Zsteg (40) | 2022.08.07 |
[TigerKingCTF] Tom Nook - Internet traffic - Part II - 포렌식 / John the Ripper (43) | 2022.07.31 |
[TenableCTF] The One with a Lot of Cats - 포렌식 / FTK Imager (38) | 2022.07.16 |
[TenableCTF] Top Secret - 포렌식 / PDF / Strings / Base64 (67) | 2022.07.12 |