|
# Python2 ver.
|
|
# If you use Python3 interpreter, the trouble will be in print format
|
|
|
|
# [KSL Playground][Crypto][IDCC2018 DecryptME] written by Mr. Goodnight
|
|
# Link: https://euectf.stikom-bali.ac.id/challenges#[IDCC]%20DecryptME
|
|
# Flag: IDCC{S1mpl3_4nd_stR4ight}
|
|
|
|
from base64 import *
|
|
|
|
# Encryption algorithm
|
|
# ciphertext = plaintext + keys
|
|
with open('./enkripsi', mode = 'r') as f:
|
|
ciphertext = f.read()
|
|
|
|
# plaintext = ciphertext - keys
|
|
# Make my own function to decrypt the ciphertext
|
|
def decrypt(ciphertext, keys):
|
|
plaintext = ""
|
|
for num,char in enumerate (ciphertext):
|
|
plaintext += chr((ord(char) - ord(keys[num % len(keys)])) % 127)
|
|
|
|
return plaintext
|
|
|
|
# keys = ciphertext - plaitext
|
|
# Find the key by using known string attack
|
|
# Then I found out that the key is raja
|
|
known_string = b64encode("IDCC{")
|
|
keys = ""
|
|
for num,char in enumerate (known_string):
|
|
keys += chr((ord(ciphertext[num]) - ord(char)) % 127)
|
|
|
|
# Run the decrypt function the decode it
|
|
keys = "raja"
|
|
flag = b64decode(decrypt(ciphertext, keys))
|
|
print ("Flag: {f}".format(f = flag))
|