WolvCTF 2023 - Homework Help (rev)

I wrote a program to solve my math homework so I could find flags. Unfortunatly my program sucks at math and just makes me do it. It does find flags though

  • [93 solves / 265 points]

리버싱 문제에서 두! 번째로 솔브가 많아서 도전해봤다.

Analysis

분석하다보면 조금 어이없는데(?) 결국 분석해야할 함수는 하나다. _stack_chk_fail 함수이다. 함수명이 헷갈려서 IDA도 분석을 제대로 못해서 분석해야할 함수를 직관적으로 찾지 못했다. 이런 경우는 어셈블리를 직접 확인해야 정확하게 분석할 수 있다.

아무든 분석해야할 로직은 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
idx = 0LL;
for ( i = 0x41; ; i = v3[idx + 1] )
{
v3[0] ^= i;
if ( FLAG[idx] != v3[0] )
break;
if ( ++idx == ' ' )
{
puts("Well Done.");
goto LABEL_7;
}
}

break 되지 않으면 flag를 출력해준다. 이를 python으로 다시 재구현했다. 이때 v3 변수가 헷갈리게 아래처럼 정의되어 있어서 주의하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
v3[2] = 0x14;
*&v3[3] = 0x1200000017LL;
*&v3[5] = 0x500000001DLL;
*&v3[7] = 0x5D00000046LL;
*&v3[9] = 0x4100000042LL;
*&v3[11] = 0x330000006CLL;
*&v3[13] = 0x5A0000005DLL;
*&v3[15] = 0x3A0000000ELL;
*&v3[17] = 0x410000006ALL;
*&v3[19] = 0x5700000040LL;
*&v3[21] = 0x3400000008LL;
*&v3[23] = 0xB0000003CLL;
*&v3[25] = 0x3400000003LL;
*&v3[27] = 0x4600000028LL;
*&v3[29] = 0x530000005FLL;
*&v3[31] = 0x5000000010LL;
v3[0] = 0x36;

Solve

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
31
arr = [
0x1400000036,
0x1200000017,
0x500000001D,
0x5D00000046,
0x4100000042,
0x330000006C,
0x5A0000005D,
0x3A0000000E,
0x410000006A,
0x5700000040,
0x3400000008,
0x0B0000003C,
0x3400000003,
0x4600000028,
0x530000005F,
0x5000000010
]

arr2 = []

for i in arr:
arr2.append(i & 0xffffffff)
arr2.append(i >> 32)

current = arr2[0] ^ 0x41
print(chr(current), end='')

for i in range(1, len(arr2)):
current = current ^ arr2[i]
print(chr(current), end='')

첫 번째 반복문일 경우만 0x41을 xor 했으니 그 경우만 먼저 처리해주고 그 다음부터는 1부터 1씩 올려가면서 xor를 처리해주면 된다.

Flag

1
wctf{+m0r3_l1ke_5t4ck_chk_w1n=-}