Python/Python Challenge

[Python Challenge 12] 나쁜 놈은 누구인가

Python Challenge 12의 url은 다음과 같다.

Python challenge 12 : http://www.pythonchallenge.com/pc/return/evil.html


구성

위와 같은 사진이 있다. 사진의 파일명은 evil1.jpg(응? 왜 1이지? 점 심나 가서 먹을 거 같아) 웹상에서 상호작용은 특별히 없는 것 같으니 주석을 확인해 보자

title이 dealing evil이다. 돌린다는 것에 이번문제를 해결할 key가 있는 거 같다.


해결 아이디어

사진이름에 이상함을 느끼자 evil1.jpg가 있다는 것은 evil2.jpg도 있다는 것이다. 아래는 evil2.jpg를 요청한 결과이다.

gfx로 다운로드하라고 한다. evil2.gfx를 요청하면 파일을 다운로드할 수 있다. gfx라는 확장자는 애니메이션 파일이지만 문제에서는 이를 표현하고자 한 것은 아닐 것이다. 파일을 hxd로 뜯자

잘 보면 헤더에 간격이 띄워진 상태로 JFIF 등의 문자열이 있는 것을 확인할 수 있다. evil1.jpg에서 5등분이 난 카드처럼 우리도 바이트를 5개로 나누어보자 아래는 구현 코드이다.

### 12.py

if __name__=="__main__" :
    with open("evil2.gfx","rb") as img :
        data = img.read()
        for i in range(5) :
            with open(str(i)+".dat","wb") as f:
                f.write(data[0+i::5])

오호 잘 쪼개졌다. 헤더 확인 결과 각각의 폴더는 다음의 확장자를 가진다.

  • 0.dat : jpg
  • 1.dat : png
  • 2.dat : gif
  • 3.dat : png
  • 4.dat : jpg

사진을 첨부하고 싶은데 알올라간다. 삭선 되어있는 4.jpg를 제외하면 글자는 disproportional이다. 찾았다.

Answer Url : http://www.pythonchallenge.com/pc/return/disproportional.html


참고사항이다. evilN.jpg를 계속 탐색하다 보면 evil4.jpg까지 도달한다. 이미지처럼 보이지 않아도 다운로드하여서 파일을 헥스로 보면 다음의 글이 써져있다.

그렇다. 바트가 나쁜놈이다. 기억하자