题目描述
题目考点
"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)
解题思路
从通信数据格式来看,很明显,这个挑战使用了 Enigma(挑战标题也暗示了同样的内容)。但是,在一些我们不知道机器配置的地方有美元符号。唯一的选择是通过所有可能性进行暴力破解,看看我们以正确的标志格式获得哪种组合的输出。为了自动化这一点,我在 Python 中使用了 py-enigma 包。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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
.
Flag
1 | csictf{no_shit_sherlock} |