# Reverse

# 快来签到

打开 ida 之后报错,提示 The graph is too big,我们在 general 里面把 Max number of nodes 改成 999999 就就可以看到了

NepCTF{welc0me_t0_nepctf}

# We_can_go

直接看关键函数

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
int sub_719630()
{
int i; // edx
int result; // eax
_DWORD *v2; // [esp+4h] [ebp-60h]
_BYTE *v3; // [esp+Ch] [ebp-58h]
int v4; // [esp+10h] [ebp-54h]
char v5[32]; // [esp+20h] [ebp-44h] BYREF
_DWORD *v6; // [esp+40h] [ebp-24h]
int v7[2]; // [esp+44h] [ebp-20h] BYREF
int v8[2]; // [esp+4Ch] [ebp-18h] BYREF
int v9[2]; // [esp+54h] [ebp-10h] BYREF
int v10[2]; // [esp+5Ch] [ebp-8h] BYREF
void *retaddr; // [esp+64h] [ebp+0h] BYREF

if ( &retaddr <= *(*NtCurrentTeb()->NtTib.ArbitraryUserPointer + 8) )
sub_6D82C0();
sub_68AC70(&unk_7233C0);
v6 = v2;
v2[1] = 0;
*v2 = 0;
v10[0] = &unk_7200A0;
v10[1] = v2;
sub_713D80(&off_7525B8, dword_7CB200, v10, 1, 1);
sub_6C79B0(v5, *v6, v6[1]);
if ( v4 == '\x17'
&& *v3 == 'N'
&& v3[1] == 'e'
&& v3[2] == 'p'
&& v3[3] == 'C'
&& v3[4] == 'T'
&& v3[5] == 'F'
&& v3[6] == '{'
&& v3[22] == '}' )
{
for ( i = 0; i < 15; ++i )
{
if ( i >= dword_7CB6E4 )
sub_6D9750();
if ( i + 7 >= '\x17' )
sub_6D9750();
if ( v3[i + 7] != *(dword_7CB6E0 + i) )
{
v8[0] = &unk_7233C0;
v8[1] = &off_752334;
return sub_70D8C0(&off_7525CC, dword_7CB204, v8, 1, 1);
}
}
v7[0] = &unk_7233C0;
v7[1] = &off_75233C;
result = sub_70D8C0(&off_7525CC, dword_7CB204, v7, 1, 1);
}
else
{
v9[0] = &unk_7233C0;
v9[1] = &off_752334;
result = sub_70D8C0(&off_7525CC, dword_7CB204, v9, 1, 1);
}
return result;
}

42 行的判断是关键语句,dword_7CB6E0 就是我们需要的数据,在这里下一个断点,动调一下就可以看到

NepCTF{U9eT_t0_th3TRUE}