R136A1

[ctf-d] mystery1 - mystery2 :: else 본문

FORENSIC/ctf-d

[ctf-d] mystery1 - mystery2 :: else

r136a1x27 2022. 1. 11. 23:58

mystery1
mystery2

두 파일을 준다.

문제의 설명대로 두 파일을 뺄 수 있는 방법을 찾아보면 될 것같다.

# 풀이1

저번에 풀었던 문제와 같이 imagemagick 을 사용하고자 한다.

공식 문서 중 수학적으로 파일을 계산할 수 있는 Image calculator를 참고하려고 하였으나 

두 이미지를 계산하는 방법은 찾지 못했다

 

# 풀이2

인터넷에 나와있는 풀이는 convert에서 compose 옵션을 사용하는데

https://legacy.imagemagick.org/Usage/

https://legacy.imagemagick.org/Usage/compose/
legacy 페이지에서만 확인할 수 있는 것을 보면

구버전에서 주로 사용했던것 같다

# 풀이2-1: difference

https://legacy.imagemagick.org/Usage/compose/#difference

※ 만약 두 사이즈가 다르면 convert -size [가로]x[세로] 로 크기 한 이미지에 맞추는 과정 필요

convert  {background} {overlay} [{mask}] [-compose {method}] -composite   {result} # 웹 설명서

 

convert [options ...] file [ [options ...] file ...] [options ...] file # help 용례

convert 이미지파일1 [이미지파일2] [options ...] 결과저장할파일명

convert mystery1.png mystery2.png -compose difference difference.png

용례에 따르면 위 옵션으로도 차이가 보여야하는데

-composite -colorspace Gray 옵션을 추가해야만 보인다.

 

convert mystery1.png mystery2.png -compose difference -composite -colorspace Gray difference.png

아주 잘 보면 보인다. 

포토샵으로 살짝 위아래로 늘려주면 더 쉽게 보인다

EASYCTF{PRETTY_PIXEL_MATH}

easyctf{PRETTY_PIXEL_MATH} // 대회명은 소문자로 작성해야 한다. 이런 건 대부분 대회 규칙에 적혀져 있다.

# 풀이2-2: minus

https://legacy.imagemagick.org/Usage/compose/#minus

에서
를 빼면
이 된다

composite mystery1.png -compose minus_dst mystery2.png difference.png

하면 보이긴 하는데 많이 깨져서 보여서 플래그를 유추하기엔 어려웠을 것 같다.

# 풀이3

stegsolve로는 더 명확하게 확인할 수 있다

1. ImageCombiner 기능으로 mystery1과 mystery2 합치기

2. mystery1만 stegsolve에 올리고 Gray bits로 채널을 변경하면 바로 보임 (문제의 의도와는 맞지않음)

 

# 풀이4

Python PIL로도 코드를 짤 수 있을 것 같다.

from PIL import Image

img1 = Image.open("mystery1.png")
img2 = Image.open("mystery2.png")
width, height = img1.size

data = []
image = Image.new('RGB', (width, height))
im = image.load()
for x in range(0, width):
        for y in range(0, height):
            p_img1 = img1.getpixel((x, y))
            p_img2 = img2.getpixel((x, y))
            im[x,y] = (p_img1[0]-p_img2[0], p_img1[1]-p_img2[1], p_img1[2]-p_img2[2])

image_name = "difference.png"
image.save(image_name)

풀이2-2와 같은 결과가 나온 것을 보니 툴이 최고다 싶긴 하고

단순히 픽셀 간의 차이(minus)가 아닌 다른 차이(difference)인 것 같다.

 

Comments