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
|
''' # @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())
|