광팔이 보안이야기

[CTF-d](Multimedia) d4rth는 더러운 방법을... (140) 본문

Wargame/CTF-d

[CTF-d](Multimedia) d4rth는 더러운 방법을... (140)

광팔2 2021. 2. 16. 19:46
반응형

파일을 다운로드하면 두 개의 파일 original.png / encrypted.png 이미지 파일 두 개를 얻을 수 있다.

 

일단 파일 이름을 보면 기본 / 암호화 이다.

 

파일은 같은 이미지이며 크기가 1KB 정도의 차이를 보이고 있다.

 

이제 이미지를 비교해주는 Diffimg 툴을 이용해보자.

 

왼쪽 위가 조금 다르다는 것을 알 수 있으며 가로 49 / 세로 7의 크기이다.

 

49x7 작은 네모 안에도 서로 같은 부분이 있고 다른 부분이 있다는 점을 알 수 있다.(자세히 보면 아주 작아 1 픽셀 정도의 크기인 것을 알 수 있다.)

 

이제 픽셀을 문자로 바꾸기 위해 코드로 바꿔보자.(서로 다른 부분은(노랑) 1 / 서로 같은 부분은(검정) 0)

 

from PIL import Image

img1 = Image.open("original.png")
img2 = Image.open("encrypted.png")
str = ''

for x in range(49):
    data = ''
    for y in range(7):
        p_img1 = img1.getpixel((x, y))
        p_img2 = img2.getpixel((x, y))
        if p_img1 == p_img2:
            data += '0'
        else:
            data += '1'
    str += chr(int(data,2))

print(str)

코드는 간단하니 생략한다.

 

SHA256으로 바꿔주면 플래그를 얻을 수 있다.

 

플래그 값 : bdfa42fd05bfa808e9bcb63786ed3983353ac7f6874c37046722ab5944c79f0d

반응형
Comments