首页
社区
课程
招聘
7
[原创]看雪CTF.TSRC 2018 团队赛 第十二题 移动迷宫 WP
发表于: 2018-12-24 16:31 6983

[原创]看雪CTF.TSRC 2018 团队赛 第十二题 移动迷宫 WP

ccfer 活跃值
16
2018-12-24 16:31
6983
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
看雪CTF.TSRC 2018 团队赛 第十二题 移动迷宫
 
程序运行会在临时目录释放dll出来,并加载执行,加载和执行位置:
.text:0040203A                 push    8               ; dwFlags
.text:0040203C                 push    ebx             ; hFile
.text:0040203D                 push    esi             ; lpLibFileName
.text:0040203E                 call    ds:LoadLibraryExA
.text:00402044                 mov     edi, eax
.text:00402046                 cmp     edi, ebx
.text:00402048                 jz      short loc_4020C3
.text:0040204A                 push    [ebp+FilePart]  ; lpProcName
.text:0040204D                 push    edi             ; hModule
.text:0040204E                 call    GetProcAddress
.text:00402053                 mov     esi, eax
.text:00402055                 cmp     esi, ebx
.text:00402057                 jz      short loc_402096
.text:00402059                 cmp     [ebp+dwBytes], ebx
.text:0040205C                 mov     [ebp+var_4], ebx
.text:0040205F                 jz      short loc_402078
.text:00402061                 push    [ebp+dwBytes]
.text:00402064                 call    sub_401423
.text:00402069                 call    esi
.text:0040206B                 test    eax, eax
.text:0040206D                 jz      short loc_4020A0
.text:0040206F                 mov     [ebp+var_4], 1
.text:00402076                 jmp     short loc_4020A0
.text:00402078                 push    offset off_40A000
.text:0040207D                 push    offset hMem
.text:00402082                 push    offset byte_430000
.text:00402087                 push    400h
.text:0040208C                 push    [ebp+hWnd]
.text:0040208F                 call    esi
.text:00402091                 add     esp, 14h
.text:00402094                 jmp     short loc_4020A0
 
有下面这几个dll:
nsDialogs.dll
KillProcDLL.dll     //有程序检测,会杀掉它不喜欢的进程
System.dll          //间接调用系统api
Bamer.dll           //主要算法部分
 
Bamer.dll有几个导出函数:
Bamer.P     //输入字符有效性检查
Bamer.B     //修改过的base64解码
Bamer.A     //修改过的aes解密
Bamer.C     //36进制转4进制
Bamer.G     //一个12*12的路径寻找游戏,8对点,在格子内连成8条线,互不交叉,格子必须要全部用完
Bamer.F     //最后的hash校验
 
 
主程序内嵌一个解释器,指令数不多:
.text:00401ABB                 mov     eax, [ebp+FileTime2.dwLowDateTime]
.text:00401ABE                 cmp     eax, 0Dh        ; switch 14 cases
.text:00401AC1                 ja      short loc_401B36 ; jumptable 00401AC3 default case
.text:00401AC3                 jmp     ds:off_402A71[eax*4] ; switch jump
.text:00401ACA loc_401ACA:                             ; CODE XREF: sub_401434+68F↑j
.text:00401ACA                 add     edi, ecx        ; 加法
.text:00401ACC                 jmp     short loc_401B39
.text:00401ACE loc_401ACE:                             ; CODE XREF: sub_401434+68F↑j
.text:00401ACE                 sub     edi, ecx        ; 减法
.text:00401AD0                 jmp     short loc_401B39
.text:00401AD2 loc_401AD2:                             ; CODE XREF: sub_401434+68F↑j
.text:00401AD2                 imul    ecx, edi        ; 乘法
.text:00401AD5                 jmp     short loc_401AEE
...
.text:00401AEC loc_401AEC:                             ; CODE XREF: sub_401434+68F↑j
.text:00401AEC                 xor     ecx, edi        ; 异或
.text:00401AEE                 mov     edi, ecx
.text:00401AF0                 jmp     short loc_401B39
 
这里可以监视到数值比较:
.text:00401A84                 cmp     edi, eax
 
这里可以监视到字符串比较:
.text:00401A16                 call    ds:lstrcmpA
 
有了前面这些加减乘异或和两处比较的监视点结合硬件断点,就可以跟踪出验证逻辑了
输入长度要求100个字符,经Bamer.B的base64解码后得到75个字节
取出前11个字节,xor 0x17再减去位置索引值,得到的结果与固定串{25,26,24,2C,3F,3F,4E,3E,4C,3A,47}比较
解出得到:2018TSCRCTF
这样算完成第一部分验证
 
然后剩下的64字节,用前面得到的结果再拼接一部分得到的2018TSCRCTF00010做为密钥,经Bamer.A的aes解密
取出前11字节,然后又是经过解释器处理循环,追踪记录整理后得到这样一个十一元一次方程组:
a[0] * 19292 + a[1] * 21770 + a[2] * 17677 - a[3] * 18327 + a[4] * 19344 + a[5] * 16593 - a[6] * 20094 + a[7] * 20472 - a[8] * 19029 + a[9] * 16001 - a[10] * 20980 = 5295553
a[0] * 17901 + a[1] * 17754 + a[2] * 22962 - a[3] * 24365 - a[4] * 20645 - a[5] * 20553 + a[6] * 21906 + a[7] * 24749 + a[8] * 20195 + a[9] * 20968 - a[10] * 17780 = 5518223
a[0] * 23630 - a[1] * 23633 - a[2] * 18077 + a[3] * 15076 - a[4] * 17525 - a[5] * 15510 + a[6] * 24396 + a[7] * 24273 + a[8] * 24865 + a[9] * 22272 + a[10] * 18068 = 6649741
a[0] * 17723 + a[1] * 22504 - a[2] * 22913 + a[3] * 21286 + a[4] * 16384 + a[5] * 15349 - a[6] * 22234 - a[7] * 23057 + a[8] * 17180 - a[9] * 20872 + a[10] * 22229 = 4482135
a[0] * 18536 + a[1] * 18849 - a[2] * 19901 - a[3] * 18443 + a[4] * 15180 - a[5] * 23787 + a[6] * 23788 - a[7] * 15487 + a[8] * 16571 + a[9] * 15420 + a[10] * 17695 = 5135079
a[0] * 20282 + a[1] * 21583 + a[2] * 18830 + a[3] * 24997 + a[4] * 17723 - a[5] * 24278 - a[6] * 22517 + a[7] * 20548 + a[8] * 24963 - a[9] * 19274 - a[10] * 18086 = 5299343
a[0] * 22035 + a[1] * 23475 - a[2] * 16349 + a[3] * 18849 + a[4] * 22560 - a[5] * 19397 + a[6] * 21857 + a[7] * 23641 - a[8] * 15110 + a[9] * 21024 + a[10] * 21705 = 11895342
a[0] * 18334 + a[1] * 19371 - a[2] * 17784 + a[3] * 21534 - a[4] * 23633 + a[5] * 16027 - a[6] * 18430 - a[7] * 24544 + a[8] * 16158 + a[9] * 15917 + a[10] * 18278 = 4549415
a[0] * 20198 + a[1] * 22945 + a[2] * 23807 - a[3] * 17050 - a[4] * 21682 + a[5] * 16136 + a[6] * 23014 + a[7] * 19532 - a[8] * 19020 - a[9] * 23750 + a[10] * 19323 = 5344900
a[0] * 18800 - a[1] * 15632 + a[2] * 23898 + a[3] * 22359 + a[4] * 20855 + a[5] * 16366 - a[6] * 15562 + a[7] * 21845 + a[8] * 21734 + a[9] * 21130 + a[10] * 20089 = 15581697
a[0] * 17297 + a[1] * 20004 + a[2] * 20329 - a[3] * 24185 - a[4] * 24637 - a[5] * 15223 - a[6] * 19192 - a[7] * 23539 + a[8] * 23170 + a[9] * 17101 + a[10] * 16781 = 1259535
解出得到:
[87,101,108,99,111,109,101,72,97,118,101]
对应的字符串是:WelcomeHave
到这里算完成第二部分验证
 
把剩下的53个字节通过Bamer.C从36进制转成4进制做为参数传给Bamer.G
再把上面得到的结果拆分拼接得到WelcomeToHaveFun做为密钥,通过aes解密Bamer.dll中一段固定数据得到一个12*12的图案:
...........B
.R...Y..A...
............
.....DG..R..
............
......B.S...
............
.......D....
.......P....
......Y.....
.......G..S.
.....P...A..
 
图案中ABDGPRSY8个字符成对,在sub_100021DA中会用先前的4进制数据做为上下左右操作码,在图中画线路,下图是我手动画出的解法(小写字母表示一对大写字母之间的连线):
pppppppbbbbB
pRyyyYpbAaaa
pryppppbsssa
prypdDGbsRsa
prypdggbsrsa
prypdgBbSrsa
prypdggggrsa
prypdddDgrsa
pryppppPgrsa
pryyyyYggrsa
prrrrrrGrrSa
pppppPrrrAaa
 
8条线操作步骤(起点是行号小的一点,左0右1上2下3):
A:111333333333300
B:0000333330
D:03333111
G:303311133303
P:0000222222111220000003333333333311111
R:33333333311111311212222222
S:2221133333333
Y:000333333331111
 
最后可以构造flag了,8条线拼接在一起得到:
1113333333333000000333330033331113033111333030000222222111220000003333333333311111333333333111113112122222222221133333333000333333331111
4进制转成36进制得到53字节:
32WSFUPIFV9TYJWWPH14NZZ85YDHXOLO37ATG4IYC4ZCDIKCA7EJ9
前面拼接第二部分的11字节WelcomeHave得到64字节:
WelcomeHave32WSFUPIFV9TYJWWPH14NZZ85YDHXOLO37ATG4IYC4ZCDIKCA7EJ9
aes加密后再拼接第一部分11字节,然后变种base64编码得到100个字符的最终结果:
MhAyOFQSR2JDUEb0OUopUQkh5Ax23nEnCLxoBT06JRd7EdLrwooWsXQG68wLcneAqDy3UU78AgdrYnabVL0M9vd852girNqF9a3F


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2018-12-24 22:24 被ccfer编辑 ,原因:
收藏
免费 7
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2022-7-27 01:50
心游尘世外
为你点赞~
2022-7-26 23:47
飘零丶
为你点赞~
2022-7-17 03:23
不懂就不懂
为你点赞~
2021-1-2 13:02
Mx¢Xgt
为你点赞~
2019-9-11 16:06
qux
为你点赞~
2018-12-25 21:10
lacoucou
为你点赞~
2018-12-25 14:29
最新回复 (9)
雪    币: 435
活跃值: (1392)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
2
意思是nsis的脚本就没看,硬是生吃了虚拟机
人形CPU啊,我的天呐………………………………
2018-12-25 14:16
0
雪    币: 3006
活跃值: (769)
能力值: ( LV15,RANK:1395 )
在线值:
发帖
回帖
粉丝
3
厉害了!!!!!!!!!!
2018-12-25 14:29
0
雪    币: 408
活跃值: (156)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
膜拜人肉堆栈机
2018-12-25 14:53
0
雪    币: 204
活跃值: (911)
能力值: (RANK:1324 )
在线值:
发帖
回帖
粉丝
5
tql!
2018-12-25 16:56
0
雪    币: 8209
活跃值: (4559)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
6
没用过nsis,我还以为是作者自己设计的虚拟机
2018-12-25 23:07
0
雪    币: 435
活跃值: (1392)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
7
ccfer 没用过nsis,我还以为是作者自己设计的虚拟机
这张卷子卷面只有一百分,可委屈这个答案了………………
2018-12-25 23:40
0
雪    币: 23352
活跃值: (3482)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
8
tql
2018-12-26 00:02
0
雪    币: 1437
活跃值: (712)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
火星人又出来了
2018-12-27 16:59
0
雪    币: 19
活跃值: (128)
能力值: ( LV9,RANK:146 )
在线值:
发帖
回帖
粉丝
10
大神加油,是不是比赛已经结束了,分数还有希望逆转么
2019-9-15 21:56
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

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