d4rth는 더러운 방법을...

min_fo·2023년 2월 5일
0

original.png 와 encrtpted.png가 있다. 두 그림을 비교하기 위해서는
compare을 사용할것이다. 이를 위해서 imagemagic이 있어야 한다.


오리지널 png

암호화 png

결과값이다.

다른 부분의 범위를 구하면, x의 범위는 0~48 y의 범위는 0~6이다.
x와 y의 범위를 구하는 방식은 다음과 같은 파이썬 코드를 통해서이다.

from PIL import Image

img = Image.open("../../Desktop/original.png")
img1 = Image.open("../../Desktop/encrypted.png")
data = img.load()
data1 = img1.load()
red = (255, 0, 0)

text = ""

binary_lines = []
width, height = img.size

for x in range(height):
    for y in range(width):
        pixel = data[y,x]
        pixel1 = data1[y,x]
        if pixel != pixel1:
            print(x,y)

결과 값을 통해서 범위는 유추가 가능하다.
이에

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)

다음과 같은 코드를 짜서 한줄당 한개의 글자를 가져온다
참고로 int(,2)는 정수을 2진수로 보라는 뜻이다. chr은 아스키코드 변환 함수이다.

위 파이썬 결과는 The flag is SHA256{d1ff1cul7_t0_f0cu5,wa5n't_i7?}이다
이에 d1ff1cul7_t0_f0cu5,wa5n't_i7?를 SHA256로 해쉬값을 구하면 다음과 같다.

하지만 정답은 BDFA42FD05BFA808E9BCB63786ED3983353AC7F6874C37046722AB5944C79F0D 이다. 이유를 찾아보니 sha256은 대문자와 소문자를 구별하지 않는다 결국 대문자로 입력하면 정답으로 처리한다..

정답: BDFA42FD05BFA808E9BCB63786ED3983353AC7F6874C37046722AB5944C79F0D
출제 이유 : 이미지 비교 연습. 궁금한점은 왜 깔끔하게 한줄당 8비트가 아닌 7비트를 입력했는지이다.

profile
포렌식을 공부하는 학생입니다.

0개의 댓글