日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BUUCTF-[网鼎杯 2020 青龙组]singal——angr学习记录

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BUUCTF-[网鼎杯 2020 青龙组]singal——angr学习记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????學習結合b站的視頻

環境配置:Ubuntu20.04+python3?

??????angr安裝教程

切換到angr環境:workon angr

退出angr環境:deactivate

什么是符號執行:

符號執行 (Symbolic Execution)是一種程序分析技術。其可以通過分析程序來得到讓特定代碼區域執行的輸入。使用符號執行分析一個程序時,該程序會使用符號值作為輸入,而非一般執行程序時使用的具體值。在達到目標代碼時,分析器可以得到相應的路徑約束,然后通過約束求解器來得到可以觸發目標代碼的具體值。[1] 符號模擬技術(symbolic simulation)則把類似的思想用于硬件分析。符號計算(Symbolic computation)則用于數學表達式分析。我理解為更厲害的爆破。

基礎語句:

import angrproj = angr.Project('文件名') #新建一個工程 init_state=proj.factory.entry_sate() #設置程序的入口 sm=proj.factory.simulation_manager(init_state) #執行程序 sm.explore(find=0x.....,avoid=0x.....) #執行到某個條件,避免某個條件sm.found[0] #找到符合條件的值 found_state=sm.found[0] found_state.posix.doumps(0) #獲得我們最開始的輸入 found_state.posix.doumps(1) #獲得我們最后的輸出

?腳本例子:

import angr import sysdef main(argv):p = angr.Project('')initial_state = p.factory.entry_state()sm = p.factory.simgr(initial_state)sm.explore(find=good_addr, avoid=bad_addr) if sm.found:flag = sm.found[0]print(flag.posix.dumps(sys.stdin.fileno()))else:raise Exception('Cannot find') if __name__ == '__main__':main(sys.argv) python 02.py 02.exe

?來看題目:

32位無殼,IDApro打開

主函數很簡單,我們主要分析?vm_operad(v4, 114)函數

?

find地址:

void地址:?

?

腳本解密·

import angr p = angr.Project('signal.exe') st = p.factory.entry_state() sm = p.factory.simulation_manager(st) sm.explore(find=0x40175E, avoid=0x4016E6) print(sm.found[0].posix.dumps(0))

最后的flag{757515121f3d478}

我對angr第一概念就是,更厲害的爆破!!太厲害了!!

angr使用補充:

輸入多個參數:

import angr import claripy p = angr.Project('')init_addr = 0x08048980 #scanf的下一條指令地址 state = p.factory.blank_state(addr=init_addr) #創建一個狀態,并將該地址賦給它,也就是跳過輸入,直接執行下一條指令,此處使用.blank_state()而不再是.entry_state()#定義三個位向量,即三個輸入 p1 = claripy.BVS('p1',32) #32位寄存器(符號向量) p2 = claripy.BVS('p2',32) p3 = claripy.BVS('p3',32)state.regs.eax = p1 #.regs.eax 訪問eax這個寄存器 state.regs.ebx = p2 state.regs.edx = p3 sm = p.factory.simulation_manager(state) def good(state):return b'Good Job.' in state.posix.dumps(1) def bad(state):return b'Try again.' in state.posix.dumps(1) sm.explore(find = good, avoid = bad) if sm.found:find_state = sm.found[0]flag1 = find_state.solver.eval(p1)#將探索成功時的第一個輸入賦給flag1,下面兩個類似flag2 = find_state.solver.eval(p2)flag3 = find_state.solver.eval(p3)print('{:x} {:x} {:x}'.format(flag1,flag2,flag3))

引用了大佬的博客?代碼

總結

以上是生活随笔為你收集整理的BUUCTF-[网鼎杯 2020 青龙组]singal——angr学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。