Python/Python Challenge

[Python Challenge 17] 얘 이것도 가져가렴

Python Challenge 17의 Url은 다음과 같다

Python challenge 17 : http://www.pythonchallenge.com/pc/return/romance.html


구성

일단 페이지나, 사진이나, 주석이나 특별한 점은 보이지 않는다. Title인 eat? 이라는 글자를 보아 cookies는 cookies인데, 먹는 쿠키는 아닌 거 같다. 혹시 아래 사진을 기억하는가? 조금 힌트가 될지도 모르겠다.

 


 

해결 아이디어

문제의 아래쪽 사진은 4번문제인 LinkedList의 사진이다.

2021.05.16 - [Python/Python Challenge] - [Python Challenge 4] 무한으로 즐겨요 requests

 

[Python Challenge 4] 무한으로 즐겨요 requests

Python Challenge 4의 url은 다음과 같다. Python challenge 4 : http://www.pythonchallenge.com/pc/def/linkedlist.php follow the chain www.pythonchallenge.com 구성 으흠; 그림이 어떤 걸 의미하는지는 모..

tutoreducto.tistory.com

쿠키를 확인하면 다음과 같은 글을 확인할 수 있다.

오호... 그러니까 이전 문제에서 사용하던 parameter인 nothing대신 busynothing을 사용해 보자고 한다. 바꾸어서 접속해보자(시작번호는 역시 12345이다. 주석에 쓰여있는 대로다)

으흠; 4번에서 왔다면 당장 꺼지라고 써있다. cookies를 확인하자

1. busynothing=44827의 cookies

2. busynothing=45439(44827다음거)의 cookies

오호; cookies가 순서대로 BZ를 이루고 있다. 어디서 많이 본 확장자 아닌가, 바로 bz2모듈을 사용하는 문제였던 8번 문제의 해결방법을 그대로 차용한 듯 하자.

2021.05.19 - [Python/Python Challenge] - [Python Challenge 8] 소난다

 

[Python Challenge 8] 소난다

Python Challenge 8의 url은 다음과 같다. Python challenge 8 : http://www.pythonchallenge.com/pc/def/integrity.html working hard? www.pythonchallenge.com 구성 귀여운 야 울고 있는 꿀벌이 있다. 글자는..

tutoreducto.tistory.com

자 이제 코딩 시간이다.

### 17_1.py

from requests import *
import re
import bz2

if __name__ == "__main__" :
    url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?busynothing="
    nothing = "12345"
    answer = list()
    
    while(True) :
        new_url = url+nothing
        res = get(new_url)
        if(len(res.cookies["info"])==3) :
            answer.append(int(res.cookies['info'][1:],base=16))
        else :
            if(res.cookies['info'] == "+") :
                answer.append(32)
            else :
                answer.append(ord(res.cookies["info"]))
        try :
            nothing = re.findall("busynothing is (\d+)",res.text, re.DOTALL)[-1]
        except IndexError :
            break
        print(res.text)
        
    print(bz2.decompress(bytes(answer)).decode())
    

 중간에 +를 공백으로(정수 32 >> 헥스 0x20 >> " ")로 치환하는 부분이 있다. urlencode에서는 +가 공백을 의미한다. 만약 정말 헥스값으로 "+"를 표현했다면 "+"로 써야 되지만, 그게 아니라 글자로 +가 되어있다면 그건 공백으로 치환해야 한다. 결과는 다음과 같다.

and the next busynothing is 64994
and the next busynothing is 66109
and the next busynothing is 37855
and the next busynothing is 36383
and the next busynothing is 68548
and the next busynothing is 96070
and the next busynothing is 83051
is it the 26th already? call his father and inform him that "the flowers are on their way". he'll understand.

그렇다. 그니까 한국말로 번역하면

 

"어머 벌써 26일이 되었나? 그 사람 아버지한테 연락해서 '꽃은 각자 살아가는 방법이 있다고' 전달해줘 이해하실 거야"

 

이다. 오호.. 이번엔 26일이다. 저번 문제를 기억하는가

2021.05.29 - [Python/Python Challenge] - [Python Challenge 16] 다 내 밑으로 정렬해

 

[Python Challenge 16] 다 내 밑으로 정렬해

Python Challenge 16의 Url은 다음과 같다 Python challenge 16 : http://www.pythonchallenge.com/pc/return/mozart.html 구성 무슨 노이즈가 화면에 껴있다. 일단 사진을 다운로드하여보자 사진의 이름은 moza..

tutoreducto.tistory.com

맞다 문제의 주인공은 mozart였다. 그의 아버지 이름을 검색해 보자

성함은 Leopold 되시나 보다. 전화는 어떻게 걸 수 있을까? 바로 Bert는 나쁜 놈에서 나왔던 xmlrpc서버의 phone메서드를 이용해야 된다.(와 이 정도면 이번 문제는 종합 선물세트다) 

2021.05.19 - [Python/Python Challenge] - [Python Challenge 13] 자니??.... 그냥 전화해봤어...

 

[Python Challenge 13] 자니??.... 그냥 전화해봤어...

Python Challenge 13의 url은 다음과 같다. Python challenge 13 : http://www.pythonchallenge.com/pc/return/disproportional.html 구성 가운데 영어는 다음과 같은 의미이다. "나쁜 놈에게 전화할 것" 상호작..

tutoreducto.tistory.com

자 오랜만에 사용하는 xmlrpc 코드다.

### 17_2.py

import xmlrpc.client as xc

if __name__ == "__main__" :
    url = "http://www.pythonchallenge.com/pc/phonebook.php"
    serv = xc.ServerProxy(url)

    print(serv.phone("Leopold"))

출력은 다음과 같다.

555-VIOLIN

참 길었다. violin으로 접속해 보자.

IC 아직 안 끝났다. Title은 It's me. what do you want?이다. 

그러니까 처음  linkedlist의 cookies를 이용해서 얻어냈던 문자열인 'the flowers are ib their ways"를 전달해야 한다. 여태까지 사용했던 info를 key로 보내보자 코딩 타임이다.

### 17_3.py

from requests import *

if __name__=="__main__" :
    url = "http://www.pythonchallenge.com/pc/stuff/violin.php"
    param = "the flowers are on their way"
    param = param.replace(" ","+")
    cookies = {"info":param}

    res = get(url,cookies=cookies,auth=('hugt','file'))
    print(res.text)

출력에는 다음과 같은 문자열이 쓰여 있었다.

"noh well, don't you dare to forget the balloons."

그렇군 X바 진짜 끝이다.

 

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


종합 선물세트였다. 어려운 건 없었는데, 젠장 기억력이 좋은 편이 아니어서 쿠소.