[HGAME2023]math

观察程序可以把这个类型改为char

OK修改完毕

&savedregs其的地址是[rsp+180h]所以&savedregs-368为[rsp+10h]

也就是我们的v8

这时候我们的思路就是写脚本一个一个把我们的v8也就是所输入的flag一个一个算出来

采用python的Z3约束求解(顺便学习一下这个知识)

from z3 import *

v11=[63998, 33111, 67762, 54789, 61979, 69619, 37190, 70162, 53110, 68678, 63339, 30687, 66494, 50936, 60810, 48784, 30188, 60104, 44599, 52265, 43048, 23660, 43850, 33646, 44270]
v9=[126, 225, 62, 40, 216, 253, 20, 124, 232, 122, 62, 23, 100, 161, 36, 118, 21, 184, 26, 142, 59, 31, 186, 82, 79]
#存入v9 和v11

a = [ Int(f'a[{i}]') for i in range(25)] #初始化25个Int类型的数据
s = Solver()#表示创建了一个新的求解器对象,用于处理线性方程组的求解
for i in range(5):
	for j in range(5):
		enc = 0
		for k in range(5):
			enc +=  a[5*i+k] * v9[5*k+j]
		s.add(enc == v11[5*i+j])#将这些线性方程添加到Solver中。这表示求解器需要找到满足这些方程的整数解。

print(s.check())
#使用 s.check() 检查是否存在解,如果存在解,使用 s.model() 获取解的具体数值。
m=s.model()
print(m) #将那25个值进行输出

输出以下值

a=25*[0]
a[21] = 48
a[2] = 97
a[6] = 121
a[23] = 125
a[3] = 109
a[12] = 64
a[18] = 95
a[14] = 104
a[10] = 95
a[9] = 114
a[16] = 49
a[22] = 100
a[19] = 103
a[1] = 103
a[17] = 115
a[4] = 101
a[13] = 116
a[7] = 48
a[11] = 109
a[24] = 0
a[20] = 79
a[8] = 117
a[0] = 104
a[5] = 123
a[15] = 95
print(bytes(a))

 得到flag

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值