首页
社区
课程
招聘
4
看雪CTF.TSRC 2018 团队赛-第11题
发表于: 2018-12-22 19:10 4971

看雪CTF.TSRC 2018 团队赛-第11题

2018-12-22 19:10
4971

1. 总体逻辑

4. 前缀表达式

(1)已知原函数(前缀表达式)的前面与后面部分, 中间部分取自sn
(2)已知该表达式的导函数
求解sn

正常解法: 求导函数的积分得到原函数? 
不会求, 不过还好猜出来了

2. Base62解码

str_b62 = g_str_primitive_part1 + sn + g_str_primitive_part2_1 + g_str_primitive_part2_2;
str_b62.size() == 0x4407
str_primitive = Base62_decode(str_b62);
str_primitive.size() == 0x31AB

base62是变形的base64, 表的前面61位跟原来一样, 后3位分别用9A, 9B, 9C来替代, 9D为padding

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
.text:00401230 x_init_g_str_primitive_part1
.text:00401280 x_init_g_str_primitive_part2_1
.text:004012D0 x_init_g_str_primitive_part2_2
..
.text:0040342F                 mov     [ebp+b62.vtbl], offset ??_7Base62@@6B@ ; const Base62::`vftable'
...
.text:0040344E                 push    3Dh             ; a3
.text:00403450                 push    offset aAbcdefghijklmn ; "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm"...
.text:00403455                 lea     ecx, [ebp+b62.table] ; this
.text:0040345B                 mov     byte ptr [ebp+var_4], 2
.text:0040345F                 call    x_std_string_ctor
.text:00403464                 mov     [ebp+b62.pad], '9'
...
.text:0040349C                 lea     eax, [ebp+str_sn]
.text:0040349F                 mov     edx, offset g_str_primitive_part1 ; a2
.text:004034A4                 push    eax             ; a3
.text:004034A5                 lea     ecx, [ebp+a1]   ; a1
.text:004034A8                 call    x_std_string_ctor_0
.text:004034AD                 add     esp, 4
.text:004034B0                 push    offset g_str_primitive_part2_1 ; a1
.text:004034B5                 mov     edx, eax        ; edx0
.text:004034B7                 mov     byte ptr [ebp+var_4], 5
.text:004034BB                 lea     ecx, [ebp+a2]   ; a2
.text:004034C1                 call    x_std_string_concat
.text:004034C6                 add     esp, 4
.text:004034C9                 push    offset g_str_primitive_part2_2 ; a1
.text:004034CE                 mov     edx, eax        ; edx0
.text:004034D0                 mov     byte ptr [ebp+var_4], 6
.text:004034D4                 lea     ecx, [ebp+str]  ; a2
.text:004034DA                 call    x_std_string_concat
.text:004034DF                 add     esp, 4
.text:004034E2                 lea     ecx, [ebp+str_sn] ; this
.text:004034E5                 push    eax             ; a2
.text:004034E6                 call    x_std_string_ctor_1
..
.text:00403623                 cmp     [ebp+str_sn._Mysize], 4407h
..
.text:00403669                 call    x_Base62_decode
..
.text:00403697                 cmp     [ebp+str_sn._Mysize], 31ABh

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
.text:00401230 x_init_g_str_primitive_part1
.text:00401280 x_init_g_str_primitive_part2_1
.text:004012D0 x_init_g_str_primitive_part2_2
..
.text:0040342F                 mov     [ebp+b62.vtbl], offset ??_7Base62@@6B@ ; const Base62::`vftable'
...
.text:0040344E                 push    3Dh             ; a3
.text:00403450                 push    offset aAbcdefghijklmn ; "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm"...
.text:00403455                 lea     ecx, [ebp+b62.table] ; this
.text:0040345B                 mov     byte ptr [ebp+var_4], 2
.text:0040345F                 call    x_std_string_ctor
.text:00403464                 mov     [ebp+b62.pad], '9'
...
.text:0040349C                 lea     eax, [ebp+str_sn]
.text:0040349F                 mov     edx, offset g_str_primitive_part1 ; a2
.text:004034A4                 push    eax             ; a3
.text:004034A5                 lea     ecx, [ebp+a1]   ; a1
.text:004034A8                 call    x_std_string_ctor_0
.text:004034AD                 add     esp, 4
.text:004034B0                 push    offset g_str_primitive_part2_1 ; a1
.text:004034B5                 mov     edx, eax        ; edx0
.text:004034B7                 mov     byte ptr [ebp+var_4], 5
.text:004034BB                 lea     ecx, [ebp+a2]   ; a2
.text:004034C1                 call    x_std_string_concat
.text:004034C6                 add     esp, 4
.text:004034C9                 push    offset g_str_primitive_part2_2 ; a1
.text:004034CE                 mov     edx, eax        ; edx0
.text:004034D0                 mov     byte ptr [ebp+var_4], 6
.text:004034D4                 lea     ecx, [ebp+str]  ; a2
.text:004034DA                 call    x_std_string_concat
.text:004034DF                 add     esp, 4
.text:004034E2                 lea     ecx, [ebp+str_sn] ; this
.text:004034E5                 push    eax             ; a2
.text:004034E6                 call    x_std_string_ctor_1
..
.text:00403623                 cmp     [ebp+str_sn._Mysize], 4407h
..
.text:00403669                 call    x_Base62_decode
..
.text:00403697                 cmp     [ebp+str_sn._Mysize], 31ABh

3.  求导函数后比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.text:00401320 x_init_g_str_derivative
..
.text:004036DE                 call    x_parse_expression
..
.text:004037D9                 cmp     g_str_derivative._Myres, 10h
.text:004037E0                 lea     ecx, [ebp+str_sn]
.text:004037E3                 push    g_str_derivative._Mysize ; a4
.text:004037E9                 mov     edx, [ebp+str_sn._Mysize] ; a1
.text:004037EC                 mov     eax, offset g_str_derivative
.text:004037F1                 cmovnb  eax, dword ptr g_str_derivative.anonymous_0
.text:004037F8                 cmp     [ebp+str_sn._Myres], 10h
.text:004037FC                 push    eax             ; a3
.text:004037FD                 cmovnb  ecx, dword ptr [ebp+str_sn.anonymous_0] ; a2
.text:00403801                 call    x_std_compare

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.text:00401320 x_init_g_str_derivative
..
.text:004036DE                 call    x_parse_expression
..
.text:004037D9                 cmp     g_str_derivative._Myres, 10h
.text:004037E0                 lea     ecx, [ebp+str_sn]
.text:004037E3                 push    g_str_derivative._Mysize ; a4
.text:004037E9                 mov     edx, [ebp+str_sn._Mysize] ; a1
.text:004037EC                 mov     eax, offset g_str_derivative
.text:004037F1                 cmovnb  eax, dword ptr g_str_derivative.anonymous_0
.text:004037F8                 cmp     [ebp+str_sn._Myres], 10h
.text:004037FC                 push    eax             ; a3
.text:004037FD                 cmovnb  ecx, dword ptr [ebp+str_sn.anonymous_0] ; a2
.text:00403801                 call    x_std_compare

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 4
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2022-7-27 22:33
飘零丶
为你点赞~
2022-7-17 03:23
我是小白白
为你点赞~
2018-12-25 19:14
Editor
为你点赞~
2018-12-24 15:42
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册