首页
社区
课程
招聘
[原创]KCTF2024 第二题 星际生物
发表于: 2024-8-16 16:40 3441

[原创]KCTF2024 第二题 星际生物

2024-8-16 16:40
3441

下载下来是exe格式,直接丢到ida打开,一看原来是.net程序,换成dnSpy打开。
图片描述

前面几行显然是判断字符串长度要为70,然后格式为flag{***},还看见了sudoku,应该是解密数独了。
图片描述
图片描述

找了个在线工具,解决数独。

图片描述
现在来研究flag中间的64个字节如何填充,把代码直接丢给gpt分析。
图片描述
图片描述
就是原始数独ptr3为'f'的地方用flag填充,可以知道数独填充完成后为flag{34689155813271746868579324125982187492581517263447389126********},还差8个字节不知道怎么填充,继续看gpt的分析。
图片描述
图片描述
不想分析b4,b5具体值要多少了,直接写了个python脚本来跑。

得到答案
('S', 'D', 'S', 'D', 'D', 'W', 'W', 'A') 0 2

所以最终flag为:flag{34689155813271746868579324125982187492581517263447389126SDSDDWWA}

import itertools
 
p = "!-?+++-+-++++--+"
 
def check(str):
    b4 = 0
    b5 = 0
    for ch in str:
        if ch=='W':
            if b4==0:
                return False
            b4 -= 1
        elif ch=='S':
            if b4==3:
                return False
            b4 += 1
        elif ch=='D':
            if b5==3:
                return False
            b5 += 1
        elif ch=='A':
            if b5==0:
                return False
            b5 -= 1
        if p[b5+b4*4]=='-':
            return False
    if p[b5+b4*4]=='?':
        print(str, b4, b5)
        return True
    return False
 
for str in itertools.product("WASD", repeat=8):
    check(str)
import itertools
 
p = "!-?+++-+-++++--+"
 
def check(str):
    b4 = 0
    b5 = 0
    for ch in str:
        if ch=='W':
            if b4==0:
                return False
            b4 -= 1
        elif ch=='S':
            if b4==3:

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//