首页
论坛
课程
招聘
[原创]KCTF2022春季赛逆向第2题 末日邀请WP
2022-6-9 14:38 7144

[原创]KCTF2022春季赛逆向第2题 末日邀请WP

2022-6-9 14:38
7144

运行程序,没有静态混淆,动态反调试,让输入满足判断逻辑即可。输入长度最大41,输入范围1234567890_ABCDEFGHIJKLMNOPQRSTUVWXYZ。
第一阶段:
0x004012AF,0x004012DE,0x0040131D和0x00401356三个分支,判断输入的4-7位,即input[3-6]是否为'KCTF'。
第二阶段:
后9位,loc_40142D开始的冒泡排序之后,在loc_401454判断是1-9,9个数字。这9个数字的序列需要满足loc_4013BE的判断条件。
写代码筛选满足的序列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for line in f.readlines():
    b = line.strip("\n").split(",")
    flag = 0
    a =0
    for i in range(9):
        a = a*0xA
        c = int(b[i])
        a = a+c
        e = a%(i+1)
        if e!=0:
            flag=1
            break
    if flag == 0:
    print(",".join(b)+"\n")

得到序列:
3,8,1,6,5,4,7,2,9
第三阶段:
在最后需要判断整个序列的计算数值,需要是0xf52e0765,计算过程在loc_4011F8。计算方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def hashmy(input):
    c = 0xFFFFFFFF
    j = 0
    for i in input:
        if i == "":
            i = ","
        a = ord(i)
        a = a^c
 
        if c&0x80000000>0:
            c = (c>>8)
            c = c+0xff000000
        else:
            c = (c>>8)
        a = a&0xff
        d = a*4+0xB20
 
        e = int(hash_table[d], 16)+(int(hash_table[d+1], 16)<<8)+(int(hash_table[d+2], 16)<<16)+(int(hash_table[d+3], 16)<<24)
        c = e^c
    c = 0xffffffff-c
    return c

穷举前三位,最终获得flag:
图片描述
421KCTF381654729


看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

最后于 2022-6-9 16:01 被kanxue编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回