angr学习笔记(9)(添加约束)
生活随笔
收集整理的這篇文章主要介紹了
angr学习笔记(9)(添加约束)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
angr系列
00_angr_find
01_angr_avoid
02_angr_find_condition
03_angr_symbolic_registers
04_angr_symbolic_stack
05_angr_symbolic_memory
06_angr_symbolic_dynamic_memory
07_angr_symbolic_file
08_angr_constraints
09_angr_hooks
10_angr_simprocedures
13_angr_static_binary
文章目錄
- angr系列
- 00_angr_find
- 01_angr_avoid
- 02_angr_find_condition
- 03_angr_symbolic_registers
- 04_angr_symbolic_stack
- 05_angr_symbolic_memory
- 06_angr_symbolic_dynamic_memory
- 07_angr_symbolic_file
- 08_angr_constraints
- 09_angr_hooks
- 10_angr_simprocedures
- 13_angr_static_binary
- 偽代碼分析
- 腳本
- 驗(yàn)證
偽代碼分析
需要在下方添加一個(gè)約束,防止路徑爆炸if ( check_equals_AUPDNNPROEZRJWKB((int)&buffer, 0x10u) ),因?yàn)檫@種compare是屬于一個(gè)字符一個(gè)字符進(jìn)行比較,所以路徑太多,需要添加約束。
先找到起始地址:
符號(hào)化輸入:
buffer_addr=0x0804A050password=init_state.solver.BVS("password",16*8)init_state.memory.store(buffer_addr,password)sm=p.factory.simgr(init_state)目標(biāo)地址是if ( check_equals_AUPDNNPROEZRJWKB((int)&buffer, 0x10u) ),當(dāng)尋到這里時(shí),需要停下,自行進(jìn)行約束判斷:
首先給函數(shù)進(jìn)行參數(shù)初始化:
check_param1=buffer_addrcheck_param2=0x10check_bvs=check_state.memory.load(check_param1,check_param2)進(jìn)行約束添加:
check_constraint=desired_string==check_bvscheck_state.add_constraints(check_constraint)最后進(jìn)行求解即可:
password1=check_state.solver.eval(password,cast_to=bytes)腳本
import sys import angr def main(argv):bin_path=argv[1]p=angr.Project(bin_path)start_addr=0x08048625init_state=p.factory.blank_state(addr=start_addr)buffer_addr=0x0804A050password=init_state.solver.BVS("password",16*8)init_state.memory.store(buffer_addr,password)sm=p.factory.simgr(init_state)check_addr=0x08048565sm.explore(find=check_addr)if sm.found:check_state=sm.found[0]desired_string='AUPDNNPROEZRJWKB'check_param1=buffer_addrcheck_param2=0x10check_bvs=check_state.memory.load(check_param1,check_param2)check_constraint=desired_string==check_bvscheck_state.add_constraints(check_constraint)password1=check_state.solver.eval(password,cast_to=bytes)print("Solution:{}".format(password1.decode('utf-8')))if __name__=='__main__':main(sys.argv) LGCRCDGJHYUNGUJB驗(yàn)證
總結(jié)
以上是生活随笔為你收集整理的angr学习笔记(9)(添加约束)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: angr学习笔记(8)(文件内容符号化)
- 下一篇: angr学习笔记(10)(hook)