Angr介绍
Angr介绍
- angr 来源于CGC项目,最初用于自动攻防。
- 平台无关(platform-agnostic)的二进制分析框架
- ( Computer Security Lab ) UCSB,Shellphish
Angr可以干什么?
- Disassembly and intermediate-representation lifting
- Program instrumentation(程序检测)
- 符号执行
- Control-flow analysis/控制流分析
- Data-dependency analysis
- Value-set analysis (VSA)
- 使用angrop自动构建ROP链
- 使用patcherex自动进行二进制强化
- 使用rex自动生成漏洞利用程序(用于DECREE和简单的Linux二进制程序)
- 使用angr-management(一个angr的GUI)来分析二进制程序
符号执行
- 在执行程序时用符号代替真实值。符号执行的优点在于,当使用真实值执行程序路径只有一条,而使用符号执行时,由于符号可变,我们可以利用这一特性,尽可能将程序的每一条路径遍历,这样的话,必定存在至少一条路径遍历的正确路径,每一个结果都可以表示为一个离散关系式,使用约束求解引擎即可分析出正确结果
Angr接口
加载
angr.Project(‘filename’)
属性 , CPU架构, 文件名 , 入口地址
proj.arch
proj.entry
proj.filename
加载器 Loader
可以通过loader来查看二进制文件加载的共享库,以及执行对加载地址空间相关的基本查询。
proj.loader
proj.loader.shared_objects
proj.loader.min_addr
proj.loader.max_addr
proj.loader.main_object 加载了多个二进制程序,这是主对象
proj.loader.main_object.execstack # 查询主对象是否开启了NX
工厂对象(Factory)
1.Blocks
block =proj.factory.block(proj.entry) # 从程序的入口处提取一个代码块
block.pp() ``# 打印反汇编代码
以下举例为angr_ctf的题目
00_angr_find
使用Angr
ipython
import angr
p= angr.Project(“./00_angr_find”) # 建立项目
init_state = p.factory.entry_state() # 初始化
sm = p.factory.simulation_manager(init_state) #
sm.explore(find=0x08048678) # 该地址为跳转字符串的地址
found_state = sm.found[0]
found_state.posix.dumps(0) #找到对应的输入
01
import angr |
02
import angr |
import angr |
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
workon angr
deactivate