首页
社区
课程
招聘
[原创]kctf2021 第二题
2021-5-12 11:00 4418

[原创]kctf2021 第二题

2021-5-12 11:00
4418

程序分析

图片描述
图片描述
之前写注释的idb,被我删了,我就大概描述下算法流程,其实这题就是一题走迷宫,不过和普通的迷宫题不同,这题不止可以走四个方向,还可以左上,右下等,非常灵活,最后getflag的条件,就是必须把迷宫的所有零,都变成1,dump下迷宫后,发现有46个零,然后前面有一个我们输入转换opcode的过程,opcode就是我们指导方向的东西,先不用管转换过程,先通过走迷宫,然后得到opcode,再反推回去,我用ipad画了下迷宫,把路径走出来了
图片描述
然后发现迷宫是设计好的,opcode挺好反推的,得出opcode是这个
1234321234321101210050543450501210121234322321

通过opcode反推输入字符

这里有点坑,我卡这里卡了很久,之前一直以为是输入的字符一个对应一个opcode,但是我在写脚本,反推,再输入调试的时候,发现不对,跟流程的时候发现,是一个字符对应的两个opcode,所以我微调了下我的脚本,直接跑出来了

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
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

flag为GJ0V4LA4VKEVQZSVCNGJ00N


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-5-12 12:05 被kanxue编辑 ,原因:
收藏
点赞3
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回