일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬 첼린지
- 오라클
- ubuntu
- 데이터베이스
- 자바
- data communication
- 백준 러스트
- java
- 우분투
- 자바 기초
- Rust
- 운영체제
- Reversing
- OS
- 오라클DB
- 데이터 통신
- 파이썬
- 파이썬 챌린지
- 알고리즘
- Python challenge
- C
- 파이썬 알고리즘
- Operating System
- 러스트 예제
- 러스트
- Python
- 자바 개념
- 백준
- 러스트 프로그래밍 공식 가이드
- Database
- Today
- Total
IT’s Portfolio
[Python Challenge] Level 1 풀이 본문
지난번 Warming Up 단계를 거쳐 Level 1 풀이이다.
문제를 보자.
사진은 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."
문제를 보니 문자열의 k는 m으로 o는 q, e는 g로 바꾸라는 것 같다.
하지만 아닌 것 같다.
노란색 힌트는 "문제를 풀 때 두 번정도 더 생각하라" 는 뜻이다.
a b c d e f g h i j 'K' l 'M' => k에서 두 번째는 m이다.
a b c d e f g h i j k l m n 'O' p 'Q' => o에서 두 번째는 q이다.
a b c d 'E' f 'G' => e에서 두 번째는 g이다.
위의 사실을 생각해보니 문자열에 있는 모든 알파벳을 2번 앞당기는 스크립트를 짜면 읽을 수 있는 문자열이 나올 것 같다.
str = "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."
check = ""
for i in range(0, len(str)):
if str[i] == " ":
check = check + " "
continue
elif str[i] == ".":
check = check + "."
continue
elif str[i] == "'":
check = check + "'"
continue
elif str[i] == "(":
check = check + "("
continue
elif str[i] == ")":
check = check + ")"
continue
else:
checking = ord(str[i])+2
if checking>122:
checking = 96+checking-122
check = check + chr(checking)
else:
check = check + chr(checking)
print(check)
"i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url."
=>
"직접 번역하지 않았기를 바랍니다. 그게 컴퓨터의 목적입니다. 직접 작성하는 것은 비효율적이므로이 텍스트가 너무 긴 이유입니다. string.maketrans()를 사용하는 것이 좋습니다. 이제 URL에 적용하십시오."
string.maketrans() 라는 함수를 쓰라고 한다.
URL에 있는 map을 바꾸는게 정답인 듯 하다.
import string
str = "map"
a = "abcdefghijklmnopqrstuvwxyz"
b = "cdefghijklmnopqrstuvwxyzab"
check = str.maketrans(a, b)
print(str.translate(check))
URL 정답값: ocr
최신화
2022.10.20
msg = "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."
# 일반적인 코드
# result = ""
# for i in list(msg):
# if i.isalpha():
# if ord(i)+2 > 122:
# result += chr(96+(ord(i)+2)-122)
# else:
# result += chr(ord(i)+2)
# else:
# result += i
# print(result)
# string.maketrans()와 translate()를 사용한 코드
dec1 = "abcdefghijklmnopqrstuvwxyz"
dec2 = "cdefghijklmnopqrstuvwxyzab"
dec = msg.maketrans(dec1, dec2)
print(msg.translate(dec))
'''
i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.
'''
- 스크립트 축약 및 속도 개선
Level 2로 갈 수 있는 URL = http://www.pythonchallenge.com/pc/def/ocr.html
string.maketrans( from, to ) 함수
from에 있는 문자를 to의 문자로 치환하는 함수. 같은 위치의 문자가 변하기 때문에 from과 to의 길이가 같아야 함.
translate() 메소드에 전달할 인수를 만드는데 사용됨.
'Security Study > Wargame Explanation' 카테고리의 다른 글
[Python Challenge] Level 3 풀이 (0) | 2019.11.22 |
---|---|
[Python Challenge] Level 2 풀이 (0) | 2019.11.20 |
[Python Challenge] Level 0 풀이(Warming UP) (0) | 2019.11.19 |
[CodeEngn] Basic RCE Level 5 (0) | 2019.10.25 |
[CodeEngn] Basic RCE Level 4 (0) | 2019.10.25 |