picoCTF: Transformation

picoCTF, writeup, reverse-engineering

Info #

Problem link - picoCTF: Transformation

Solution #

An encrypted algorithm is used to encrypt a text. We need to reverse engineer it.

Here is the algorithm -

''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])

Here is the encrypted text -

flag = "灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸彥㜰㍢㐸㙽"

To understand the encryption algorithm, first break it down into multiple lines.

result = ""

for i in range(0, len(flag), 2):
	first_letter = ord(flag[i]) << 8
	second_letter = ord(flag[i + 1])
	final = chr(first+second)
	result+=final

print(result)

Looking at the above code, we understand -

Few other things to keep in mind -

Now, to explain the algorithm in short -

Each time two letters from the plain text is taken for encryption. They are getting converted into there integer value. Then one cipher text is getting generated, in which the first letter is saved at the first 8 bits. And the second letter is saved at the later 8 bit location.

We need to reverse engineer the above code. Basically, how to write the f-1() of the above function?

Here is the final code -

flag = "灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸彥㜰㍢㐸㙽"

output = ""

for i in flag:
	first_letter = chr(ord(i)>>8)
	second_letter = chr(ord(i)&255)
	output += first_letter+second_letter

print(output)

Flag #

Here is the flag -

picoCTF{16_bits_inst34d_of_8_e703b486}