728x90
이번 포스트에서는 Python Challenge의 Level 7 문제에 대해 다루겠다.
문제를 클릭하면 다음과 같은 페이지가 출력된다.
## 문제 해석 :
중간에 픽셀이 존재하는 사진 한 장이 출력되어 있다. 해당 문제는 포렌식으로 접근하면 될 것 같다.
## 문제 풀이 :
해당 이미지를 다운로드 하여 속성을 확인해보면 다음과 같다.
### 실행 결과 :
높이가 95인 것을 알 수 있다. 사진 속 픽셀은 중간 쯤에 있으니 대략 95 // 2에 위치한다고 볼 수 있다.
이어서 해당 픽셀의 RGB 값을 아스키코드로 출력해보도록 하겠다.
### 공격 코드 :
from PIL import Image
imgfile = Image.open("oxygen.png")
for i in range(imgfile.size[0]):
pixel = imgfile.getpixel((i, imgfile.height//2))
print(pixel)
### 실행 결과 :
픽셀 하나당 7픽셀이라는 것을 확인할 수 있다.
그럼 7픽셀씩 확인해보도록 다시 코드를 짜보겠다.
### 공격 코드 :
from PIL import Image
imgfile = Image.open("oxygen.png")
rst = ""
for i in range(0, imgfile.size[0], 7):
pixels = imgfile.getpixel((i, imgfile.height//2))
if pixels[0] == pixels[1] == pixels[2]:
rst += chr(pixels[1])
print(rst)
### 실행 결과 :
다음 레벨의 아스키코드가 출력한 것을 확인할 수 있다. 해당 아스키코드를 문자로 변환하면 다음과 같다.
### 공격 코드 :
asc = [105, 110, 116, 101, 103, 114, 105, 116, 121]
ans = ''.join([chr(i) for i in asc])
print(ans)
### 실행 결과 :
### 최종 공격문 : http://www.pythonchallenge.com/pc/def/integrity.html
### 실행 결과 :
Level 8로 넘어간 것을 확인할 수 있다.
'Wargame > Python Challenge' 카테고리의 다른 글
Python Challenge (Level 9) (0) | 2022.08.27 |
---|---|
Python Challenge (Level 8) (0) | 2022.08.26 |
Python Challenge (Level 6) (0) | 2022.08.24 |
Python Challenge (Level 5) (0) | 2022.08.06 |
Python Challenge (Level 4) (0) | 2022.08.05 |