#include<stdio.h>
int main()
{
int j = 0;
int i =80;
int op[] =
{
0x8,0x1,0x0,0x8,0x3,0x46,0xe,0x15,0xa,0x1,
0x9,0x2,0xb,0xa,0x1,0xa,0x2,0x9,0x1,0x11,
0x1,0xd,0x1,0x3,0xf,0x8,0x8,0x1,0x0,0x8,0x3,
0x47,0xe,0x46,0xa,0x1,0x1a,0x2,0x6,0x1d,
0x1,0x4,0x14,0x2,0x1,0x19,0x1,0x2,0x1b,
0x1,0x1,0x1d,0x1,0x6e,0x13,0x1,0x63,0x15,
0x1,0x74,0x13,0x1,0x66,0x1c,0x2,0x1,0x9,
0x1,0x11,0x1,0xd,0x1,0x3,0xf,0x22,0x64 };
while (i--)
{
switch (op[j])
{
case 0x8:printf("%d\tmov\tR%d,%d\n", j, op[j+1]-1, op[j+2]); j += 3; break;
case 0x9:printf("%d\tpop\tR%d\n", j, op[j+1]-1); j += 2; break;
case 0xA:printf("%d\tpush\tR%d\n", j, op[j+1]-1); j += 2; break;
case 0xB:printf("%d\tR0=getchar()\n", j); j ++; break;
case 0xC:printf("%d\tR0=putchar()\n", j); j++; break;
case 0xD:printf("%d\tcmp\tR%d,R%d\n", j, op[j+1]-1, op[j+2]-1);
printf(" \tjnz\t%d\n",j+3);
printf(" \tmov\tv1,80\n"); j += 3; break;
case 0xE:printf("%d\tjmp\t%d\n", j,op[j+1]); j += 2; break;
case 0xF:printf("%d\tand\tv1,80\n", j);
printf("\ttest\tv1,v1\n");
printf("\tjnz\t%d\n", op[j + 1]); j += 2; break;
case 0x10:printf("%d\tand\tv1,80\n", j);
printf("\ttest\tv1,v1\n");
printf("\tjz\t%d\n", op[j + 1]); j += 2; break;
case 0x11:printf("%d\tinc\tR%d\n", j, op[j+1]-1); j += 2; break;
case 0x12:printf("%d\tdec\tR%d\n", j, op[j+1]-1); j += 2; break;
case 0x13:printf("%d\tadd\tR%d,%d\n", j, op[j+1]-1, op[j+2]); j += 3; break;
case 0x14:printf("%d\tsub\tR%d,R%d\n", j, op[j+1]-1, op[j+2]-1); j += 3; break;
case 0x15:printf("%d\txor\tR%d,%d\n", j, op[j+1]-1, op[j+2]); j += 3; break;
case 0x16:printf("%d\tand\tR%d,R%d\n", j, op[j+1]-1, op[j+2] - 1); j += 3; break;
case 0x17:printf("%d\tor\tR%d,R%d\n", j, op[j+1]-1, op[j+2] - 1); j += 3; break;
case 0x19:printf("%d\tmov\tR%d,R%d\n", j, op[j+1]-1, op[j+2] - 1); j += 3; break;
case 0x1A:printf("%d\tmov\tR%d,R%d\n", j, op[j+1]-1, op[j+2] - 1); j += 3; break;
case 0x1B:printf("%d\tmov\tR%d,[R%d]\n", j, op[j+1]-1, op[j+2] - 1); j += 3; break;
case 0x1C:printf("%d\tmov\t[R%d],%d\n", j, op[j+1]-1, op[j+2] - 1); j += 3; break;
case 0x1D:printf("%d\tmul\tR%d,%d\n", j, op[j+1]-1, op[j+2] ); j += 3; break;
}
}
return 0;
}
0 mov R0,0
3 mov R2,70
6 jmp 21
8 push R0
10 pop R1
12 R0=getchar()
13 push R0
15 push R1
17 pop R0
19 inc R0
21 cmp R0,R2
jnz 24
mov v1,80
24 and v1,80
test v1,v1
jnz 8
26 mov R0,0
29 mov R2,71
32 jmp 70
34 push R0
36 mov R1,R5
39 mul R0,4
42 sub R1,R0
45 mov R0,R1
48 mov R0,[R0]
51 mul R0,110
54 add R0,99
57 xor R0,116
60 add R0,102
63 mov [R1],0
66 pop R0
68 inc R0
70 cmp R0,R2
jnz 73
mov v1,80
73 and v1,80
test v1,v1
jnz 34
EXP:
enc = [0x36d3, 0x2aff, 0x2acb, 0x2b95, 0x2b95, 0x2b95, 0x169f, 0x186d, 0x18d7, 0x1611, 0x18d7, 0x2b95, 0x2c23, 0x2ca9,
0x1611, 0x1611, 0x18d7, 0x2aff, 0x1849, 0x18fb, 0x2acb, 0x2a71, 0x1735, 0x18d7, 0x1611, 0x2acb, 0x15dd, 0x18d7,
0x2c23, 0x169f, 0x15dd, 0x2b95, 0x169f, 0x156b, 0x186d, 0x2aff, 0x1611, 0x1611, 0x15dd, 0x2aff, 0x2c23, 0x2acb,
0x15dd, 0x15dd, 0x186d, 0x1849, 0x2b95, 0x156b, 0x1735, 0x18fb, 0x18fb, 0x2a71, 0x2aff, 0x1735, 0x2c23, 0x15dd,
0x18d7, 0x2a71, 0x18d7, 0x18d7, 0x2c23, 0x2aff, 0x156b, 0x2c23, 0x169f, 0x35af, 0x2ca9, 0x32b5, 0x2aff, 0x3039,
]
for i in range(len(enc) - 1, -1, -1):
print(chr((((enc[i] - 102) ^ 116) - 99) // 110), end='')
nctf{3e1ce77b70e4cb9941d6800aec022c813d03e70a274ba96c722fed72783dddac}