Security/Wargame

[디지털 포렌식] N0Named wargame 입사테스트2 | HxD, TweakPNG, APNG Disassembler 사용

성니 2021. 1. 7. 12:27

/*윈도우 10 환경에서 HxD, TweakPNG, APNG Disassembler 도구를 사용했습니다.*/

/*APNG Disassembler의 경우png를 지원하지 않는 환경에서 옵션이며,

png 파일을 실행하기 위해 칼리 리눅스로 넘어갔습니다.*/

 

아래 링크에서 HxD, tweakpng, APNG Disassembler를 다운받아주세요.

mh-nexus.de/en/downloads.php?product=HxD20

 

Downloads | mh-nexus

Downloads Note: Starting with HxD 2.3, the portable edition is available as separate setup program, and can be run with minimal privileges (no admin rights required). For the portable edition, the setup program writes only into the selected folder (e.g., U

mh-nexus.de

entropymine.com/jason/tweakpng/

 

TweakPNG

TweakPNG TweakPNG is a low-level utility for examining and modifying PNG image files. It supports Windows XP and higher. In order to make much use of it, you will have to be at least somewhat familiar with the internal format of PNG files. For information

entropymine.com

apngdis.sourceforge.net/

 

APNG Disassembler

APNG Disassembler deconstructs APNG file into a sequence of PNG frames. Command line: apngdis anim.png [name] Decoding is implemented by parsing all chunks in the APNG file, remuxing them into a sequence of static PNG images, as shown in the diagram below,

apngdis.sourceforge.net

 

1주차 포렌식 과제 마지막! 입사테스트 2번을 풀어보자!!!!으악!!!

 

우선, task.jpg 파일을 다운받는다.

엄...또시작이네여...엄...

당연히 열리지 않네요^^;;...차분히 HxD를 열어줍니다.ㅎ

혼내주러 가자!

 

 

task.jpg의 파일 헤더 시그니처

이렇게 나오는군...헤더 시그니처가 PNG랑 비슷하게 생겼다...

 

 

task.jpg의 파일 푸터 시그니처

푸터는 이렇게 생겼다. 

 

 

  헤더(header) 푸터(footer)
PNG 89 50 4E 47 0D 0A 1A 0A 49 45 4E 44 AE 42 60 82
JPG FF D8 FF E0 xx xx 4A 46 
(xx에 들어가는 값은 파일마다 다른 듯)
FF D9

 

 

내가 내린 결론은, task.jpg의 파일은 JPG인척~하는 PNG이다. 

 

Decoded Text를 보면 JPG라고 뜨는데, 아무리 봐도 헤더 시그니처가 이상하다.마치 PNG의 헤더에, JPG인척 교묘하게 끼워놓은 것 같다.

 

푸터 또한 그렇다.PNG의 푸터 뒤에, JPG의 푸터인 FF D9를 넣어놨다.

 

그러면 이제 이 파일을 다시 PNG로 되돌려놓자. 그러면 그림이 보이지 않을까?헤더를 PNG 헤더로 수정하고, 푸터는 FF D9를 지워준 후 저장하자.

 

 

슬프게도 이건 PNG로 복구한 task.jpg이다...

PNG로 복구한 task.jpg파일은 이렇다. 자세히 쳐다볼수록 내 얼굴만 보일 뿐...그냥 까만 화면이다.

 

 


APNG에 대해서 알아보자!!!


 


 

APNG

APNG는 Animated Portable Network Graphics의 약자로, 간단하게 말하면 확장된 PNG 파일의 형식이다.

GIF처럼 움직이는 사진이라고 생각하면 된다(전문용어로 움짤).

여러 개의 겹쳐진 프레임을 통해서 애니메이션을 보여준다.

 

 

APNG의 파일 구조

PNG는 PNG 시그니처(헤더)와 청크로 이루어져 있다.

 

▶ PNG 시그니처는 PNG 파일 헤더 시그니처를 의미함

▶ 청크(chunk) : PNG 데이터 스트림의 섹션, 이미지에 대한 정보를 담고 있음

 

 

청크(chunk)

중요 청크(critical chunks)와 보조 청크(ancillary chunks)로 나뉜다.

 

중요 청크(critical chunks) : IHDR, PLTE, IDAT, IEND

→ 최소한의 PNG를 이루기 위해서는 3개의 청크가 필요하다.

     IHDR, 하나 이상의 IDAT, IEND

 

보조 청크(ancillary chunks)

  1) 투명성 정보 : tRNS

  2) 색 공간 정보 : cHRM, qAMA, iCCP, sBIT, sRGB

  3) 텍스트 정보 : iTxt, tEXt, zTXt

  4) 기타 정보 : bKGD, hIST, pHYs, sPLT

  5) 시간 정보 : tIME

 

APNG는 PNG 사양에 정의되는데, 청크 유형이 추가되어 애니메이션을 설명하고 프레임 데이터를 제공한다.

APNG 파일로 인식되기 위해서는 acTL 청크가 IDAT 청크보다 먼저 나타나야 한다.

 

 

위키백과 APNG 구조

APNG의 구조는 이렇게 이루어져야 한다.

위의 예시는 프레임이 3개인 APNG의 구조를 나타낸다.

 

[PNG 시그니처, IHDR, acTL]시작을 알리고,

[fcTL, IDAT] 이 첫번째 프레임이 된다.

 

IDAT 앞에 단일 fcTL 청크가 존재해야 첫번째 프레임이 된다. 그렇지 않으면 애니메이션에 포함되지 않는다.

 

두번째 프레임부터는 IDAT 청크와 동일한 구조를 갖는 fdAT 청크로 인코딩된다.

 

 

그러면, 각 프레임마다 fcTL이 존재하는데 이 순서는 그냥 마구 섞여도 되는 걸까? : NO!

 

 

'청크 시퀀스 번호'를 보고 fcTL의 순서를 맞춰줘야 한다.

 

첫번째 fcTL 청크는 시퀀스 번호 0을 포함해야 하며,

나머지 fcTL 및 fdAT 청크 시퀀스 번호는 중간에 띄우거나 중복되면 안 된다.

 

예를 들어,

시퀀스 번호가 1부터 시작하거나! (1 2 3 4)

시퀀스 번호가 0부터 시작하지만, 0 1 1 2의 경우 중복이 있고!

시퀀스 번호가 0부터 시작하지만, 0 2 5 3의 경우 4가 없고 순서가 뒤죽박죽!

 

위의 경우처럼 시퀀스 번호가 잘못되면 APNG 청크를 오류로 해석한다. 으앙

 

 


 

 

다시 task.jpg 파일로 돌아오자.

tweakpng x86을 실행한 후, task.jpg 파일을 열었다.

 

앞에서 공부한 것처럼 png의 파일 구조에 맞게 청크 순서를 바꿔주자.

순서를 바꾸고 싶은 청크를 클릭한 후, 우클릭 하면 Move up 또는 Move down을 할 수 있다.

 

먼저, IHDR이 첫번째로 오는 건 맞다.

그러나, 첫번째 프레임이 등장하기 전에 IHDR 뒤에 acTL로 끝맺어야 한다.

acTL을 IHDR 뒤로 보내주자.

 

 

acTL을 IHDR 뒤로 보내준 모습

시작 부분은 끝났고, 첫번째 프레임으로 넘어가보자.

 

fcTL-IDAT의 순서가 나와야 한다.

그런데...IDAT이 2개가 있다...으앙

 

어떻게 해야 할까?

IDAT이 2개인 경우, Length가 긴 것부터 먼저 오면 된다.

 

 

수정한 모습

fcTL-IDAT의 순서인데, IDAT은 Length 길이가 긴 순서대로 정렬했다.

 

두번째 프레임부터는 IDAT 청크와 동일한 구조를 갖는 fdAT 청크로 인코딩되기 때문에!

[fcTL-IDAT]은 첫번째 프레임이고, 두번째 프레임부터는 [fcTL-fdAT]의 구조가 된다.

프레임 구조에 맞게 정렬해준 모습이다.

 

 

이제 끝~이 아니라...까먹은 게 없나요?

청크 시퀀스 번호를 확인해야 한다.

번호가 이상하면 청크 오류로 파일이 잘 실행되지 않을 것이다.

 

 

형광펜으로 표시한 부분이 시퀀스 번호를 나타낸다

시퀀스 번호를 확인하자.

IDAT와 fcTL 정렬을 수행하면서 우연의 일치로 시퀀스 번호가 잘 정렬됐다.

처음에 실행했을 때는 시퀀스 번호가 0 2 1 순서였다.

 

 

다 됐으면 해당 프로그램의 File-Check Validity를 이용해서 이 파일이 문제가 있는지 확인해보자!

 

 

문제가 있네요 ㅜ

문제가 있다. tRNS의 순서가 잘못된 것 같다.

tRNS는 IDAT보다 앞에 나와야 한다. 

 

 

tRNS의 자리를 옮겨줬다

tRNS는 IDAT 앞에만 나오면 된다. 나는 IHDR 바로 밑으로 넣었다.

Check Validity를 또 실행하면, 문제가 없다고 나온다.

 

파일을 저장하고, 파일이 저장된 위치로 돌아가서 다시 확인해보자!

 

 

다른이름으로 저장했다

원래는 까맸던 화면이, PNG 청크 오류로 인해서 파일이 깨진 것이었다.

복구하고 나서는 png 파일이 실행되어야 하는데, png 파일은 지원해주지 않는 곳이 많다고 한다.

움직여야 하는데...움직이지 않는다.

 

파일에는 문제가 없으나, png 파일을 지원하지 않기 때문에 그렇다.

이때 디스어셈블러를 사용하면 프레임을 분리해주기 때문에 장면마다 분리되어서 플래그를 볼 수 있다.

 

그러나 이렇게 되면 png를 열심히 복구한 의미가 없기 때문에

칼리 리눅스로 환경을 바꿔서 png를 열어보기로 했다.

 

 

우클릭

칼리 리눅스로 복구한 파일을 보내고, 우클릭-Open With Other Application 클릭하여 Firefox를 선택했다.

 

결과는 성공! 크롬, 익스플로러 등은 png를 지원해주지 않는데 Firefox는 지원해주나보다.

파이어폭스로 들어가서 확인해보면, png 파일은 정상적으로 움직이면서 플래그를 깜빡깜빡 보여준다!!!

 

 


참고 사이트

wiki.mozilla.org/APNG_Specification

 

APNG Specification - MozillaWiki

APNG 1.0 Authors: Stuart Parmenter Vladimir Vukicevic Andrew Smith Overview APNG is an extension of the PNG format, adding support for animated images. It is intended to be a replacement for simple animated images that have traditionally used the GIF forma

wiki.mozilla.org

ko.wikipedia.org/wiki/APNG

 

APNG - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 애니메이션 포터블 네트워크 그래픽스애니메이션 PNG (일부 웹 브라우저에서는 정적인 이미지로 표시됨)파일 확장자.png .apng발표일2008년 8월 4일 (12년 전)(2008-08-

ko.wikipedia.org

www.w3.org/TR/PNG/#4Concepts.FormatChunks

 

Portable Network Graphics (PNG) Specification (Second Edition)

 

www.w3.org

 

728x90