브리타니아의 원더랜드에는 적룡과 흑룡이 있다. Master Zero는 흑룡의 지휘관이며 모든 흑룡이 그를 지원한다. 적룡의 지휘관 Amiya는 적룡과 흑룡중에서 적룡이 최고라고 생각한다. 그래서 그는 흑룡들에게 교훈을 가르치려고 한다. 그들은 이 이미지에서 메시지를 인코딩한 후 메시지를 디코딩하도록 요청했다. 메시지를 볼 수 있는가?
헉 맞춘 사람이 별로 없다...!
png 파일은 이렇게 생겼다
일단 저장..
메시지를 인코딩해놨으니 디코딩하라는데..
고민 고민하다가 절대 안 풀릴거 같아서 해답보면서 풀이했다.
역시나 파이썬 코드를 활용해야만 했다.
지금 이 사진에 색깔이 빨간색, 검정색으로 2개가 있으니까 문제에 나와있는대로 예측해보면 검정색은 이진수 0으로, 빨간색은 이진수 1로 변환해서 풀면 될 것 같다. 그 다음에 이진수값을 아스키코드로 변환하면 될듯.
컴공과가 아니라 어쩔 수 없이 코드를 봐야만 했다..
from PIL import Image
img = Image.open("color.png")
data = img.load()
red = (255, 0, 0)
text = ""
binary_lines = []
width, height = img.size
for x in range(height):
binary_line = []
for y in range(width):
pixel = data[y,x]
if pixel == red:
binary_line.append('1')
else:
binary_line.append('0')
binary_lines.append(binary_line)
for x in binary_lines:
text += ''.join([chr(int(''.join(x),2))])
print(text)
여기서 파이썬 PIL이란?
Python Imaging Library은 파이썬 인터프리터에 다양한 이미지 파일 형식을 지원하고 강력한 이미지 처리와 그래픽 기능을 제공하는 자유-오픈 소스 소프트웨어 라이브러리이다. 줄여서 PIL이라고 부른다. 윈도우와 맥 오에스 엑스, 리눅스를 지원한다.
pip install image
pip install pillow를
cmd 창에서 해주었다. 환경변수도 추가해줌.
나는 IDLE(PYTHON 3.9)을 사용 중이라 다시 재시작해서 실행해줬더니 플래그 값이 출력됐다.
from PIL import Image -> image 라이브러리에서 PIL 불러옴
img = Image.open("color.png") -> color.png 파일을 연다는 뜻
여기서 Image는 다 I에 대문자를 붙이나보다.
data = img.load() -> load 함수를 쓰는 이유는 픽셀 값에 접근하기 위해서라고 한다. 그걸 data라는 변수에 저장
red = (255, 0, 0) -> RGB 색상 기준 255, 0, 0은 빨간색을 의미한다.
text = ""
binary_lines = [] -> 내가 파이썬을 잘 몰라서.. []는 아마 리스트를 나타내는게 아닐까?
width, height = img.size -> img.size는 (가로,세로)를 나타냄
for x in range(height):
binary_line = []
for y in range(width):
pixel = data[y,x]
if pixel == red:
binary_line.append('1')
else:
binary_line.append('0')
binary_lines.append(binary_line)
-> for문을 사용함.
for x in range(height)라는게 height가 될 때까지 binary_line에 .. 추가한다는건가?
그리고 for y in range(width)에 pixel=data[y,x] 부분에 x,y 값도 넣어주고..
append는 내가 알기로 추가한다는건데 pixel==red가 나오면 binary_lines.append(binary_line)을 출력하나보다
여기서 pixel == red는 255,0,0이고, data[y,x]가 pixel==red 값을 충족시켜주면 되겠다.
for x in binary_lines:
text += ''.join([chr(int(''.join(x),2))])
-> 근데 이 부분은 무슨 소리인지 전혀 모르겠음..
print(text)
파이썬 공부 좀 해야겠다 ,,^^ 검색해보니까 다들 write up 참고해서 푸신듯.. 어려웠다.
flag 값: 3xXKkFstTUpsG2IFDirE6xDrcAF8DSx4iWxd5f9IQ9T205izN8lS2MQUlsF11gT4TFXHHlLHVHprNTtrh6lURfdUW7Lpuzgu1VKzwb1bg1oq6Ae3GnykkLZZsnze3HVLxHlfCYtzyrcV2Oxp0Gb0Z2ELphR4Oxo7TyvHCuWKWlN8t8KIfHysZK7jBNPu6wRVEUPIwVra
나중에 꼭 다시 풀어보기
'CTF, 워게임 문제 풀이 > CTF-d' 카테고리의 다른 글
[Multimedia] 11. 계속 주시해라! 문제풀이 (0) | 2021.12.28 |
---|---|
[Multimedia] 10. 내 친구는 이것이 특별한... 문제풀이 (0) | 2021.12.27 |
[Multimedia] 8. Three Thieves Threw Trumpets Through Trees 문제풀이 (0) | 2021.12.25 |
[Multimedia] 7. Find Key(moon) 문제풀이 (0) | 2021.12.24 |
[Multimedia] 6. Find Key(butterfly) 문제풀이 (0) | 2021.12.23 |
댓글