[TyokoWesterns] My Simple Cipher[75]
2017. 9. 2. 12:46
My Simple CipherProblemThis my first cipher system. Can you break it? |
cipher.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/python2 import sys import random key = sys.argv[1] flag = '**CENSORED**' assert len(key) == 13 assert max([ord(char) for char in key]) < 128 assert max([ord(char) for char in flag]) < 128 message = flag + "|" + key encrypted = chr(random.randint(0, 128)) for i in range(0, len(message)): encrypted += chr((ord(message[i]) + ord(key[i % len(key)]) + ord(encrypted[i])) % 128) print(encrypted.encode('hex')) | cs |
encrypted.txt 내용 7c153a474b6a2d3f7d3f7328703e6c2d243a083e2e773c45547748667c1511333f4f745e
message | key
랜덤한 0~128 사이의 아스키문자 하나를 뽑아내고 그것을 이용해 (message | key)의 첫글자를 암호화한다. 이제 암호화한걸 encrypted 문자 뒤에 덧붙이면서 간다. random.randint = encrypted[0]이고, 실제 encrypted.txt에서 가져와서 보면 "|"로 int값은 124이다.이걸... 와... 너무 설명이 귀찮고 어려워;대충 말하자면 Message = FLAG | KEY 로 구성되어 암호화에 KEY가 두번 더해지고 있음, 그걸 이용해서 풀면됨먼저 Message에 항상 "|"가 들어가므로 이걸 이용해서 Key[8]을 구하고 나머지를 순차적으로 구하면됨. 아래는 답을 구하는 소스코드를 실행하면 플래그가 나온다. key : ENJ0YHOLIDAY! TWCTF{Crypto-is-fun!}|ENJ0YHOLIDAY! 플래그 획득
123456789101112131415161718192021222324252627282930313233 #!/usr/bin/python2import sysimport randomkey = [0,0,0,0,0,0,0,0,0,0,0,0,0]encrypted_flag = '7c153a474b6a2d3f7d3f7328703e6c2d243a083e2e773c45547748667c1511333f4f745e'enc = encrypted_flag.decode('hex')key[8]=(ord(enc[22])-ord(enc[21])-ord(enc[0]))%128for j in range(0,13):for i in range(0, 13):if(key[(i+9)%13]!=0 and key[i]==0):key[i]=(ord(enc[i+23])-ord(enc[i+22])-key[(i+9)%13])%128skey=''for i in range(0,13):skey+=chr(key[i])print("key : "+skey)#deciphermessage = ''for i in range(1, len(enc)):message += chr((ord(enc[i])-ord(enc[i-1])-ord(skey[(i-1)%13])) % 128)#encrypted += chr((ord(message[i]) + ord(key[i % len(key)]) + ord(encrypted[i])) % 128)print(message)
'Write-up > Crypto' 카테고리의 다른 글
[Byte Bandits CTF 2018] R u Ronald Rivest? 70p (0) | 2018.04.27 |
---|---|
[UIUCTF 2018] xoracle (250) (0) | 2018.04.18 |
[anstromCTF 2017] Knock Knock (0) | 2017.04.25 |
[anstromCTF 2017] Descriptions (2) | 2017.04.25 |
[anstromCTF 2017] Substitution Cipher (0) | 2017.04.25 |