워게임/CTFlearn

[CTFlearn] Exclusive Santa - 포렌식 / HxD / PIL

SecurityMan 2023. 2. 1. 11:00

 

CTFlearn의 예순 세번째 문제

 

PNG 파일을 이용한 포렌식 문제인데

 

난이도가 올라갈수록 PIL 라이브러리를 사용하는 문제 유형이 많이 나오는것 같다.

 

반응형

 

 

문제에서 주어지는 것은 Exclusive_Santa.rar 압축파일이다.

 

 

압축을 풀면 이렇게 1.png, 3.png 파일 두개가 들어있다.

 

2.png 가 없는것을 보니 어딘가에 숨겨져 있는것 같다.

 

 

1.png 파일은 이렇게 생겼다.

 

WINTER IS COMING 이라는 글자가 보이고

 

사진이 뭔가 깨진것 처럼 엄청 복잡한 느낌이다.

 

 

3.png 는 이렇게 생겼는데

 

 

이건 구글에 XOR 이라고 검색하면 바로 나오는 사진이다.

 

XOR 을 두 개의 집합을 사용해 가시적으로 표현한 다이어그램이다.

 

1.png 가 정상적인 사진과 달리 복잡하게 생긴이유가 

 

어떤 사진이랑 XOR 했기 때문이라고 추측했다.

 

 

3.png 파일을 HxD 도구를 이용해 열어본다.

 

파일이 89 50 4E 47 으로 시작하는것을 알 수 있다.

 

 

89 50 4E 47로 시작하는것은 PNG 파일의 특징이다.

 

이런걸 파일 시그니처 라고 한다.

 

 

이번엔 HxD에서 스크롤을 내려 파일의 중간쯤으로 이동해 봤다.

 

PNG 파일은 끝날때 49 45 4E 44 AE 42 60 82 로 끝난다.

 

IEND®B`‚ 이렇게 생긴 문자열이 나오면 PNG 파일은 끝난것이다.

 

그런데 이상한게 위의 문자열이 나왔음에도

 

뒤에 89 50 4E 47 이 한번 더 나오고 있는것이 보인다.

 

이건 PNG 파일 두 개가 겹쳐있는 것이다.

 

 

두번째 89 50 4E 47 부터 끝까지 복사한 다음

 

새로만들기 해서 붙혀넣고 저장하면

 

위와 같은 그림파일을 찾을 수 있다.

 

이게 XOR 되기 전의 원본인듯 하다.

 

XOR 은 역으로 연산하면 원래 값이 돌아오므로

 

1.png와 복원한 사진파일을 XOR 하면

 

원래 복원한 사진파일과 XOR 된 파일을 찾을 수 있을 것이다.

 

Python PIL 라이브러리를 이용해서 풀었다.

PIL은 Python Imaging Library의 약자로

파이썬으로 이미지 처리를 할 수 있도록 해주는 라이브러리이다.

 


pip install image

pip install pillow

두 명령어를 이용해서 다운로드 받아주면 된다.

 

from PIL import Image

img1 = Image.open('1.png').convert('RGB')
img2 = Image.open('2.png').convert('RGB')

xlen = 1280
ylen = 720

new = Image.new('RGB',(xlen,ylen),(0,0,0))

for y in range(ylen):
	for x in range(xlen):
		r1,g1,b1 = img1.getpixel((x,y))
		r2,g2,b2 = img2.getpixel((x,y))
		
		new.putpixel((x,y),(int(r1^r2),int(g1^g2),int(b1^b2)))

new.save('new.png')

 

두개의 이미지를 불러와서

 

맨 앞에 있는 픽셀부터 서로 XOR 한뒤

 

new 라는 새로운 이미지에 그 결과값을 집어넣어주는 코드이다.

 

 

코드를 실행시키면

 

좌우반전된 이미지를 얻을 수 있는데,

 

거기에 플래그가 적혀있다.

반응형