starctf

Posted by marginal on 2022-04-29
Estimated Reading Time 2 Minutes
Words 564 In Total
Viewed Times

XCTF分站赛, 这次分别出了jump和simplefs两个题目, simplefs有其他师傅比我先出了, 就没有写wp了.

jump

通过静态分析查看, 判断函数返回值永远是0, 经过调试之后发现这里会改变程序的控制流

Untitled

对输入进行交叉引用, 可以发现这些地方flag相关:

1
2
3
4
5
6
7
sprintf(qword_4C9400, (__int64)"%c%s%c", 2LL, (const char *)flag, 3LL);  
//..............
off_4C9660 = sub_428A40(dword_4C613C + 1, 1LL);
j_strcat_ifunc_0(off_4C9660, qword_4C9400 + v12 - 1LL);
if ( v12 > 1 )
j_strcat_ifunc_1(off_4C9660, qword_4C9400, v12 - 1);
*(_QWORD *)(qword_4C9408 + 8LL * v12 - 8) = off_4C9660;

这些地方其实进行了转化, 大致的逻辑为, 将输入(2flag3的形式)从开头依次取第一个字节放在最后.

总计0x23次

sub_40293E中判断是否结束:

1
if ( v34 <= dword_4C613C )

结束了之后的sub_401F62(qword_4C9408); 对生成的0x23个字符串进行了排序, 从小到大.

sub_401E48 函数可以猜测到sub_401F62 是在排序, 自己输入数据进行验证可以证明

sub_401E48 :

1
2
3
4
5
6
7
8
9
10
11
do
{
v2 = a1++;
v5 = *v2;
v3 = a2++;
v6 = *v3;
if ( !v5 )
return (unsigned int)-v6;
}
while ( v5 == v6 );
return v5 - (unsigned int)v6;

密文数据生成和校验在sub_402826:

1
2
3
4
//依次取排序之后的0x23个字符串的最后一个字符组成密文数据
byte_4C9420[v8 - 1] = *(_BYTE *)(dword_4C613C - 1LL + *(_QWORD *)(8LL * v8 - 8 + qword_4C9408));
//.........
(unsigned int)sub_401DC1(byte_4C9420, &flag_info, (unsigned int)dword_4C613C)// 校验语句

逆向脚本:

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
from sympy import true

a = [2,3,
'+',
'1',
'2',
'4',
'6',
'=',
'B',
'C',
'D',
'E',
'F',
'G',
'L',
'N',
'R',
'S',
'T',
'V',
'Z',
'_',
'a',
'c',
'j',
'k',
'm',
'n',
'p',
'q',
'u',
'v',
'w',
'x']
b = [3,'j',
'm',
'G',
'n',
'_',
'=',
'u',
'a',
'S',
'Z',
'L',
'v',
'N',
'4',
'w',
'F',
'x',
'E',
'6',
'R',
'+',
'p',2,
'D', '2', 'q', 'V', '1', 'C', 'B', 'T', 'c', 'k']
c = []
d = b[a.index(3)]
while true:
c.append(d)
d = b[a.index(d)]
if (d == 2):
break
c.reverse()
print(c)
kk = "".join(c)
print(kk)

flag:CTF{cwNG1paBu=6Vn2kxSCqm+_4LETvFRZDj}


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !