반응형
출처) http://www.pythonchallenge.com/index.php
http://www.pythonchallenge.com/pc/def/oxygen.html
- 파이썬 챌린지 레벨7 문제!
- 이번문제는 위의 사진 하나 뿐이다.
- 페이지소스에 title에 smarty라고 적혀있다.
- 이미지를 자세히 보니 가운데에 픽셀로 된 회색이 보인다.
- CTF-d에서 비슷한 문제가 있었다. PIL (Python Image Library)로 푸는 문제인 것 같다.
- 이미지 크기를 출력해보니 너비는 629, 높이는 95가 나온다.
- 높이가 가운데에 회색 픽셀이 있는 것으로 보여 높이 47에서 픽셀값을 출력해보았다.
- 몇가지 숫자들이 줄지어 출력되는 것을 볼 수 있다.
- 너비도 629까지가 아니라 끝에서 10번째까지가 반복한다.
- 보통 픽셀을 문자로 바꾸는 문제들이 많다.
- 이번 문제도 출력된 픽셀 값들 중 반복되는 것만 문자열로 바꾸어 출력해보았다.
- smar guy ~~~라고 적혀 있는 것 같다.
- s는 5번 반복되고, m부터 출력된 문자 끝까지는 7번 반복된다.
range(start, stop, step)
- start : 시작
- stop : 끝
- step : 증가값
- 0부터 629까지 7만큼 건너 뛰면서 출력, 단 r,g,b 픽셀 값이 같을 때만
- 이렇게 구현하여 출력해보면 다음 레벨이 무엇인지 힌트를 알려준다.
- the next level is 다음 괄호 안의 숫자를 다시 문자열로 바꾸는 게 답인 것 같다.
- 답 : integrity
- http://www.pythonchallenge.com/pc/def/integrity.html 로 가면 다음 레벨 문제가 나온다.
from PIL import Image
import re
image = Image.open("D:/Python Challenge/oxygen.png")
result=''
for x in range(0,image.size[0],7):
pixel=image.getpixel((x,47))
if pixel[0]==pixel[1]==pixel[2]:
result+=(chr(pixel[0]))
print(result)
print ("".join(map(chr, (map(int, re.findall("\d+", result))))))
# re모듈을 이용하여 출력된 문자열에서 숫자만 따로 뽑아서 문자열로 한 번에 출력하는 방법도 있다.
반응형
'#WarGame > Python Challenge' 카테고리의 다른 글
Python Challenge # LV.9 (ImageDraw) (0) | 2020.09.01 |
---|---|
Python Challenge # LV.8 (BZ2) (0) | 2020.09.01 |
Python Challenge # LV.6 (ZipFile) (0) | 2020.08.24 |
Python Challenge # LV.5 (pickle) (0) | 2020.08.20 |
Python Challenge # LV.4 (0) | 2020.08.18 |