Lego Car Generator

暗号化プログラム (ELFファイル) encrypterと、暗号文secretが与えられた。
encrypterGhidraで逆コンパイルすると、以下のmain関数があった。

An encryption program (ELF file) encrypter and a encrypted file secret were given.
Decompiling encrypter via Ghidra, I found this function main:

main.c

暗号化は、1個4バイトの乱数を上位バイトから順にxorすることによって行われていた。
乱数生成器も逆コンパイル結果に含まれており、最初の乱数がわかれば続きもわかる仕様だった。

暗号文の最初がflagの最初ractを暗号化したものであると仮定すると、 暗号文とこのflagの最初の部分をxorすることで最初の乱数がわかる。
この値を利用し、以下のプログラムでxorする値の残りの部分を求めた。

The encryption is done by calculating exclusive-or of the plaintext and random values. The random values are 4 bytes each and used from the high byte.
Assuming that the first part of the ciphertext is the first part of the flag ract with encrypted, we can retrieve the first value of the random values by calculating exclusive-or of the ciphertext and the first part of the flag.
I calculated the left part of the random values via this program using the value:

get_key.pl

得られた乱数列と暗号文をCyberChefでxorすることで、flagが得られた。

I obtained the flag by calculating XOR of the random sequence and ciphertext via CyberChef.

ractf{CL04K_3NGa6ed}

RACTF 2021