My Simple Cipher

Problem

This my first cipher system. Can you break it?

my-simple-cipher.7z 


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(0128))
for i in range(0len(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! 플래그 획득

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
32
33
#!/usr/bin/python2
 
import sys
import random
 
key = [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]))%128
 
for j in range(0,13):
  for i in range(013):
    if(key[(i+9)%13]!=0 and key[i]==0):
      key[i]=(ord(enc[i+23])-ord(enc[i+22])-key[(i+9)%13])%128
    
skey=''
for i in range(0,13):
  skey+=chr(key[i])
 
print("key : "+skey)
 
#decipher
 
message = ''
 
for i in range(1len(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

+ Recent posts