HACKvent 2015: Day 2
Challenge
Clue: I wonder if this is the native language of one of you!
pagh wa'vatlh netlh wa'maH wa'maH wa' SaD wa' SaD wa'vatlh wa' wa'maH wa'maH wa'vatlh wa'maH wa' wa'maH wa'maH netlh pagh wa'maH wa' wa'vatlh wa' wa'vatlh SaD SaD wa' wa'vatlh netlh wa'maH wa' wa'maH wa'maH wa'vatlh wa' wa'maH wa'maH wa' wa' wa'vatlh SaD wa' wa'maH wa'maH wa'maH wa'vatlh wa'maH SaD wa'maH wa' wa'maH wa'maH wa' wa' wa' wa'maH wa'vatlh wa' wa'vatlh wa' SaD wa' SaD wa'maH wa' wa' wa'maH wa' SaD wa'maH wa' wa'maH wa'maH wa'vatlh wa'maH wa' wa'vatlh wa' wa'maH wa' wa' wa'maH wa' netlh wa'maH wa'vatlh wa' wa' wa' wa'vatlh wa'maH wa' wa'maH wa'maH SaD wa' wa'vatlh wa'maH SaD wa'vatlh wa' wa'maH SaD wa' wa'maH SaD
Solution
After some Googling I realise this is the Klingon language from Star Trek.
I try some online translators (including Bing!) and it is clear that the message is a series of numbers that contain 0 or 1 only.
This is most likely binary that represents ASCII text.
I write a small script to convert each component in the text (based on a Klingon number guide):
import sys
text = """pagh wa'vatlh netlh wa'maH wa'maH wa' SaD wa' SaD wa'vatlh wa' wa'maH wa'maH wa'vatlh wa'maH wa' wa'maH wa'maH netlh pagh wa'maH wa' wa'vatlh wa' wa'vatlh SaD SaD wa' wa'vatlh netlh wa'maH wa' wa'maH wa'maH wa'vatlh wa' wa'maH wa'maH wa' wa' wa'vatlh SaD wa' wa'maH wa'maH wa'maH wa'vatlh wa'maH SaD wa'maH wa' wa'maH wa'maH wa' wa' wa' wa'maH wa'vatlh wa' wa'vatlh wa' SaD wa' SaD wa'maH wa' wa' wa'maH wa' SaD wa'maH wa' wa'maH wa'maH wa'vatlh wa'maH wa' wa'vatlh wa' wa'maH wa' wa' wa'maH wa' netlh wa'maH wa'vatlh wa' wa' wa' wa'vatlh wa'maH wa' wa'maH wa'maH SaD wa' wa'vatlh wa'maH SaD wa'vatlh wa' wa'maH SaD wa' wa'maH SaD"""
for word in text.split():
if word == "pagh":
sys.stdout.write(str(0))
elif word == "wa'maH":
sys.stdout.write(str(10))
elif word == "wa'vatlh":
sys.stdout.write(str(100))
elif word == "wa'":
sys.stdout.write(str(1))
elif word == "SaD":
sys.stdout.write(str(1000))
elif word == "netlh":
sys.stdout.write(str(10000))
else:
print "ERROR! Unknown"
This prints out some binary:
0100100001010110001100010011010100101101010000010110011001000100011001000010110101001101011100100011010101001010001011010111101001100110001100010111011000101101010010110011011101100001010011110010110101000110010100010011010001101000
Total number of bits is 232 and 232/8 bits = 29 bytes.
This is exactly the number of characters in our nugget!
We convert the binary to ASCII and get the flag:
HV15-AfDd-Mr5J-zf1v-K7aO-FQ4h