728x90
이번 포스트에서는 Python Challenge의 Level 22 문제에 대해 다루겠다.
문제를 클릭하면 다음과 같은 페이지가 출력된다.
## 문제 해석 :
조이스틱 사진이 출력되어 있다. 개발자 도구를 열어보면 다음과 같다.
"white.gif"가 존재한 것을 알 수 있다. 해당 GIF 파일을 다운로드 해보면 다음과 같다.
GIF 파일을 밝기를 조절해보면 아래와 같이 여러 개의 점이 존재한다는 것을 알 수 있다.
해당 점들의 위치를 조사하고 이어보면 될 것 같다.
## 문제 풀이 :
우선 파이썬을 통해 해당 파일의 프레임들을 출력해보겠다.
### 공격 코드 :
from PIL import Image
with Image.open("white.gif") as gif:
for f in range(gif.n_frames):
gif.seek(f)
print(gif.getbbox()) # 상하좌우를 픽셀로 표현
### 실행 결과 :
여러 쌍의 상하좌우가 출력된 것을 확인할 수 있다. 해당 좌표를 100을 기준으로 상하좌우로 움직이면서 출력해보겠다.
### 공격 코드 :
from PIL import Image, ImageDraw
rst = Image.new("RGB", (500, 200))
draw = ImageDraw.Draw(rst)
x, y = 0, 100
with Image.open("white.gif") as gif:
for f in range(gif.n_frames):
gif.seek(f)
left, upper, right, down = gif.getbbox()
# 방향을 정한다.
dx = left - 100
dy = upper - 100
# 움직임이 끝날 시, 우측으로 shift한다.
if dx == dy == 0:
x += 50
y = 100
x += dx
y += dy
draw.point([x, y])
rst.show()
### 실행 결과 :
"bonus"라는 단어가 출력된 것을 확인할 수 있다.
### 최종 공격문 : http://www.pythonchallenge.com/pc/hex/bonus.html
### 실행 결과 :
Level 23로 넘어간 것을 확인할 수 있다.
'Wargame > Python Challenge' 카테고리의 다른 글
Python Challenge (Level 24) (0) | 2022.09.24 |
---|---|
Python Challenge (Level 23) (1) | 2022.09.22 |
Python Challenge (Level 21) (1) | 2022.09.20 |
Python Challenge (Level 20) (1) | 2022.09.19 |
Python Challenge (Level 19) (0) | 2022.09.18 |