WarGame/DigitalForensic with CTF

[DigitalForensic] with CTF 우리는 grayD의 49개 음영을 가지고 있습니다.

자료는 다음과 같다.

으앜 지직거린다. 처음 문제를 풀기위해서 접근한 방식은 어쩌면 흑(#000000)~백(#FFFFFFF)이 아닌 유채색이 존재하지 않을까 였다. 그 의미에서 그러한 pixel을 찾기위해서 다음과 같은 코드를 구성했었다.

from PIL import Image

if __name__=="__main__" :

    im = Image.open("shades.png")

    width,height = im.size

    for x in range(width) :
        for y in range(height) :
            r,g,b = im.getpixel((x,y))
            if(r!=g or g!=b or r!=b) :
                print("x : {0} y : {1}   {2}".format(x,y,str(im.getpixel((x,y)))

그러나 아무것도 출력되지 않았다. pixel의 정보를 불러와보니 모두 5단위라는것을 알 수 있었다. pixel값들을 알기위해서 다음과 같은 코드로 변경했다

from PIL import Image

if __name__=="__main__" :

    im = Image.open("shades.png")

    width,height = im.size

    candlist = list()

    for x in range(width) :
        for y in range(height) :
            r,g,b = im.getpixel((x,y))
            if(r not in candlist) :
                candlist.append(r)

    cand=sorted(candlist)
    
    print(cand)

출력은 다음과 같다.

[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 
50, 55, 60, 65, 70, 75, 85, 90, 95, 
100, 105, 110, 115, 120, 125, 130,
135, 140, 145, 150, 155, 160, 165,
170, 175, 180, 185, 190, 195, 200,
205, 210, 215, 220, 225, 230, 235, 240, 245]

그렇다 80이 없다. 5의 배수인데, 80이 없다. 80을 hex로 바꾸면 \x50이다 사라진 픽셀은 #505050이다. key는 그것이다.