우리는 grayD의 49개 음영을 가지고 있습니다. #000000~#F5F5F5 중 음영이 하나 없어졌습니다. 없어진 음영의 16진수 값을 찾으십시오. 파운드 기호가 표시됩니다.
Hint :우리는 어떤 색을 어떻게 설명할 수 있나요?
딱 봐도 어렵게 생겨먹었다 ;
49개 음영을 가지고 있는데, #000000~#F5F5F5 중 하나가 없어졌다. 없어진 음영의 16진수 값을 찾는 것. 파운드 기호가 표시됨. 우리는 어떤 색을 어떻게 설명할 수 있나?
음영이 뭐냐? 한마디로 그림자..를 의미한다.
shades.png 파일을 열어보면
이런.. 지지직(?)스러운 사진이 나온다.
hint가 어떤색을 어떻게 설명할 수 있냐고.. 하는데 아무래도 또 PIL을 써서 직접 사용된 색깔을 확인해야 할 것 같다. 코딩을 못해서 그동안 몇 문제를 그냥 건너뛰었는데 이번엔 write up도 할 겸 그냥 직접 따라서 문제를 풀어봤다.
참고로 PIL은 Python Imaging Library(PIL)의 줄임말인데, 간단하게 이미지 파일을 분석하고 처리하는 라이브러리라고 생각하면 된다. 막.. 이미지에 텍스트도 추가할 수 있고 밝기 조절 같은 보정 기능도 있고, 픽셀 단위로 조작도 가능함. 포렌식 문제 풀 때 은근 자주 나와서 나도 계속 방치해두고 있었는데.. 오늘은 좀.. 공부해보자..
from PIL import Image: PIL 라이브러리를 사용한다고 명시해줌.
img = Image.open("shades.png"): Image.open 함수라고해서 (" ") 안에 명시된 파일을 읽어오는 역할을 한다. 이 함수를 일일이 쓰기가 귀찮으니 img라는 변수에 넣어서 사용하는 것이다. (이걸 만약에 보고 싶으면 image.open 함수를 써 주면 됨)
width, height = img.size 가로, 세로 크기를 이미지 size로 표현하고
array=[] 배열을 하나 만들어준다
for h ~ : getpixel은 RGB 값을 가져와주는 역할을 한다고 한다. (w,h)니까 가로, 세로를 가져와서 pixels 변수에 저장하겠지!
array.append는 append가 추가하는 함수라서 pixels[0]에 값을 추가해주는 거다.
그래서 이걸 print(sorted(list(set(array))))하면 set은 집합, list는 배열, sorted는 정렬된 상태로 변경한 걸 print 해준다는 것.
결과는 이렇게 나올 것이다. 즉 80이 비어있다는 것을 확인할 수 있다. 즉 RGB(80, 80, 80)이 비어있다는 것이다. 808080을 16진수로 바꾸면 50 50 50 (C5490인 줄 알았는데 그냥 80 80 80을 16진수로 바꾸는 거였음)
그리고 또 다른 방식으로 풀이하는 방법이 있다고 한다.
바로 imagemagick의 identify 명령어!
identify 명령어의 verbose 옵션을 사용하면 이미지에 대한 디테일한 정보를 모두 출력해준다고 한다.
여기서 조금만 내리면
Histogram이 나타남. 여기에도 보면 80이 비어져있다는 걸 확인할 수 있음!
'CTF, 워게임 문제 풀이 > CTF-d' 카테고리의 다른 글
[Multimedia] 47. flagception 문제풀이 (0) | 2022.01.24 |
---|---|
[Multimedia] 45. mystery1 - mystery2 46. 아나그램(Anagram) 할 사람? 문제풀이 (0) | 2022.01.23 |
[Multimedia] 43. basisSixtyFour 문제풀이 (0) | 2022.01.21 |
[Multimedia] 42. 뱀 문제풀이 (0) | 2022.01.20 |
[Multimedia] 41. Hash 문제풀이 (0) | 2022.01.19 |
댓글