z3-study

​ 最近做了个逆向题,其中有一步卡了好久(主要是最近没做这个)。是解如下方程:

​ 其中a,b,c,d已知。问了问GPT,说是暴力枚举。x,y,z,t都是0-255的未知数,暴力枚举的话感觉耗费的时间很长,所以就想着用z3来解决。本来想着直接for来着,测了测,一轮就超1min了,属实顶不住。

0x00

​ z3是一个求解器。参考文档:

http://www.manongjc.com/detail/19-duecxojsjotsdln.html

0x01

​ 上述方程该咋写咧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
# @Time : 2022/12/16 15:34:02
# @Author: wd-2711
'''

from z3 import *

if __name__ == "__main__":
x = BitVec('x', 8)
y = BitVec('y', 8)
z = BitVec('z', 8)
t = BitVec('t', 8)

a = 60
b = 61
c = 62
d = 63

solver = Solver()
solver.add(x ^ (((x^y) << 1) ^ (27 *((x^y) >> 7))) == a)
solver.add(y ^ (((z^y) << 1) ^ (27 *((z^y) >> 7))) == b)
solver.add(z ^ (((z^t) << 1) ^ (27 *((z^t) >> 7))) == c)
solver.add(t ^ (((t^x) << 1) ^ (27 *((t^x) >> 7))) == d)
solver.check()
print(solver.model())

留言

2022-12-10

© 2024 wd-z711

⬆︎TOP