HACKCTF - Welcome_REV
2020. 7. 11. 13:53ㆍCTF's Write-up
해당 파일을 받아서 파일에 대해서 알아보면
32비트 파일인것을 확인합니다.
이를 실행시켜보면
실행하면 password!를 제공해달라고합니다.
인자로 값을 넣어주면 맞는지 아닌지 확인 후에 결과를 알려주는군요.
이를 ida로 분석해보면
8번쨰 줄에 check_password라는 함수가 있습니다.
이를 따라 들어가보면
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
cint __cdecl check_password(char *a1)
{
void *v1; // esp
int v2; // eax
int v3; // eax
int v4; // eax
int v5; // eax
int v6; // eax
int v7; // eax
int v8; // eax
int v9; // eax
int v10; // eax
int v11; // eax
int v13; // [esp+0h] [ebp-48h]
char *s; // [esp+Ch] [ebp-3Ch]
int v15; // [esp+10h] [ebp-38h]
int v16; // [esp+14h] [ebp-34h]
int i; // [esp+18h] [ebp-30h]
int v18; // [esp+1Ch] [ebp-2Ch]
size_t n; // [esp+20h] [ebp-28h]
int v20; // [esp+24h] [ebp-24h]
char *s1; // [esp+28h] [ebp-20h]
int v22; // [esp+2Ch] [ebp-1Ch]
int v23; // [esp+30h] [ebp-18h]
int v24; // [esp+34h] [ebp-14h]
unsigned int v25; // [esp+38h] [ebp-10h]
unsigned int v26; // [esp+3Ch] [ebp-Ch]
s = a1;
v26 = __readgsdword(0x14u);
v18 = strlen(a1);
n = 4 * ((v18 + 2) / 3);
v20 = 4 * ((v18 + 2) / 3);
v1 = alloca(16 * ((4 * ((v18 + 2) / 3) + 16) / 0x10u));
s1 = (char *)&v13;
v15 = 0;
v16 = 0;
while ( v15 < v18 )
{
if ( v15 >= v18 )
{
v3 = 0;
}
else
{
v2 = v15++;
v3 = (unsigned __int8)s[v2];
}
v22 = v3;
if ( v15 >= v18 )
{
v5 = 0;
}
else
{
v4 = v15++;
v5 = (unsigned __int8)s[v4];
}
v23 = v5;
if ( v15 >= v18 )
{
v7 = 0;
}
else
{
v6 = v15++;
v7 = (unsigned __int8)s[v6];
}
v24 = v7;
v25 = (v23 << 8) + (v22 << 16) + v7;
v8 = v16++;
s1[v8] = alphabet[(v25 >> 18) & 0x3F];
v9 = v16++;
s1[v9] = alphabet[(v25 >> 12) & 0x3F];
v10 = v16++;
s1[v10] = alphabet[(v25 >> 6) & 0x3F];
v11 = v16++;
s1[v11] = alphabet[v25 & 0x3F];
}
for ( i = 0; mod[v18 % 3] > i; ++i )
s1[n - 1 - i] = 61;
return strncmp(s1, "SGFja0NURnt3M2xjMG0zXzcwX3IzdjNyNTFuNl93MHJsZEBfQCFfIX0=", n);
}
|
cs |
위와 같은 코드를 발견할 수 있습니다.
많은 계산이 진행된 후 마지막에 SGFSGFja0NURnt3M2xjMG0zXzcwX3IzdjNyNTFuNl93MHJsZEBfQCFfIX0= 를 출력해주는데 이게 FLAG같은 느낌이 들고, "="을 보아서 base64 디코딩을 해보면
위와 같이 FLAG를 획득할 수 있습니다.
'CTF's Write-up' 카테고리의 다른 글
HACKCTF - BF (0) | 2020.07.13 |
---|---|
HACKCTF - Who am I? (0) | 2020.07.12 |
HACKCTF - x64 Buffer Overflow (0) | 2020.07.10 |
HACKCTF - Button (0) | 2020.07.09 |
HACKCTF - Home (0) | 2020.07.09 |