워게임/CTFlearn

[CTFlearn] The Adventures of Boris Ivanov Part 2 - 프로그래밍 / PIL

SecurityMan 2023. 8. 5. 11:00

 

CTFlearn에서 제공하는 프로그래밍 카테고리의

 

Hard 난이도 문제

 

지난 Old memories 와 비슷한 문제이다.

(https://hackingstudypad.tistory.com/584)

 

이번 문제 역시도 스테가노그래피와 관련이 있다.

 

반응형

 

문제 설명을 보면

 

중요한 정보가 담긴 종이가 찢어졌는데

 

이걸 복원해야 한다고 한다.

 

원본의 크기는 500*500 이라고 주어진다.

 

 

문제 파일을 열어보면

 

정말 사진을 세절기에 넣은것처럼

 

세로 1픽셀, 가로 500픽셀로

 

500 조각이 나있는 이미지를 볼 수 있다.

 

프로그래밍 카테고리에 있으니

 

프로그래밍 해서 이걸 다 이어붙이라는 의미인듯 하다.

 

이번 문제는 Python PIL 라이브러리를 이용해서 풀었다.

PIL은 Python Imaging Library의 약자로

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


pip install image

pip install pillow

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

 

from PIL import Image

xlen_s = 500

xlen = 500
ylen = 500

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

for i in range(500):
	img_n = str(i) + '.png'
	img = Image.open(img_n).convert('RGB')
	
	for x in range(xlen_s):
		r,g,b = img.getpixel((x,0))
		new.putpixel((x,i),(r,g,b))
            
new.save('result.png')

 

코드는 생각보다 간단하다

 

0.png 부터 499.png 까지 불러와서

 

한줄의 rgb 값을 모두 추출한 뒤

 

500*500의 새로운 이미지에 차례로 채워넣으면 된다.

 

 

그럼 이렇게 원본 이미지를 복원할 수 있다.

 

가운데에 16진수 값이 써있는게 보이는데

 

 

CyberChef(https://gchq.github.io/CyberChef) 에서 디코딩해주면

 

플래그를 찾을 수 있다.

반응형