[羊城杯 2020]Bytecode(chatgpt 4.0解题测试)

鸽了一年了。。。。。。。

题目链接:https://buuoj.cn/challenges#[%E7%BE%8A%E5%9F%8E%E6%9D%AF%202020]Bytecode

题目提供了txt文件,是python的字节码。没想到chatgpt直接就给还原成python代码了。。。

 

en = [3, 37, 72, 9, 6, 132]

output = [101, 96, 23, 68, 112, 42, 107, 62, 96, 53, 176, 179, 98, 53, 67, 29, 41, 120, 60, 106, 51, 101, 178, 189, 101, 48]

print("welcome to GWHT2020")

flag = input('please input your flag:')
str = flag

a = len(str)

if a < 38:
print('length wrong!')
exit(0)

if ord(str[0])*2020 + ord(str[1])*2020 + ord(str[2])*2020 + ord(str[3])*2020 + ord(str[4])*2020 == 1182843538814603:
print("good!continue……")
else:
print("bye~")
exit(0)

x = []
k = 5

for i in range(13):
b = ord(str[k])
c = ord(str[k+1])
a11 = c ^ en[i%6]
a22 = b ^ en[i%6]
x.append(a11)
x.append(a22)
k += 2

if x == output:
print("good!continue……")
else:
print("oh,you are wrong!")
exit(0)

l = len(str)
a1 = ord(str[l-7])
a2 = ord(str[l-6])
a3 = ord(str[l-5])
a4 = ord(str[l-4])
a5 = ord(str[l-3])
a6 = ord(str[l-2])

if a1*3 + a2*2 + a3*5 == 1003 and a1*4 + a2*7 + a3*9 == 2013 and a1 + a2*8 + a3*2 == 1109:
if a4*3 + a5*2 + a6*5 == 671 and a4*4 + a5*7 + a6*9 == 1252 and a4 + a5*8 + a6*2 == 644:
print("congratulations! you get the right flag!")

直接就解决了这道题最麻烦的部分,剩下要做的就很直观了。flag第一部分明显是GWHT{,第二部分简单xor,第三部分用z3。

直接要求chatgpt提供第二三部分的脚本。。。。

 

生成的脚本中a22和a11顺序反了,问题不大

 

from z3 import *

# 定义变量
a1, a2, a3, a4, a5, a6 = Ints('a1 a2 a3 a4 a5 a6')

# 建立求解器
s = Solver()

# 添加约束条件
s.add(3*a1 + 2*a2 + 5*a3 == 1003)
s.add(4*a1 + 7*a2 + 9*a3 == 2013)
s.add(a1 + 8*a2 + 2*a3 == 1109)

s.add(3*a4 + 2*a5 + 5*a6 == 671)
s.add(4*a4 + 7*a5 + 9*a6 == 1252)
s.add(a4 + 8*a5 + 2*a6 == 644)

# 确保所有的变量都在ASCII打印字符的范围内
s.add(And(a1 >= 32, a1 <= 126))
s.add(And(a2 >= 32, a2 <= 126))
s.add(And(a3 >= 32, a3 <= 126))
s.add(And(a4 >= 32, a4 <= 126))
s.add(And(a5 >= 32, a5 <= 126))
s.add(And(a6 >= 32, a6 <= 126))

# 求解
if s.check() == sat:
m = s.model()
flag = chr(m[a1].as_long()) + chr(m[a2].as_long()) + chr(m[a3].as_long()) + chr(m[a4].as_long()) + chr(m[a5].as_long()) + chr(m[a6].as_long())
print('Flag found: ' + flag)
else:
print("No solution found.")

个人感觉在ctf中,chatgpt对re的帮助是最大的。后续的文章不打算贴出题目相应的chatgpt解法。感兴趣的可以自己尝试。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像