CTF-z3簡要介紹

介紹

Z3是微軟研究院的一個定理驗證器。它是由麻省理工學院授權的,常用來解一些方程組,在做一些CTF逆向題目的時候很有用,下面就簡單介紹一下這個工具。

下載

官網:https://github.com/Z3Prover/z3

這裏講Linux下的安裝,在官網下載源碼之後進入主目錄,執行下面的命令即可,一定要源碼安裝,挺難安裝的一定要耐心,實在不行用docker

python scripts/mk_make.py
cd build
make
sudo make install

例子

(angr) angr@9fceed56f09e:~$ python
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from z3 import*
>>> x,y,z=BitVecs('x y z',8) # 申明未知量
>>> s=Solver() # 創建約束求解器
>>> s.add(x^y&z==12) # 添加約束條件
>>> s.add(y&x>>3==3)
>>> s.add(z^y==4)
>>> s.check() # 檢查是否有解
sat
>>> s.model() # 顯示結果
[z = 19, y = 23, x = 31]
>>> 

常用的數據類型如下:

BitVec :至特定大小的數據類型

BitVec("x",32)對應C語言中的int => 4個byte
BitVec("x",8)對應C語言中的char => 1個byte

Int:整型,Real:有理數,Bool:布爾類型,Array:數組

CTF demo

放一個demo做記錄以後可能會用到

from z3 import*
input = [BitVec('input %d'%i,8)for i in range(32)] # char input[32]

s = Solver()
s.add(...)
if s.check()!=sat:
	print 'unset'
else:
	m = s.model()
	print m
	print repr("".join([chr(m[input[i]].as_long())for i in range(32)]))

總結

更多詳細的用法當然是看官網的API定義了,CTF中一般解的方程題不會太難,所以不必太深究其原理,以後還有類似的題目我會慢慢補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章