Python/Python Challenge

[Python Challenge 26] 과거의 행실을 돌아보세요

Python Challenge 26의 Url은 다음과 같다

Python challenge 26 : http://www.pythonchallenge.com/pc/hex/bin.html


구성

엄허; 부끄러운 짤이 우리를 반겨준다. 영어를 해석하면

"서두르세요. 배를 놓칠 거 같습니다."

이다. 특별한 증거가 보이지 않으니, 저기 뭐냐 주석으로 넘어가자

주석에 힌트가 쓰여있는대로면 우리는 그의 이메일을 받았을 것이라고 한다. 우선 사과를 해야 될 대상을 떠올려보자. 필자가 잘살았다고 떵떵거리진 않아도 하늘 아래 부끄러움 없이 살았는데, 뭐지? 과거를 돌아볼 필요가 있을 거 같다. 


해결 아이디어

2021.06.03 - [Python/Python Challenge] - [Python Challenge 19] You are An Idiot!

 

[Python Challenge 19] You are An Idiot!

Python Challenge 19의 Url은 다음과 같다 Python challenge 19 : http://www.pythonchallenge.com/pc/hex/bin.html 구성 인도 사진이다. 특별한 게 안보이니까 주석을 보자 MIME Type의 e-mail이 보인다. 아래..

tutoreducto.tistory.com

이 문제의 마지막 레오폴드씨의 말을 기억하는가

그니까 우리가 뭘잘못했는지는 모르겠는데, 사과해야 된다고 한다. 사과하는 방법은 이메일로 하면 될 거 같다. 이메이 릉 19번 문제의 주석에 있다.

레오폴드 씨의 이메일은 leopold.moz@pythonchallenge.com이다. 메일을 보내자 얼마지나지 않아 다음과 같은 답변을 받을 수 있다.

일단 24문제를 풀었던 파일중 mybroken.zip이라는 파일이 있었다. 파일이 손상된 파일이었는데, 어딘가 해시로 장난질을 하는 게 있나 보다. 우선 해시를 저런 식으로 보냈다는 것은 정상적인 파일의 해시값이 저 모양이라는 것이다. 한번 mybroken.zip의 해시를 구해보자

### 26_1.py

import hashlib

if __name__=="__main__" :

    with open("mybroken.zip","rb") as f:
        data = f.read()

    print(hashlib.md5(data).hexdigest())

결과는 "bbf6616928e23ecfef4b717f281c53cc" 이다. 레오폴드 씨가 보낸 해시랑은 다르다. 파일 또한 열어보면 어딘가 손상이 되었다는 안내를 받을 수 있다. 보통 이런 복구는 쉬운 일이 아닌데, Python Challenge는 다행히도, 한 바이트만 손상시켜놨다.(뭐 어딘지 모르고 뭔지 모르는 게 문제이긴 한데, 그건 때려보자)

 

### 26_2.py

import hashlib

if __name__=="__main__" :

    tar = "bbb8b499a0eef99b52c7f13f4e78c24b"
    stop = False

    with open("mybroken.zip","rb") as f:
        ori_dat = f.read()

    for i in range(len(ori_dat)) :
        if(stop==True) :
            break
        for b in range(256) :
            tmp = ori_dat[:i]+bytes([b])+ori_dat[i+1:]
            if(hashlib.md5(tmp).hexdigest()==tar) :
                with open("notbroken.zip","wb") as f:
                    f.write(tmp)
                    stop = True

결과는 다음과 같은 사진이다.

스삐드! 위에 있던 문자열인 boat를 합치면 speedboat가 된다. 이게 답이다.

Answer Url : http://www.pythonchallenge.com/pc/hex/speedboat.html 

* 이건 여담인데, zip 파일은 단순하게 CRC가 안 맞아서 안 열리는 거기 때문에, 요즘의 zip/unzip프로그램에서 대부분 해석해서 그냥 연다.

개그다.