0

runwu2204 Lv6
1
2
3
4
5
6
7
from angr import *#导入angr框架
p=Project("二进制文件")#导入二进制文件,第一步一般就是这个
state=p.factory.entry_state()#状态,entry_state指的是程序刚进行时候的状态(包含寄存器之类的)
sm=p.factory.simulation_manager(state)#模拟状态管理器类似于z3的新建solver(个人理解),内部参数为状态,可以为刚刚的entry_state()
sm.explore(find=地址)#启动简单搜索,具体在下方
#也可以使用lambda添加条件 sm.explore(find=lambda x: "Good" in x.posix.dumps(1)) 这个条件就是Good字符串出现在标准输出中
sm.found[0].posix.dump(0)#获取标准输入

Simulation Manager

简单探索(Simple Exploration)

符号执行最普遍的操作是找到能够到达某个地址的状态,同时丢弃其他不能到达这个地址的状态。SM为使用这种执行模式提供了捷径:.explore()方法。当使用find参数启动.explore()方法时,程序将会一直执行,直到发现了一个和find参数指定的条件相匹配的状态。find参数的内容可以是想要执行到的某个地址、或者想要执行到的地址列表、或者一个获取state作为参数并判断这个state是否满足某些条件的函数。当activestash中的任意状态和find中的条件匹配的时候,它们就会被放到foundstash中,执行随即停止。之后你可以探索找到的状态,或者决定丢弃它,转而探索其它状态。你还可以按照和find相同的格式设置另一个参数——avoid。当一个状态和avoid中的条件匹配时,它就会被放进avoidedstash中,之后继续执行。最后,num_find参数指定函数返回前需要找到的符合条件的状态的个数,这个参数默认是1。当然,如果activestash中已经没有状态可以执行,那么不论有没有找到你指定的状态个数,都会停止执行。

SimState类

p.factory.entry_state(),sm.found[0]同属于SimState类

posix – MISNOMER: 操作系统或者环境模型的表示 (包含stdin(0),stdout(1),stderr(2))

posix.dumps()用于导出posix中的输入输出、错误,参数就是对应的数据标号

  • 标题: 0
  • 作者: runwu2204
  • 创建于 : 2023-12-31 17:10:02
  • 更新于 : 2023-12-31 18:00:52
  • 链接: https://runwu2204.github.io/2023/12/31/Re/分析工具/angr分析框架/angr_ctf/00/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
0