보안 공부하는 꼬깔이

2번문제 메인 화면이다. 밑에 있는 힌트를 해석해보자

해석을 해본 결과는 이렇다 "문자를 알아보자, 아마도 그들은 책에 있지만 아마 그들은 페이지 소스에 있습니다."

라고 되어있는데 정확히 무슨말인지 이해 안되지만 페이지 소스에 무언가 힌트가 존재하는 것 같다.

페이지 소스를 확인해봤는데 어마하게 긴 특수문자의 조합들이 주석처리 된채로 존재했다. 그리고 유일하게 알아볼수 있는 문장인 "find rare character in the mess below:" 를 보면 특수문자의 조합에서 드문 문장을 찾으라는 힌트인것 같다. 

우선 저 특수문자의 조합들을 긁어 와야하는데 페이지 소스에서 마우스로 복사 붙이기를 해도 되지만 파이썬 공부를 위해서 urllib 라이브러리를 사용해 긁어보자.

urllib 라이브러리를 이용해 페이지소스를 가져온 다음 주석처리된 특수문자의 조합을 rindex 함수를 사용해 가져왔다.

이제 힌트에서 말한 드문 문자를 찾는 코드를 작성해보자.

 

re 라이브러리의 findall 기능을 이용해 알파벳만을 출력시키게끔 코드를 추가했다. 실행한 결과로 3번 문제의 페이지 이름이 출력됬다.

https://github.com/leeggoggal/Python/blob/master/python_challenge_2.py

소스코드에 대한 해석은 위 Github에 작성해두었다.

2번 문제 공략완료!

 


 

1번문제에 접속하면 위와 같은 화면이 출력될 것이다.

문제에는 실제 노트에 K -> M , O -> Q , E -> G 이런식의 치환을 의미하는 사진이 보여진다.

K 알파벳은 M으로 O 는 Q , E 는 G 이를 통해 우리는 알파뱃을 두칸씩 뒤로 밀어 치환시킨다는 것을 알수있다. 

g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.

그리고 위와 같은 카이사르 암호화 구문이 보일것이다. 

노트에 적혀있는 힌트와 카이사르 암호의 연관성을 생각해보면 해당 카이사르 암호문은 기존 내용의 알파벳들을 각각 모두 두칸씩 뒤로 밀어 암호화 시켰을 것이다.

그러므로 파이썬 코딩을 통해 카이사르 암호를 복호화 시키는 코드를 작성하면 문제공략이 가능할 것이다.


TIP.카이사르 암호?

- 카이사르 암호(ceasar cipher)는 암호학에서 다루는 간단한 치환암호의 일종이다. 암호화하고자 하는 내용을 알파벳 별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식이다. 예를 들어 3글자씩 밀어내는 카이사르 암호로 'COME TO ROME' 를 암호화 하면 'FRPH WR URPG' 가 된다.

*출처: https://ko.wikipedia.org/wiki/카이사르_암호


카이사르 암호문의 알파벳 각자리수를 2칸식 앞으로 당겨 복호화 하는 코드를 작성했다

https://github.com/leeggoggal/Python/blob/master/python_challenge_1.py

해당 코드에 대한 설명은 위링크의 github에 작성해 두었다.

i   h o p e   y o u   d i d n t   t r a n s l a t e   i t   b y   h a n d . t h a t s   w h a t   c o m p u t e r s   a r e   f o r .   d o i n g   i t   i n   b y   h a n d   i s   i n e f f i c i e n t   a n d   t h a t ' s   w h y   t h i s   t e x t   i s   s o   l o n g .   u s i n g   s t r i n g . m a k e t r a n s ( )   i s   r e c o m m e n d e d .   n o w   a p p l y   o n   t h e   u r l .

해당 코드를 실행하면 위와 같은 복호화된 문장이 출력된다. 코드를 짜는것보다 영어 문장을 해석하는게 더 어려운거 같다.

어렵게 해석을 해본 결과 내용은 이러하다. "손으로 복호화 하지 말고 컴퓨터를 사용해라. 텍스트가 매우 길기 때문에 손으로 하는 것은 무리한 짓이다. string.maketrans() 함수를 사용하길 추천한다.  지금 url에 적용해라"

아무래도 string.maketrans() 라는 함수를 사용하여 url에 적용해야하는 모양이다. 이 함수가 어떤 기능을 하는지 구글링을 통해 알아보자.

https://www.tutorialspoint.com/python/string_maketrans.htm

구글링을 통해 string.maketrans() 함수의 사용법을 이해하기 쉽게 설명해둔 사이트를 찾았다.

*출처 : https://www.tutorialspoint.com/python/string_maketrans.htm

해당 사이트의 예제를 참조하면 intab 변수에는 변환전 문자를 outtab 문자는 변환될 문자를 저장하고 maketrans 함수에인자를 던져주면 각 변수에 저장된 문자의 각각 자리수를 매칭해 변환한다.

어떻게 사용하는지 알았으니 string.maketrans 함수를 이용하기 전에 url에 적용하라는 의미를 생각해보자

해당 문제의 url 을 보면 현재 페이지는 map.html이다. 그렇다면 map이라는 문자를 maketrans 함수를 이용해 처음 노트에 적힌 힌트대로 2칸씩 미뤄 출력시킨 값을 url로 넘겨주면 어떻게 될까?

위 코드를 실행시키면 map을 치환한 어떠한 문자가 나온다 그문자를 url로 넘겨주면 다음 문제 페이지로 넘어가게 된다.

1번 문제 공략 완료!

 

 


파이썬 첼린지 링크 : http://www.pythonchallenge.com/

파이썬의 기본적인 문법을 어느정도 알게되면 파이썬을 이용한 실질적인 코드를 짜보고 싶어지게 되며, 파이썬의 장점중

하나인 다양한 라이브러리의 사용법을 터득하게 된다면 여자친구빼고 전부 만들수 있게 된다ㅋㅋ

그러기위해서는 파이썬 스킬과 라이브러리의 종류 및 사용법 등을 알아야 되는데 이 때 파이썬 첼린지(Pythonchallenge.com)

문제를 접하게 된다면 많은 도움이 될 것이다.

 

위에 작성해둔 파이썬 첼린지 링크를 클릭하고 문제 사이트에 접속하게되면 위와 같은 화면이 보일것이다.

Click here to get challenged 문구를 클릭해 챌린지를 시작해보자!

 

이번 문제는 warming up 문제이니 "hello world"를 출력한다는 느낌으로 가면 될 것 같다.

문제 메인화면에는 CRT모니터 , 왼쪽 상단의 0 , 238 숫자 , HINT 정도가 보인다.

HINT를 해석해보니 URL 주소를 변경하라고 되어있다.

URL을 확인해보면 현재 페이지는 0.html 이라는 것을 확인할 수 있다.

 

URL을 변경하라는 힌트를 토대로 (무작위 숫자.html) 을 시도 해보던 도중 또 다른 힌트가 존재하는 페이지인 1.html 을 발견했다.

2**38 은 파이썬에서 2의 38승을 의미한다. 그것을 토대로 힌트를 해석해보면 2의 38승은 매우매우 크다 라는 뜻이 된다.

(2의38승 계산 결과값.html) 페이지로 접속을 하게되면 어떻게 될까?

#-*- coding:utf-8 -*-
warming_up= 2**38
print warming_up

2의 38승을 계산하는 코드이다.

(결과값.html) 페이지를 URL로 넘겨주면 1번 문제 페이지로 넘어가게 된다. 

 

 

 

'Coding > PythonChallenge.com' 카테고리의 다른 글

[파이썬 첼린지] PythonCallenge 2번  (0) 2017.07.21
[파이썬 첼린지] PythonCallenge 1번  (1) 2017.07.20