본문 바로가기

#WarGame/Python Challenge

Python Challenge # LV.12 (5개의 파일)

반응형

출처) http://www.pythonchallenge.com/index.php

 

The Python Challenge

What people have said about us: "These sorts of things are in my opinion the best way to learn a language.", brberg at Media Cloisters "It's the best web site of the year so far.", Andy Todd at halfcooked "Addictive way to learn the ins and outs of Python.

www.pythonchallenge.com

 

 

http://www.pythonchallenge.com/pc/return/evil.html

[그림1. LV12 문제]

 

  • 파이썬 챌린지 레벨12 문제!
  • 카드를 나눠주는 이미지가 있고, 별다른 문자는 없다.
  • 페이지소스를 바로 확인해보았다.

 

[그림2. page source]

 

  • 제목은 dealing evil이고 img src에 "evil1.jpg"라고 적혀있다.
  • 클릭해보니 "http://www.pythonchallenge.com/pc/return/evil1.jpg" 이런 url이 나왔다.
  • 1이 적혀있길래 2도 있나 싶어 evil2.jpg라고 url창에 입력해보았다.

 

 

[그림3. evil2.jpg]

 

  • evil2.jpg가 존재했다. 사진 속에서 "not jpg _.gfx"라고 적혀있다.
  • url을 evil2.gfx로 바꾸어 보니 바로 "evil2.gfx"파일이 바로 다운이 되었다.
  • gfx파일은 처음 들어보는 확장자이다.
  • evil3.jpg가 있을 것 같아 입력해보았다.

 

 

[그림4. evil3.jpg]

 

  • 더이상 evils는 없다라고 나온다.
  • 그래도 혹시나 해서 evil4.jpg를 입력해보았다.
  • 사진은 있는 것 같은데 열리지 않아 HxD로 열어보았다.

 

 

[그림5. evil4.jpg]

 

  • "Bert is evil"...? 이게 뭘까....??
  • 다시 돌아가라고 적혀있다. evil2.gfx파일을 HxD로 확인해보았다.

 

[그림6. evil2.gfx_header]

 

  • 일단 헤더시그니처 FF D8 (JPG) 앞에 무언가가 있다. 그리고 정상적인 jpg파일이라면 헤더에 ÿØÿà..JFIF 이런식으로 적혀 있는데 이 파일에는 JF....FI...IF....F 이런식으로 되어 있다.

 

 

[그림7. evil2.gfx_footer]

 

  • 이 파일의 푸터를 보면 FF 00 00 00 B1 D9로 되어있다. 정상파일이라면 FF D9여야 하는데 중간에 무언가 낑겨있다.

 

[그림8. evil2.gfx_byte]

 

  • evil2.gfx를 바이트로 출력해보니 그림처럼 중간에 0이 들어간 부분이 있다.
  • 하지만 어떤건 0이 4개이고, 어떤건 0이 3개였다. 규칙을 찾지 못해 풀이를 참고하니 처음 사진에 카드를 5장씩 나눠준다는게 힌트였다. 다시 헥스값을 살펴보았다.

 

[그림9. 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로 저장해도 이미지가 나온다.

 

[그림10. 5장의 jpg]

 

 

 

[그림11. 5개 이미지 저장]

 

  • 각 확장자별로 저장하려면 이렇게 구현하면 된다고 한다. (풀이 참고 함.)
반응형