R136A1
[ctf-d] 우리는 grayD의 49개 음영을 가지고 있습니다. :: else (PIL) 본문
grayD라고 했으니 grayscale(회색조) 범위 내에 있는 것을 유추할 수 있고
포토샵을 꺼내서 개념 확인을 해본다
색상 피커에서 왼쪽에 딱 붙어서 위로 쭉 올라가면 회색조 범위이다
R,G,B값이 모두 동일하게 증가하는 것을 확인할 수 있다.
같은 원리로 272727 a6a6a6 과 같이 색상 코드 또한 깔끔한데,
이는 R 8비트 / G 8비트 / B 8비트씩 사용하게 되어 두 자리씩 같은 16진수가 반복되게 된다
Python PIL을 사용하여 코드를 짜보자.
한 픽셀씩 데이터를 읽어 어떤 값을 가지고 있는지 확인한다.
데이터는 튜플이 반환되고, 이미지의 색채널에 따라 반환 형이 다른데
일반적인 RGB의 경우 (R, G, B)의 튜플로 반환된다
from PIL import Image
img = Image.open("shades.png")
width, height = img.size
data = []
for h in range(height):
for w in range(width):
pixel = img.getpixel((w, h)) # 튜플 (r, g, b)를 반환
data.append(pixel[0])
print(sorted(list(set(data))))
문제에서 제시된 #000000 ~ #F5F5F5 범위 내에서만 관찰하면 될 것 같다 F5는 10진수로 245에 해당한다
[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]
결과를 보면 5씩 증가하고, 80이 비어있음을 알 수 있다.
이를 색상코드로 변환하면 80=0x50이므로 505050이다.
'FORENSIC > ctf-d' 카테고리의 다른 글
[ctf-d] Emma Watson :: else (PIL) (0) | 2022.01.19 |
---|---|
[ctf-d] flagception :: else (PIL) (0) | 2022.01.18 |
[ctf-d] mystery1 - mystery2 :: else (0) | 2022.01.11 |
[ctf-d] d4rth는 더러운 방법을... :: else(PIL) (0) | 2022.01.04 |
[ctf-d] 플래그를 찾아라! :: memory (0) | 2021.11.17 |
Comments