用angr解二进制题目1
生活随笔
收集整理的這篇文章主要介紹了
用angr解二进制题目1
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
上圖是程序的流程,大概說一下,int main(int argc,char *argv[],char *env[])
先判斷argc是不是2,如果不是直接打印You need to enter the secret key!
如果是2,就一個文件名,和一個secret key字符串。接著調用verify函數(shù)來檢查secret key 是否合法。
這是可執(zhí)行文件的下載地址:http://pan.baidu.com/s/1pLe8hb9
接下來就用angr來符號化執(zhí)行這個程序,直到有正確的key出現(xiàn).
angr是一個python的庫,可以去百度下載安裝,很快就可以安裝好
import angrdef main():p = angr.Project("./ais3_crackme")#建立一個工程argv1 = angr.claripy.BVS("argv1",100*8)#設置第二個參數(shù)也就是key的為800個字節(jié)長,因為開始不知道長度,其實在后面的verify函數(shù)里面可以確定是24.inital_state = p.factory.path(args=["./crackme1",argv1])#設置程序執(zhí)行的初始條件pg = p.factory.path_group(inital_state)#set the inital state#這是執(zhí)行流對象pg.explore(find=0x400602)#start to run the program直到執(zhí)行到0x400602的時候結束,0x400602是:mov edi, offset aCorrectThatIsT ; "Correct! that is the secret key!"的地址,執(zhí)行到這里就代表找到了正確的keyfound = pg.found[0]#返回一個found對象,也就是一條正確的執(zhí)行路徑solution = found.state.se.any_str(argv1)#提取輸入的keyprint solution[:solution.find('\00')]#去掉后面的0,因為我們假設有800個字節(jié)if __name__=="__main__":main()總結
以上是生活随笔為你收集整理的用angr解二进制题目1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python判断英文
- 下一篇: python实现键盘记录器