x32 Advanced

Aperi'CTF 2019 - MISC (175 pts).

Aperi’CTF 2019: x32 Advanced

Challenge details

Event Challenge Category Points Solves
Aperi’CTF 2019 x32 Advanced MISC 175 11

Maintenant que vous vous êtes fait la main, prouvez que vous êtes à la hauteur de votre mission. Votre tâche est d’écrire un programme qui récupérera 30 caractères de STDIN et appliquera l’opération XOR avec la clé “X” avant d’afficher le résultat sur STDOUT.

nc x32.aperictf.fr 32322

Note : Lisez la documentation de ce langage avant de commencer.
Ressource complémentaire : la documentation - md5sum: 5ac1ef34b4641b319281e65d80e84411

Methodology

This task is a little bit more complicated and requires the use of almost every x32 instructions.

There can be multiple solutions but the following code performs the desired operation :

---- START ----
set A1, 0x1E
sub SP, 0x1E
in SP
set R4, SP      # stores a reference to the buffer
set R3, 0x0     # counter
<for_loop>      # label definition
set R2, R4
add R2, R3
load R1, R2     # takes byte of the input starting from the top
xor R1, 0x58    # 0x58 = 'X'
store R2, R1    # overwrite the byte on the stack
add R3, 0x1     # move on to the next one
cmp R3, 0x1F    # reached the end ?
jl for_loop     # if not, loop
out R4          # print the result
---- END ----
Test 1/10 : SUCCESS
Test 2/10 : SUCCESS
Test 3/10 : SUCCESS
Test 4/10 : SUCCESS
Test 5/10 : SUCCESS
Test 6/10 : SUCCESS
Test 7/10 : SUCCESS
Test 8/10 : SUCCESS
Test 9/10 : SUCCESS
Test 10/10 : SUCCESS
Your code passed all the tests, here you go :
APRK{1_Th1nk_Y0u_4r3_r34dy_f0r_Th15}

Flag

APRK{1_Th1nk_Y0u_4r3_r34dy_f0r_Th15}

ENOENT