angr学习笔记(7)(malloc地址单元符号化)
生活随笔
收集整理的這篇文章主要介紹了
angr学习笔记(7)(malloc地址单元符号化)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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
- 偽代碼分析
- 腳本:
- 驗證
偽代碼分析
首先記得找出起始地址的esp:
輸出如下:
malloc的地址具有隨機性,所以我們直接指定即可。
angr默認寫入int數(shù)據(jù),是大端寫入,所以我們在這里不能缺少:
buffer0=0x7fff0000-0x100buffer1=0x7fff0000-0x200buffer0_addr=0x0ABCC8A4buffer1_addr=0x0ABCC8ACinit_state.memory.store(buffer0_addr,buffer0,endness=p.arch.memory_endness)init_state.memory.store(buffer1_addr,buffer1,endness=p.arch.memory_endness)這一參數(shù)endness=p.arch.memory_endness來指定參數(shù)。
接著符號化所需輸入的變量:
p1=init_state.solver.BVS("p1",8*8)p2=init_state.solver.BVS("p2",8*8)init_state.memory.store(buffer0,p1)init_state.memory.store(buffer1,p2)把棧的內存單元地址放在這個buffer0的內存單元里面,然后再去把棧的內存單元去符號化
buffer0=0x7fff0000-0x100也就是需要符號化的內存單元(也是把原來malloc開辟的空間,返回開辟空間的地址,把這個給丟棄,緊接著把棧中空間地址賦給buffer0)
腳本:
import angr import sys def main(argv):bin_path=argv[1]p=angr.Project(bin_path)start_addr=0x08048699init_state=p.factory.blank_state(addr=start_addr)print("ESP:",init_state.regs.esp)buffer0=0x7fff0000-0x100buffer1=0x7fff0000-0x200buffer0_addr=0x0ABCC8A4buffer1_addr=0x0ABCC8ACinit_state.memory.store(buffer0_addr,buffer0,endness=p.arch.memory_endness)init_state.memory.store(buffer1_addr,buffer1,endness=p.arch.memory_endness)p1=init_state.solver.BVS("p1",8*8)p2=init_state.solver.BVS("p2",8*8)init_state.memory.store(buffer0,p1)init_state.memory.store(buffer1,p2)sm=p.factory.simgr(init_state)def is_good(state):return b'Good Job.'in state.posix.dumps(1)def is_bad(state):return b'Try again.' in state.posix.dumps(1)sm.explore(find=is_good,avoid=is_bad)if sm.found:found_state=sm.found[0]pass1=found_state.solver.eval(p1)pass2=found_state.solver.eval(p2)print("Solution: {} {}".format(pass1,pass2))else:raise Exception("Solution nou found")if __name__=='__main__':main(sys.argv) 6143547931880145494 6146937700559509843改變編碼后
pass1=found_state.solver.eval(p1,cast_to=bytes).decode("utf-8")pass2=found_state.solver.eval(p2,cast_to=bytes).decode("utf-8")記得加cast_to=bytes
驗證
總結
以上是生活随笔為你收集整理的angr学习笔记(7)(malloc地址单元符号化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: angr学习笔记(6)(内存地址单元符号
- 下一篇: angr学习笔记(8)(文件内容符号化)