这个周末NSS个人赛是个MISC,这个好久没怎么玩了,结果不会了。只作出一题来,不过参与的人比较少,每题解出数和也不到50。前50吧:)
画师
给了一个xml文件,看内容有 mxGraphModel 标签,应该是某个东西画的矢量图。结果搜了半天也没找着怎么弄。下载的库都过于复杂一时看不懂。结果结束后问群里结果有个在线的。
Flowchart Maker & Online Diagram Software
导进去啥都没有,仔细看下原文发现 strokeColor=#FFFFFF; 和 opacity=0;这应该是说白色全透明。改为黑色不透明。再导入后看不懂,但大概有些意思。明显是反了。
全选-调整图形-垂直 得到可看的:
ez_math
没有附近件,远程连接后,是一个算24的程序。于是从网上搜。这些人写的真烂。找到一个好点的,还有BUG,居然1145,3388不会算。自己写一个吧。
很久不写算法程序了,思路很简单,就是所有4个数字和3个符号的逆波兰式排列(序列由数字和符号组成,符号和前边的符号数(含当前符号)比它前边的数字数少),比如说33+这种排列只有5种。然后计算这个式子,由于有/号所以要小处理一下。
等打出字来,发现并不给flag,flag由前边的True/False组成,显然这题并不用计算,爆破也可以。
还是把费劲写的程序放上吧。
from pwn import *
import itertools
def RPN(a):
b = []
for v in a:
if isinstance(v,str):
try:
b.append(eval(f"{b.pop()} {v} {b.pop()}"))
except:
return False
else:
b.append(v)
if abs(b[0]-24) <= 0.0000001:
#print(a) #8/(3-3/8) [3, 8, '/', 3, '-', 8, '/']
return True
else:
return False
def all_way(a):
fs = '+-*/'
for v in itertools.permutations(a):
for f in itertools.product(fs,repeat=3):
if RPN([v[0],v[1],f[0],v[2],f[1],v[3],f[2]]): return True
if RPN([v[0],v[1],f[0],v[2],v[3],f[1],f[2]]): return True
if RPN([v[0],v[1],v[2],f[0],f[1],v[3],f[2]]): return True
if RPN([v[0],v[1],v[2],f[0],v[3],f[1],f[2]]): return True
if RPN([v[0],v[1],v[2],v[3],f[0],f[1],f[2]]): return True
else:
return False
#context.log_level = 'debug'
p = remote('node1.anna.nssctf.cn', 28528)
bit = ''
flag = ''
while True:
if len(bit) == 8:
flag += chr(int(bit,2))
print(flag)
bit = ''
msg = p.recvuntil(b']\n').split(b'\n')[-2]
#msg = '[5,2,5,5]'
num = eval(msg)
r = all_way(num)
if r:
bit +='0'
else:
bit +='1'
p.sendlineafter(b': ', str(r).encode())
#NSSCTF{04e60768-66bf-412e-bec0-b8ef241acb1d}
后边两题连附件都没下,可能是卡点的时候有人交了,一共3个,这种就太难了我肯定不会。回头看谁有附件和WP再复现吧。