반응형
출처) http://www.pythonchallenge.com/index.php
http://www.pythonchallenge.com/pc/return/evil.html
- 파이썬 챌린지 레벨12 문제!
- 카드를 나눠주는 이미지가 있고, 별다른 문자는 없다.
- 페이지소스를 바로 확인해보았다.
- 제목은 dealing evil이고 img src에 "evil1.jpg"라고 적혀있다.
- 클릭해보니 "http://www.pythonchallenge.com/pc/return/evil1.jpg" 이런 url이 나왔다.
- 1이 적혀있길래 2도 있나 싶어 evil2.jpg라고 url창에 입력해보았다.
- evil2.jpg가 존재했다. 사진 속에서 "not jpg _.gfx"라고 적혀있다.
- url을 evil2.gfx로 바꾸어 보니 바로 "evil2.gfx"파일이 바로 다운이 되었다.
- gfx파일은 처음 들어보는 확장자이다.
- evil3.jpg가 있을 것 같아 입력해보았다.
- 더이상 evils는 없다라고 나온다.
- 그래도 혹시나 해서 evil4.jpg를 입력해보았다.
- 사진은 있는 것 같은데 열리지 않아 HxD로 열어보았다.
- "Bert is evil"...? 이게 뭘까....??
- 다시 돌아가라고 적혀있다. evil2.gfx파일을 HxD로 확인해보았다.
- 일단 헤더시그니처 FF D8 (JPG) 앞에 무언가가 있다. 그리고 정상적인 jpg파일이라면 헤더에 ÿØÿà..JFIF 이런식으로 적혀 있는데 이 파일에는 JF....FI...IF....F 이런식으로 되어 있다.
- 이 파일의 푸터를 보면 FF 00 00 00 B1 D9로 되어있다. 정상파일이라면 FF D9여야 하는데 중간에 무언가 낑겨있다.
- evil2.gfx를 바이트로 출력해보니 그림처럼 중간에 0이 들어간 부분이 있다.
- 하지만 어떤건 0이 4개이고, 어떤건 0이 3개였다. 규칙을 찾지 못해 풀이를 참고하니 처음 사진에 카드를 5장씩 나눠준다는게 힌트였다. 다시 헥스값을 살펴보았다.
- 색깔별로 헤더를 나누어 보니 5개의 파일이 존재한다.
-
jpg 하나는 오프셋 170번에 있다.
PNG | 89 50 4E 47 0D 0A 1A 0A |
GIF | 47 49 46 38 37 61 |
JPEG | FF D8 FF E0 |
- 헤더를 자세히 보면 5칸 건너 뛰면 각각 확장자에 맞는 시그니처가 나온다.
- 아까 카드 5장씩 나눠준다는 힌트가 이거 인것 같다.
- 확장자에 맞게 이미지를 구현하는 법을 몰라 전부 jpg파일로 저장하는걸로 구현해 보았다.
f = open("evil2.gfx", "rb").read()
for i in range(5):
open('%d.jpg' % i ,'wb').write(f[i::5])
- 5장 모두 jpg로 저장해도 이미지가 나온다.
- 답 : disproportional
- http://www.pythonchallenge.com/pc/return/disproportional.html 로 가면 다음 레벨 문제가 나온다...!
- 각 확장자별로 저장하려면 이렇게 구현하면 된다고 한다. (풀이 참고 함.)
반응형
'#WarGame > Python Challenge' 카테고리의 다른 글
Python Challenge # LV.14 (spiral) (0) | 2020.09.11 |
---|---|
Python Challenge # LV.13 (xmlrpc) (0) | 2020.09.08 |
Python Challenge # LV.11 (even) (0) | 2020.09.05 |
Python Challenge # LV.10 (개미 수열) (1) | 2020.09.03 |
Python Challenge # LV.9 (ImageDraw) (0) | 2020.09.01 |