“We have intercepted the enemy’s communications, but unfortunately, some data was corrupted during transmission. Can you recover the message?” M4 UKW $ Gamma 2 4 $ 5 9 $ 14 3 $ 5 20 fv cd hu ik es op yl wq jm
“Ciphertext: zkrtwvvvnrkulxhoywoj” (Words in the flag are separated by underscores)
From the communication data format, it is clear that this challenge uses Enigma (the challenge title suggests the same too). However, there are dollar signs in a few places where we don’t know the machine configuration. The only choice is to brute-force through all possibilities and see for which combination we get an output in the correct flag format. For automating this, I used the
py-enigma package in Python.
from enigma.machine import EnigmaMachine reflectors = ['B-Thin', 'C-Thin'] rotors = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII'] for r1 in rotors: for r2 in rotors: for r3 in rotors: for r in reflectors: machine = EnigmaMachine.from_key_sheet( rotors=' '.join(['Gamma', r1, r2, r3]), reflector=r, ring_settings='D I C T', plugboard_settings='fv cd hu ik es op yl wq jm'.upper()) machine.set_display('BENE') temp = machine.process_text('zkrtwvvvnrkulxhoywoj') if 'CTF' in temp: print(temp, r1, r2, r3, r)
The output is
CSICTFNOSHITSHERLOCK I IV VII B-Thin.