#!/usr/bin/env nix-shell #!nix-shell -i python -p python3 # NOTE: the colors are used to keep track of which letters have been # already substituted, and which are still unknown. def green(s): return f"\033[42m{s}\033[0m" def red(s): return f"\033[41m{s}\033[0m" def substitute(cipher_text, substitution_map): for letter in cipher_text: if letter.lower() in substitution_map: if letter.isupper(): x = substitution_map[letter.lower()].upper() else: x = substitution_map[letter] print(green(x), end="") else: print(red(letter), end="") with open('message.txt', 'r') as file: enc = file.read() # Here, I will be slowly substituting the letters in the ciphertext # based on what I believe the words to be. I have commented out the # invocations of substitute, and commented the newly found letters # after each invocation. # Starting off, "pvncDCM{...}" looks like "picoCTF{...}" substitution_map = { '0': '0', '1': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9', '-': '-', '_': '_', '\n': '\n', ' ': ' ', ',': ',', '.': '.', ':': ':', ';': ';', '{': '{', '}': '}', 'p': 'p', 'v': 'i', 'n': 'c', 'c': 'o', 'd': 't', 'm': 'f', } # substitute(enc, substitution_map) # 'Dsu fxow ij' -> 'The flag is' substitution_map['d'] = 't' substitution_map['s'] = 'h' substitution_map['u'] = 'e' substitution_map['x'] = 'l' substitution_map['o'] = 'a' substitution_map['w'] = 'g' substitution_map['j'] = 's' # substitute(enc, substitution_map) # 'taligg all thiggs igto cogsifeaatiog' -> 'taking all things into consideration' # 'rhich' -> 'which' substitution_map['l'] = 'k' substitution_map['g'] = 'n' substitution_map['f'] = 'd' substitution_map['a'] = 'r' substitution_map['r'] = 'w' # substitute(enc, substitution_map) # 'roynd hlack spots' -> 'round black spots' # 'ekceedinglq' -> 'exceedingly' substitution_map['y'] = 'u' substitution_map['h'] = 'b' substitution_map['q'] = 'y' substitution_map['k'] = 'x' # substitute(enc, substitution_map) # 'iery reearkable' -> 'very remarkable' # 'pribe' -> 'pride' # 'Zupiter' -> 'Jupiter' substitution_map['i'] = 'v' substitution_map['e'] = 'm' substitution_map['b'] = 'd' substitution_map['z'] = 'j' substitute(enc, substitution_map)