-
-
[原创]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
:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: