The challenge only gives one file ciphertext.txt
containing:
3NK4Z 7X30H 631N7 U9KWN VE3BY NBCY5 13VX7 NTMMX CEKPB S8DL6
7BE9T 36M5G O74DZ EULNM 873K7 Z81OM YIC3P MO1ZE ZANFZ M57EW
[...]
Z75K7 BE5T8 NMAM2 7LAZD GK3YR 4W7FX 8KJH7 I27QE 3ZYLI ANP27
Y97XD KRA7R U72L5 7C5RW GXCUR WGXCU 0GQI8 LNHKX 0RXMU 7DUY
At first glance, we may believe that it’s a cipher using blocks of 5 alphanumeric characters, but the last block is only 4 characters. Let’s clean the input using the following Python script:
# Read ciphertext.txt content
with open("ciphertext.txt", "r") as f:
ciphertext = f.read()
# Cleanup spaces and line breaks
ciphertext = ciphertext.replace(" ", "")
ciphertext = ciphertext.replace("\n", "")
The ciphertext contains only 0-9 and A-Z characters. We try to decode base36, but it does not work.
Using dcode frequency analysis we notice that some characters are more used than others. It seems that we only need to guess the mapping between each plaintext char and ciphertext char. This is a Vigenere cipher.
Let’s go to dcode Vigenere key guesser,
and we configure our custom alphabet ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.
The tool retrieves the secret key: L33TV1G3NER3
and we get the plaintext!
At the end of the plaintext we notice a flag in french:
ENFAITTRESREMARQUABLEMENTDOUELEFLAGDUCHALLENGEESTLHUNDERSCOREL33TV1G3NER3UNDERSCOREF0RTH3W1N
The flag is:
lh_l33tv1g3ner3_f0rth3w1n