今天在vidar的分享會上
s神跟我們講了一個python的庫叫做z3
可以在python中用這個庫解決任何方程(只要有解)
網(wǎng)上找不到任何中文資料=。=看來我只能自己寫了
z3庫的介紹
Z3 在工業(yè)應(yīng)用中實際上常見于軟件驗證、程序分析等。然而由于功能實在強大,也被用于很多其他領(lǐng)域。CTF 領(lǐng)域來說,能夠用約束求解器搞定的問題常見于密碼題、二進制逆向、符號執(zhí)行、Fuzzing 模糊測試等。此外,著名的二進制分析框架 angr 也內(nèi)置了一個修改版的 Z3。
z3的安裝過程
我差點就放棄這個庫了,就是因為一直安裝不上。。
后來詢問了s神,s神跟我說要用源碼安裝
給個地址https://pypi.org/project/z3-solver/4.5.1.0/#files(whl文件下載地址)
只能python2,所以我裝在虛擬機上了
千萬千萬不要使用pip install z3,不知道為什么就是不一樣。。
z3如何使用!
驚了這個庫可以解決所有的方程,如果有解
首先要給所有的設(shè)置一個變量,他有很多種變量
Int型他代表整數(shù)所有的解都只能是整數(shù),當然也可以用Ints一次性設(shè)置多個變量
還有就是Real型的這個代表的是有理數(shù),可以解出所有的有理數(shù)
以及BitVec(常用的)
可以設(shè)置幾位主要是re選手用的吧,這里可以解決位與方程用這個!超級強,后面一個變量設(shè)置這個變量有幾位,方便位與運算
-
Int型解方程
首先是給變量賦值
設(shè)置一個解方程的類Solver
然后一個一個添加(這樣比較直觀)
check一下看看有沒有解,最后得出一個解,當然還有另外一種方法
-
Real型解方程
直接用solve函數(shù)就可以了
-
BitVec型解方程
這些都不算什么,平常都可以解出來
現(xiàn)在有平常解不出來的東西!!!就是向量(位與運算)
!!!!驚了這都能解出來以后我再也不用擔心計組了