FBCTF 2019 - matryoshka

main 함수 루틴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
main() {
for ( i = 7; i >= 0; --i )
v23 = (unsigned __int8)v11[i] | (v23 << 8);
for ( j = 15; j >= 8; --j )
v22 = (unsigned __int8)v11[j] | (v22 << 8);
for ( k = 23; k >= 16; --k )
v21 = (unsigned __int8)v11[k] | (v21 << 8);
for ( l = 27; l >= 24; --l )
v20 = (unsigned __int8)v11[l] | (v20 << 8);
v18 = v22 ^ v23;
v17 = v21 ^ v22;
v16 = v20 ^ v21;
v15 = v20 ^ 0x115C28DA834FEFFDLL;
if ( (v22 ^ v23) != 0x3255557376F68LL || v17 != 0x393B415F5A590044LL || v16 != 0x665F336B1A566B19LL || v15 != v19 )
{
printf("\nDOH!! try harder :( \n");
}
else
{
v6 = 3;
v5 = 0;
while ( v6 < 31 )
v12[v6++] = v11[v5++];
v13 = '\n';
printf("\n%s\n", v12);
printf("\nCongratulations!!\n");
printf("Created by @malwareunicorn\n");
}
exit(0);
}

v204bytes밖에 되지 않으므로 플래그 절반을 일단 알고 시작할 수 있다.

1
2
3
4
5
6
v20 : 0x00000000???????? "????"
v21 : 0x665F336B???????? "????k3_f"
v22 : 0x5f647234???????? "????4rd_"
v23 : 0x5f675761???????? "????aWg_"

flag : "????aWg_????4rd_????k3_f????"

첫번째는 rot13
두번째는 그냥 r00t
세번째는 LJcbuOQJ
네번째가 ????wT96인데
????에 따라서 v19값이 변하지만 v19가 0x115C28DA???????? 인걸 아니까 브포 가능
정답은 YrQmwT96

fb{Y0_daWg_1_h34rd_u_1ik3_fl4gs}

Share