wargame.kr의 13번째 문제인 img recovery다.
PNG 이미지 파일을 복구하라고 하는데 이게 정말 PNG 파일인지 의심해보라는 힌트가 나와 있다. 파일에 다른 데이터를 숨기는 스테가노그라피 문제는 아니고 포렌식이라고 하는데 포렌식은 경험이 없지만 일단 Start 버튼을 눌러 문제를 확인해보자.
들어가자마자 눈아픈 문양들과 함께 코드를 찾으라는 메시지와 입력폼 하나가 주어진다. HTML 코드에서는 별로 얻을 정보가 없고 이 배경 이미지를 이루고 있는 pattern.png라는 파일을 찾을 수 있었는데 아마 이 파일이 분석 대상인 것 같다.
이 파일은 언뜻 보기에는 그냥 별볼일 없는 파일처럼 보이는데 어떤 비밀이 숨겨져 있는걸까? 무슨 암호 같기도 하고 일정한 패턴이 있는것 같기도 한데 일단 포렌식 문제라고 했으니 이미지 포렌식 관련 툴을 검색해봤다.
위와 같은 FotoForensics라는 곳에 이미지 파일을 올리고 분석해보았더니 다음과 같은 메타데이터를 확인할 수 있었는데 파일 형식이 뭔가 다른것을 볼 수 있었다.
왼쪽은 현재 분석하고 있는 pattern.png이며 오른쪽은 다른 png 이미지 파일인데 File Type이 APNG와 PNG로 다르다. 그렇다면 pattern.png의 APNG는 무엇을 의미할까? 검색 결과 이는 Animated Portable Network Graphics로 애니메이션이 구현된 이미지 파일이다.
위키피디아의 정보에 따르면 이 파일의 첫 애니메이션 프레임은 일반적인 PNG 스트림으로 저장되기 때문에 이 APNG를 해석할 수 없는 다른 미디어 뷰어들도 이를 읽을 수 있다고 한다. 즉 우리가 일반적으로 보고 있는 이 PNG파일은 이 APNG 파일이 가진 첫번째 애니메이션 이미지라는 것인데 그렇다면 나머지 애니메이션 이미지는 어떻게 찾을 수 있을까? 이는 메타데이터의 Software 항목을 확인해서 알아낼 수 있었다.
pattern.png는 Japng r119라는 프로그램으로 작성되었으며 일반 png 이미지 파일은 Adobe Photoshop 22.0으로 작성되었다는 것을 확인할 수 있었다. 이처럼 해당 이미지가 어떤 프로그램을 이용하여 만들어졌는지 정보를 확인할 수 있었기 때문에 이 Japng r119 소프트웨어를 다운받아서 이 이미지 파일을 열어서 애니메이션을 확인해보기로 했다.
소프트웨어 이름은 Japng, 즉 Java APNG였으며 r119는 버전명인듯 하다. r119 editor를 다운받아서 실행시켜서 아까 pattern.png 이미지를 열어보면 다음과 같은 화면을 볼 수 있다.
우리가 보고 있는 이미지는 1번 이미지였으며 숨겨진 0번 이미지를 확인할 수 있었다. 아마 Skip first frame 옵션 때문에 0번 이미지가 스킵되고 1번 이미지가 표시되는 것 같은데 그렇다면 이 이미지들을 가지고 뭘 할 수 있을까? 제일먼저 생각나는 것은 QR코드였다. 정사각형 프레임에 정사각형 검은색 점들이 이곳저곳 흩뿌려져 있는 모습이 왠지 이를 연상시켰기 때문에 두 이미지를 따로 뽑아서 합쳐보았다. 각각 마우스 오른쪽 클릭을 하면 Export할 수 있다.
이 두 이미지를 간단하게 합치기 위해서 마이크로소프트 그림판에서 '선택 영역 투명하게' 옵션을 적용했다. 그러면 하얀색 부분이 투명도를 가져서 다른 이미지 위에 겹칠 수 있는데 두 프레임을 겹쳐보니 역시 오른쪽 그림처럼 QR코드가 생성되었다. 이를 지난번 bughela - QR CODE PUZZLE 문제에서 사용했던 QR코드 디코딩 사이트에 업로드하여 해석해보면 다음과 같이 숨겨진 텍스트를 얻을 수 있었다.
이를 문제 사이트에 제출하면 다음처럼 플래그를 얻을 수 있었다.
이번 문제는 이미지에 숨겨진 텍스트를 찾는 문제였지만 그 전에 이 이미지 파일이 우리가 생각하는 이미지 파일이 아닐수도 있다는 교훈을 얻을 수 있었다. 지금이야 간단한 문제였기 때문에 포렌식을 할 때도 온라인 툴로 간단하게 할 수 있었지만 동영상이나 문서 파일같은 포렌식을 할 때는 어떻게 해야될지 고민해볼 수 있는 경험이었다.
'챌린지 > Wargame.kr' 카테고리의 다른 글
bughela - EASY_CrackMe (0) | 2020.12.31 |
---|---|
bughela - php? c? (0) | 2020.12.29 |
bughela - type confusion (0) | 2020.12.27 |
bughela - tmitter (0) | 2020.12.26 |
bughela - md5_compare (0) | 2020.12.22 |