이번 포스트에서는 Python Challenge의 Level 1 문제에 대해 다루겠다.
문제를 클릭하면 다음과 같은 페이지가 출력된다.
## 문제 해석 :
알아볼 수 없는 이상한 보라색 문구가 적혀 있다. 그리고 사진 속 K->M, O->Q, E->G가 적혀 있는 것을 확인할 수 있다. 해당 힌트에 대해서 생각해보면 K는 아스키 코드로 75이며 M은 77, O는 79이며 Q는 81, E는 69이며 G는 71이다. 즉 아스키 코드상 +2가 된 것을 알 수 있다.
## 문제 풀이 :
아래와 같이 아스키 코드를 바꿔주는 파이썬 코드를 짜보았다.
### 공격 코드 :
cipher_t = input("Input the Cipher : ")
plain_t = ""
for i in range(len(cipher_t)):
if cipher_t[i].isalpha():
plain_t += chr(ord(cipher_t[i]) + 2)
else:
plain_t += cipher_t[i]
print(f"Plain text :\n {plain_t}")
### 실행 결과 :
1차 시도
2**38 is much much larger라는 문구가 출력된 것을 확인할 수 있다. 여기서 잠깐 Level 0의 문제를 확인해보면 컴퓨터 위에 2^38이 적혀있는 포스트잇이 붙여져있다는 것을 확인할 수 있다.
먼저 파이썬을 실행하여 2의 38승의 값을 확인해보았다.
해독문이 조금 이상한 것을 확인할 수 있다. 생각해보니 y, z는 아스키 코드 +2하면 {, |가 된다. 즉 y랑 z까지 고려해서 코드를 재구성해야 한다.
간단하게 y, z일 결우 +2하고 -26으로 하겠다.
### 공격 코드 :
cipher_t = input("Input the Cipher : ")
plain_t = ""
for i in range(len(cipher_t)):
if cipher_t[i].isalpha():
plaint_c = chr(ord(cipher_t[i]) + 2)
if plaint_c.isalpha() == 0:
plaint_c = chr(ord(plaint_c) - 26)
plain_t += plaint_c
else:
plain_t += cipher_t[i]
print(f"Plain text :\n {plain_t}")
### 실행 결과 :
결과 값이 정상적으로 나온 것을 확인할 수 있다. 이제 URL에 적용하라고 한다.
URL에 적용한 결과 map -> ocr이라는 결과가 나온다.
### 최종 공격문 : http://www.pythonchallenge.com/pc/def/ocr.html
### 실행 결과 :
Level 2로 넘어간 것을 확인할 수 있다.
'Wargame > Python Challenge' 카테고리의 다른 글
Python Challenge (Level 5) (0) | 2022.08.06 |
---|---|
Python Challenge (Level 4) (0) | 2022.08.05 |
Python Challenge (Level 3) (0) | 2022.08.03 |
Python Challenge (Level 2) (0) | 2022.08.01 |
Python Challenge (Level 0) (0) | 2022.07.30 |