简单的z3
z3-solver求解器
z3-solver是由Microsoft Research(微软)开发的SMT求解器,它用于检查逻辑表达式的可满足性,可以找到一组约束中的其中一个可行解,缺点是无法找出所有的可行解
pip安装:pip install z3-solver
基本用法:
1 | import z3 |
实数:y = z3.Real(name = 'y')
位向量:z = z3.BitVec(name = 'z', bv = 32)
布尔:p = z3.Bool(name = 'p')
对于布尔类型的式子而言,我们可以使用 z3
内置的 And()
、Or()
、Not()
、Implies()
等方法进行布尔逻辑运算
例题
[NSSRound#X Basic]ez_z3
第一步查壳,是64位,UPX的魔改壳,把XYU改成UPX后直接脱壳
第二步放入ida找到关键代码
sub_14001124E函数是快速幂的变体,
sub_14001103C里面一堆方程,用z3求解,但是ida代码中方程直接的逻辑关系是||,但是只有全部满足才能做出来,有点奇怪
sub_1400112F8是异或,最后判断是否相等
exp:
求z3
1 | from z3 import * |
爆破flag:
1 | a1 = [104, 97, 104, 97, 104, 97, 116, 104, 105, 115, 105, 115, 102, 97, 99, 107, 102, 108, 97, 103] |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Xinyi's blog!