Problem: [SWPUCTF 2023 秋季新生赛]蟒蛇中文破解绿色版
[[toc]]
思路
- 解题大致思路
主要看main.py,调用了base_class.py中的分数函数,传入分子、分母,然后就输出"分子/分母"的形式,列表表达式可以改写成:
for i, _ in enumerate(__import__("secret").flag): # 导入secrect模块的flag,enumerate遍历获取索引和值
# flag = '************************************' 未知
if i % 2 == 0: # 偶数索引
str(分数(ord(_), 1) * a) # ord(_):返回每个字符的Unicode码 a为1/2 等价于 ord(_)//2 = 列表[i]分数
else: # 奇数索引
str(分数(ord(_), 1) * b) # b为1/3 等价于 ord(_)//3 = 列表[i]分数
EXP
- 具体攻击代码
l = ['39/1', '83/3', '83/2', '67/3', '42/1', '70/3', '123/2', '116/3',
'52/1', '49/3', '115/2', '95/3', '49/2', '115/3', '95/2', '112/3', '121/2',
'95/3', '119/2', '37/1', '57/1', '36/1', '50/1', '11/1', '95/2', '35/1', '58/1',
'35/1', '115/2', '39/1', '26/1', '34/1', '97/2', '36/1', '33/2', '125/3']
flag = ""
for i, _ in enumerate(l):
pos = l[i].find('/')
fz = int(l[i][:pos])
fm = int(l[i][pos + 1:])
if i % 2 == 0:
flag += chr(2 * fz // fm)
else:
flag += chr(3 * fz // fm)
print(flag)
总结
- 对该题的考点总结
