We start by downloading the provided file.
After inspecting it with
do {
if (uVar8 == 35) goto LAB_00202664;
if (uVar8 < 35) {
cVar1 = *(char *)((long)&local_58 + uVar8);
switch(uVar8) {
case 0:
case 32:
if (cVar1 != 'p') goto LAB_00202677;
break;
case 1:
if (cVar1 != 'i') {
LAB_00202677:
uVar12 = 7;
pcVar16 = "Wrong!\n";
do {
local_78[0] = 1;
sVar4 = FUN_00202714(local_78,pcVar16,uVar12);
if (sVar4 != 0) {
LAB_002025e0:
uVar12 = *(undefined8 *)(&DAT_002006c8 + (long)sVar4 * 0x10);
uVar3 = *(undefined8 *)(&DAT_002006d0 + (long)sVar4 * 0x10);
local_70[0] = 2;
FUN_0020284a(&DAT_00207104);
local_78[0] = 2;
sVar4 = FUN_00202714(local_78,"error: {s}\n",7);
if ((sVar4 == 0) &&
(sVar4 = FUN_0020291a(uVar12,uVar3,&DAT_002006a0,local_70), sVar4 == 0)) {
local_58 = CONCAT44(local_58._4_4_,2);
FUN_00202714(&local_58,"\n",1);
}
FUN_00202888(&DAT_00207104);
}
syscall();
LAB_00202664:
uVar12 = 9;
pcVar16 = "Correct!\n";
} while( true );
}
break;
case 2:
if (cVar1 != 'n') goto LAB_00202677;
break;
case 3:
if (cVar1 != 'g') goto LAB_00202677;
break;
case 4:
if (cVar1 != '{') goto LAB_00202677;
break;
case 5:
if (cVar1 != 'z') goto LAB_00202677;
break;
case 6:
case 9:
if (cVar1 != '1') goto LAB_00202677;
break;
case 7:
if (cVar1 != 'G') goto LAB_00202677;
break;
default:
if (cVar1 != '_') goto LAB_00202677;
break;
case 10:
if (cVar1 != 'S') goto LAB_00202677;
break;
case 12:
if (cVar1 != 'v') goto LAB_00202677;
break;
case 13:
case 23:
if (cVar1 != '3') goto LAB_00202677;
break;
case 14:
if (cVar1 != 'R') goto LAB_00202677;
break;
case 15:
if (cVar1 != 'Y') goto LAB_00202677;
break;
case 17:
if (cVar1 != 'C') goto LAB_00202677;
break;
case 18:
if (cVar1 != '0') goto LAB_00202677;
break;
case 19:
case 30:
if (cVar1 != 'O') goto LAB_00202677;
break;
case 20:
case 33:
if (cVar1 != 'l') goto LAB_00202677;
break;
case 22:
case 31:
if (cVar1 != '2') goto LAB_00202677;
break;
case 24:
if (cVar1 != '4') goto LAB_00202677;
break;
case 25:
if (cVar1 != 'm') goto LAB_00202677;
break;
case 26:
case 28:
if (cVar1 != 'K') goto LAB_00202677;
break;
case 27:
case 29:
if (cVar1 != 'I') goto LAB_00202677;
break;
case 34:
if (cVar1 != '}') goto LAB_00202677;
}
}
uVar8 = uVar8 + 1;
} while( true );
We can see that the program iterates from
This means we can reverse the flag by checking which characters are at what index.
0 p
1 i
2 n
3 g
4 {
5 z
6 1
7 G
8 _
9 1
10 S
11 _
12 v
13 3
14 R
15 Y
16 _
17 C
18 0
19 O
20 l
21 _
22 2
23 3
24 4
25 m
26 K
27 I
28 K
29 I
30 O
31 2
32 p
33 l
34 }
This gives us the flag.