Gotta Decrypt Them All
You are stuck in another dimension while you were riding Solgaleo. You have Rotom-dex with you to contact your friends but he won’t activate the GPS unless you can prove yourself to him. He is going to give you a series of phrases that only you should be able to decrypt and you have a limited amount of time to do so. Can you decrypt them all?
nc crypto.chal.csaw.io 5001
A direct way
Get the numbers
When connecting to that server at port 5001, this is received:
1
2
3
$ nc crypto.chal.csaw.io 5001
What does this mean?
---.. ....- /.---- ----- ..... /-.... ..... /..... --... /--... ...-- /-.... ---.. /.---- ----- ...-- /.---- ..--- .---- /--... --... /.---- ..--- ..--- /.---- ----- --... /.---- ..--- .---- /--... --... /-.... ---.. /-.... ..... /.---- ..--- ----- /--... --... /-.... ---.. /--... ...-- /.---- ..--- ..--- /--... ---.. /.---- ----- -.... /---.. ..... /....- ----. /--... --... /.---- ..--- ..--- /----. ----. /.---- .---- ----. /--... ----. /---.. ....- /---.. .---- /..... ..--- /--... ----. /---.. ....- /---.. ----. /..... ..--- /--... --... /-.... ---.. /-.... ----. /.---- ..--- ----- /--... ----. /-.... ---.. /.---- ----- --... /..... .---- /--... ---.. /---.. ....- /-.... ----. /..... ...-- /--... ---.. /-.... ---.. /---.. ----. /..... ----- /--... ---.. /.---- ..--- ..--- /-.... ..... /.---- ..--- .---- /--... ----. /-.... ---.. /-.... ..... /..... ----- /--... ---.. /---.. ....- /.---- ----- --... /.---- ..--- .---- /--... ---.. /---.. ....- /.---- ----- --... /..... ----- /--... --... /---.. ....- /---.. .---- /.---- .---- ----. /--... --... /-.... ---.. /-.... ----. /.---- ..--- ----- /--... ---.. /.---- ..--- ..--- /---.. ..... /.---- .---- ----. /--... ----. /-.... ---.. /--... ...-- /..... ...-- /--... ---.. /-.... ---.. /---.. ..... /.---- ..--- ----- /--... --... /---.. ....- /---.. .---- /.---- .---- ----. /--... --... /.---- ..--- ..--- /---.. ----. /..... ----- /--... ----. /---.. ....- /--... ...-- /....- ---.. /--... ----. /---.. ....- /---.. .---- /..... ..--- /--... ----. /---.. ....- /-.... ----. /..... .---- /--... ---.. /.---- ----- -.... /-.... ..... /.---- .---- ----. /--... ---.. /.---- ----- -.... /.---- ----- --... /..... ...-- /--... ----. /-.... ---.. /.---- ----- ...-- /.---- .---- ----. /--... ---.. /.---- ----- -.... /---.. ..... /..... ----- /--... ---.. /.---- ----- -.... /.---- ----- ...-- /..... ...-- /--... ---.. /---.. ....- /---.. ..... /.---- ..--- .---- /--... ---.. /---.. ....- /--... ...-- /.---- .---- ----. /--... ---.. /-.... ---.. /--... ...-- /..... ..--- /--... ---.. /.---- ----- -.... /--... --... /..... ...-- /--... ---.. /-.... ---.. /-.... ----. /.---- ..--- .---- /--... ---.. /-.... ---.. /---.. ----. /....- ----. /--... ---.. /.---- ..--- ..--- /---.. ----. /.---- ..--- ----- /--... --... /.---- ----- -.... /.---- ----- ...-- /....- ----. /--... ---.. /---.. ....- /--... --... /..... ----- /--... ----. /-.... ---.. /.---- ----- ...-- /..... ----- /--... ---.. /.---- ----- -.... /--... ...-- /....- ----. /--... ----. /---.. ....- /--... --... /.---- ..--- ..--- /--... ----. /---.. ....- /----. ----. /..... ...-- /--... --... /.---- ..--- ..--- /.---- ----- ...-- /....- ---.. /--... ---.. /.---- ..--- ..--- /---.. ----. /.---- .---- ----. /--... ----. /-.... ---.. /--... ...-- /.---- ..--- ----- /--... ---.. /.---- ----- -.... /--... ...-- /.---- ..--- ----- /--... --... /.---- ..--- ..--- /--... ...-- /..... .---- /--... ---.. /.---- ----- -.... /-.... ..... /..... ----- /--... --... /---.. ....- /-.... ..... /..... .---- /--... --... /---.. ....- /-.... ..... /..... ----- /--... ---.. /.---- ----- -.... /--... --... /.---- ..--- ..--- /--... ----. /---.. ....- /---.. ----. /.---- ..--- ----- /--... ---.. /.---- ----- -.... /.---- ----- ...-- /....- ----. /--... --... /.---- ----- -.... /.---- ----- --... /..... ...-- /--... --... /---.. ....- /--... ...-- /....- ----. /--... ---.. /---.. ....- /---.. ..... /..... ..--- /--... ---.. /.---- ..--- ..--- /--... --... /..... ...-- /--... ---.. /---.. ....- /.---- ----- --... /....- ---.. /--... ---.. /.---- ..--- ..--- /--... ...-- /..... ----- /--... ---.. /---.. ....- /---.. .---- /..... ...-- /--... ---.. /.---- ----- -.... /-.... ..... /....- ----. /--... --... /.---- ..--- ..--- /---.. ----. /.---- ..--- .---- /--... ---.. /.---- ----- -.... /-.... ----. /.---- ..--- ----- /--... ---.. /.---- ..--- ..--- /---.. ..... /....- ----. /--... ----. /---.. ....- /-.... ..... /....- ----. /--... ---.. /.---- ..--- ..--- /----. ----. /.---- ..--- ..--- /--... --... /-.... ---.. /---.. ..... /....- ----. /--... ---.. /---.. ....- /.---- ----- ...-- /....- ----. /--... ---.. /.---- ----- -.... /.---- ----- ...-- /.---- ..--- .---- /--... ----. /---.. ....- /-.... ..... /.---- .---- ----. /--... --... /---.. ....- /---.. ----. /..... ...-- /--... --... /---.. ....- /.---- ----- --... /.---- .---- ----. /--... ----. /---.. ....- /.---- ----- --... /....- ----. /--... --... /-.... ---.. /--... ...-- /..... ----- /--... ---.. /.---- ----- -.... /---.. .---- /.---- ..--- ..--- /--... --... /-.... ---.. /.---- ----- ...-- /..... ...-- /--... --... /.---- ----- -.... /-.... ----. /.---- .---- ----. /--... ----. /---.. ....- /---.. .---- /.---- ..--- ----- /--... ---.. /.---- ..--- ..--- /---.. ----. /.---- ..--- ..--- /--... --... /.---- ..--- ..--- /----. ----. /....- ---.. /--... ---.. /.---- ----- -.... /---.. .---- /....- ----. /--... --... /.---- ..--- ..--- /---.. ..... /.---- ..--- .---- /--... ----. /-.... ---.. /.---- ----- --... /..... .---- /--... ---.. /.---- ----- -.... /---.. ..... /....- ----. /--... ---.. /-.... ---.. /-.... ----. /..... ..--- /--... ---.. /-.... ---.. /---.. ..... /..... ----- /--... --... /-.... ---.. /--... --... /.---- .---- ----. /--... --... /-.... ---.. /---.. ..... /.---- .---- ----. /--... ---.. /-.... ---.. /-.... ..... /..... ...-- /--... ----. /---.. ....- /-.... ..... /..... ..--- /--... --... /.---- ..--- ..--- /--... --... /.---- ..--- ----- /--... ---.. /.---- ..--- ..--- /-.... ..... /.---- ..--- ..--- /--... ----. /---.. ....- /.---- ----- --... /..... ...-- /--... ---.. /---.. ....- /.---- ----- --... /....- ----. /--... --... /.---- ..--- ..--- /-.... ----. /..... ----- /--... ----. /-.... ---.. /--... --... /..... ----- /--... ---.. /.---- ----- -.... /--... ...-- /..... ----- /--... --... /-.... ---.. /.---- ----- ...-- /.---- .---- ----. /--... --... /-.... ---.. /-.... ..... /.---- ..--- ----- /--... --... /-.... ---.. /--... ...-- /..... .---- /--... ---.. /-.... ---.. /-.... ----. /..... ...-- /-.... --... /.---- ----- ----. /---.. ..... /.---- ----- ...-- /---.. ----- /---.. ...-- /-.... ..... /.---- ..--- ..--- /-.... --... /.---- ----- ----. /--... --... /.---- ----- ...-- /---.. ----- /---.. ...-- /-.... ..... /.---- ..--- ----- /--... ---.. /---.. ....- /--... ...-- /.---- ..--- ----- /--... ---.. /.---- ----- -.... /----. ----. /....- ---.. /--... --... /.---- ----- -.... /---.. .---- /.---- ..--- .---- /--... ---.. /.---- ..--- ..--- /--... --... /..... ...-- /--... ---.. /.---- ..--- ..--- /----. ----. /....- ---.. /--... --... /.---- ..--- ..--- /---.. ----. /..... .---- /--... --... /-.... ---.. /--... ...-- /..... ..--- /--... ----. /---.. ....- /-.... ..... /.---- ..--- .---- /--... ---.. /.---- ..--- ..--- /--... --... /.---- ..--- .---- /--... ---.. /.---- ..--- ..--- /---.. .---- /....- ----. /--... --... /-.... ---.. /-.... ----. /..... .---- /--... --... /.---- ..--- ..--- /---.. .---- /.---- .---- ----. /--... --... /---.. ....- /--... ...-- /..... .---- /--... ---.. /.---- ----- -.... /---.. ..... /..... ..--- /--... ----. /-.... ---.. /--... ...-- /....- ---.. /--... ----. /-.... ---.. /----. ----. /.---- .---- ----. /--... --... /-.... ---.. /.---- ----- ...-- /.---- ..--- ..--- /--... --... /.---- ..--- ..--- /.---- ----- ...-- /..... ...-- /--... ---.. /.---- ..--- ..--- /--... --... /.---- ..--- .---- /--... --... /.---- ..--- ..--- /--... ...-- /....- ----. /--... --... /-.... ---.. /--... ...-- /.---- ..--- ----- /--... ---.. /.---- ..--- ..--- /-.... ..... /.---- ..--- ..--- /--... ---.. /---.. ....- /---.. ----. /.---- ..--- ..--- /--... ---.. /.---- ..--- ..--- /---.. ..... /.---- ..--- ----- /--... ---.. /-.... ---.. /.---- ----- ...-- /..... ..--- /--... --... /---.. ....- /.---- ----- ...-- /..... ----- /--... --... /-.... ---.. /.---- ----- --... /..... ----- /--... --... /.---- ----- -.... /-.... ----. /..... ..--- /--... ---.. /.---- ----- -.... /--... --... /..... ...-- /--... ---.. /.---- ..--- ..--- /---.. ..... /.---- ..--- .---- /--... ---.. /---.. ....- /---.. ----. /-.... .----
That seems Morse. After decoding it (with .
=short and -
=long), we get:
1
84 105 65 57 73 68 103 121 77 122 107 121 77 68 65 120 77 68 73 122 78 106 85 49 77 122 99 119 79 84 81 52 79 84 89 52 77 68 69 120 79 68 107 51 78 84 69 53 78 68 89 50 78 122 65 121 79 68 65 50 78 84 107 121 78 84 107 50 77 84 81 119 77 68 69 120 78 122 85 119 79 68 73 53 78 68 85 120 77 84 81 119 77 122 89 50 79 84 73 48 79 84 81 52 79 84 69 51 78 106 65 119 78 106 107 53 79 68 103 119 78 106 85 50 78 106 103 53 78 84 85 121 78 84 73 119 78 68 73 52 78 106 77 53 78 68 69 121 78 68 89 49 78 122 89 120 77 106 103 49 78 84 77 50 79 68 103 50 78 106 73 49 79 84 77 122 79 84 99 53 77 122 103 48 78 122 89 119 79 68 73 120 78 106 73 120 77 122 73 51 78 106 65 50 77 84 65 51 77 84 65 50 78 106 77 122 79 84 89 120 78 106 103 49 77 106 107 53 77 84 73 49 78 84 85 52 78 122 77 53 78 84 107 48 78 122 73 50 78 84 81 53 78 106 65 49 77 122 89 121 78 106 69 120 78 122 85 49 79 84 65 49 78 122 99 122 77 68 85 49 78 84 103 49 78 106 103 121 79 84 65 119 77 84 89 53 77 84 107 119 79 84 107 49 77 68 73 50 78 106 81 122 77 68 103 53 77 106 69 119 79 84 81 120 78 122 89 122 77 122 99 48 78 106 81 49 77 122 85 121 79 68 107 51 78 106 85 49 78 68 69 52 78 68 85 50 77 68 77 119 77 68 85 119 78 68 65 53 79 84 65 52 77 122 77 120 78 122 65 122 79 84 107 53 78 84 107 49 77 122 69 50 79 68 77 50 78 106 73 50 77 68 103 119 77 68 65 120 77 68 73 51 78 68 69 53 67 109 85 103 80 83 65 122 67 109 77 103 80 83 65 120 78 84 73 120 78 106 99 48 77 106 81 121 78 122 77 53 78 122 99 48 77 122 89 51 77 68 73 52 79 84 65 121 78 122 77 121 78 122 81 49 77 68 69 51 77 122 81 119 77 84 73 51 78 106 85 52 79 68 73 48 79 68 99 119 77 68 103 122 77 122 103 53 78 122 77 121 77 122 73 49 77 68 73 120 78 122 65 122 78 84 89 122 78 122 85 120 78 68 103 52 77 84 103 50 77 68 107 50 77 106 69 52 78 106 77 53 78 122 85 121 78 84 89 61
That can be converted into ASCII:
1
TiA9IDExNTQyNTk5NDQ5Mzk3MDg2MzYwNjIwNTg4NjQ5Mjc2MDIxNjMyNTA2ODg2ODMzMTg3NDk1MjE1Nzk0MDY2NjcwMTEzNjg2MTU2MDEyNjA2OTY1MDY0OTY1NDcyNTQzNDM4OTM2MjExMDg1NTk0NzE2NjA0NzIxNTI2MTk2NTMxMTI2NDcyOTc2NDg1MjMxODQ5NzAzNTEzNDMzODEyOTI4MDE0ODkxNTgyMjg1NDI0MjczNjk4NTMyMzg4MDMyNDc2NTcwNzM2Mjk4MzcwMTE1MDE0NTU2NDAwMzg1NzYzMjUyNTczODc3NzQyNzQ1MjAzNjk3MDc0NjY0MjQ5NDYzNTY0ODc0ODYyMTUwODU4MTA2MDM5NzAwMjM3NjE0OTA4NDU2NTgwMjM2OTU3ODY1MzUxOQplID0gMwpjID0gMTUyMTY3NDI0MjczOTc3NDM2NzAyODkwMjczMjc0NTAxNzM0MDEyNzY1ODgyNDg3MDA4MzM4OTczMjMyNTAyMTcwMzU2Mzc1MTQ4ODE4NjA5NjIxODYzOTc1MjU2Cg==
Now it seems Base64 encoded. If we decode it, we’ll get these parameters:
1
2
3
N = 115425994493970863606205886492760216325068868331874952157940666701136861560126069650649654725434389362110855947166047215261965311264729764852318497035134338129280148915822854242736985323880324765707362983701150145564003857632525738777427452036970746642494635648748621508581060397002376149084565802369578653519
e = 3
c = 152167424273977436702890273274501734012765882487008338973232502170356375148818609621863975256
Since we’re in a crypto challenge, this notation suggests RSA. Said public-key cryptosystem is based on this operation:
\[c = p^e \pmod n\]Attack RSA
In this case, the exponent $ e=3 $ is too low that $ p $ is susceptible to being obtained by calculating the $ e $ -th root of $ c $ (that’s known as the “cube-root RSA attack”):
\[p = \sqrt[e]{c} \quad (\text{if }p^e < n)\]Using RsaCtfTool:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ python3 RsaCtfTool.py --verbosity DEBUG --attack cube_root -n $N -e $e --uncipher $c
private argument is not set, the private key will not be displayed, even if recovered.
[*] Testing key /tmp/tmp5rna7l4c.
[*] Performing cube_root attack on /tmp/tmp5rna7l4c.
Results for /tmp/tmp5rna7l4c:
Unciphered data :
HEX : 0x436278727a626120416e7a7266
INT (big endian) : 5338762031123926997889413968486
INT (little endian) : 8116701877186273491947517141571
utf-8 : Cbxrzba Anzrf
STR : b'Cbxrzba Anzrf'
Get the flag
Those two words may be Caesar-encoded… Let’s try to decode them with ROT13:
1
Pokemon Names
So now we know that, if we apply ROT13-decoding to that $ p $ number we obtained before (expressed as a string in UTF8), we get some words that make sense.
Input will change 5 more times (if we repeat all this process to every input, names like “Wobbuffet”, “Forretress”, “Bouffalant”, “Froakie” and “Bergmite” will be revealed). After sending each result as a response to each input crypto.chal.csaw.io:5001 gives to us, we finally get the flag from the server:
1
flag{We're_ALrEadY_0N_0uR_waY_7HE_j0UrnEY_57aR75_70day!}
Alternative ways
Gotta script them all
Just running this script pokemon_names.py
:
1
2
3
4
5
6
7
$ python3 pokemon_names.py
Pokemon Names
Wobbuffet
Arctovish
Bouffalant
Froakie
Arctozolt
Gotta chef them first
Gotta pipe them all
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat morse.sed
# based on https://stackoverflow.com/a/60139038
# .=short -=long
s/-----/0/g
s/\.----/1/g
s/\.\.---/2/g
s/\.\.\.--/3/g
s/\.\.\.\.-/4/g
s/\.\.\.\.\./5/g
s/-\.\.\.\./6/g
s/--\.\.\./7/g
s/---\.\./8/g
s/----\./9/g
$ export $(grep -v What input | sed 's/\//\n/g' | sed -Ef morse.sed | sed 's/ //g' | awk -F_ '{printf("%c",$0)}' | base64 -d | sed 's/ //g')
$ python RsaCtfTool.py --attack cube_root -n $N -e $e --uncipher $c | grep utf-8 | tr 'A-Za-z' 'N-ZA-Mn-za-m' | awk '{$1="";$2="";print $0}'
Pokemon Names