-
-
[原创]kctf2021 第二题
-
发表于: 2021-5-12 11:00 5199
-
之前写注释的idb,被我删了,我就大概描述下算法流程,其实这题就是一题走迷宫,不过和普通的迷宫题不同,这题不止可以走四个方向,还可以左上,右下等,非常灵活,最后getflag的条件,就是必须把迷宫的所有零,都变成1,dump下迷宫后,发现有46个零,然后前面有一个我们输入转换opcode的过程,opcode就是我们指导方向的东西,先不用管转换过程,先通过走迷宫,然后得到opcode,再反推回去,我用ipad画了下迷宫,把路径走出来了
然后发现迷宫是设计好的,opcode挺好反推的,得出opcode是这个
1234321234321101210050543450501210121234322321
这里有点坑,我卡这里卡了很久,之前一直以为是输入的字符一个对应一个opcode,但是我在写脚本,反推,再输入调试的时候,发现不对,跟流程的时候发现,是一个字符对应的两个opcode,所以我微调了下我的脚本,直接跑出来了
flag为GJ0V4LA4VKEVQZSVCNGJ00N
tt
=
"1234321234321161216656543456561216121234322321"
print
len
(tt)
tt
=
tt.replace(
"6"
,
"0"
)
print
tt
for
i
in
range
(
1
,
44
):
for
j
in
range
(
1
,
36
):
if
tt[i
-
1
]
=
=
str
(tranform(i,j)):
w.append(j)
#print i,j
break
print
len
(w)
flag
=
""
yenk
=
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
#G1555531555544266655333315331533315531555422
for
t
in
range
(
43
):
flag
+
=
yenk[w[t]]
flag
=
""
kt
=
0
for
g
in
range
(
23
):
for
w
in
range
(
36
):
if
tt[kt]
=
=
str
(tranform(g,w))
and
(g
+
w
/
6
)
%
6
=
=
int
(tt[kt
+
1
]):
flag
+
=
yenk[w]
break
kt
+
=
2
print
flag
tt
=
"1234321234321161216656543456561216121234322321"
print
len
(tt)
tt
=
tt.replace(
"6"
,
"0"
)
print
tt
for
i
in
range
(
1
,
44
):
for
j
in
range
(
1
,
36
):
if
tt[i
-
1
]
=
=
str
(tranform(i,j)):
w.append(j)
#print i,j
break
print
len
(w)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-5-12 12:05
被kanxue编辑
,原因:
赞赏记录
参与人
雪币
留言
时间
一笑人间万事
为你点赞~
2023-1-13 10:09
YenKoc
为你点赞~
2021-7-15 10:42
wx_MSoul℡
为你点赞~
2021-5-12 20:29
赞赏
他的文章
- [原创]2022腾讯游戏安全竞赛安卓客户端决赛writeup 29391
- [原创]2022腾讯游戏安全安卓客户端初赛wp 23393
- [原创] kctf 第六题 寻回宝剑 wp 7939
- [原创]kctf 第四题英雄救美 wp 6085
- [原创]kctf 第三题统一门派 wp 3353
看原图
赞赏
雪币:
留言: