angr初探
来源:互联网 发布:淘宝美工面试作品 编辑:程序博客网 时间:2024/06/10 15:34
angr 安装与简单使用
介绍
angr
总结来说,angr用于逆向工程中进行二进制分析的一个python框架
具体介绍见其github主页angr
符号执行
符号执行 (Symbolic Execution)是一种程序分析技术。其可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。 – 摘自维基百科
安装
首先安装依赖
sudo apt-get install python-dev libffi-dev build-essential virtualenvwrapper
安装angr
mkvirtualenv angr && pip install angr
这里就出问题了zsh: mkvirtualenv: command not found
最终google到 bash: mkvirtualenv: command not found
最终出错原因是因为ubuntu的virtualenvwrapper.sh的位置是不定的,所以mkvirtualenv命令在环境变量中并没有被包含,解决方案为
1) 首先找到virtualenvwrapper.sh的位置
2) 然后将其加入环境变量
3) 最后再执行安装angr那一步
4) 安装好后,呵呵,还是没成功,import的时候,出现如下错误:
我的解决方案为
$ pip install -I --no-use-wheel capstone
安装成功
简单使用
这里以这个链接给的例子来测试sym-write
先看源码
#include<stdio.h>char u=0;int main(void){ int i, bits[2]={0,0}; for (i=0; i<8; i++) { bits[(u&(1<<i))!=0]++; } if (bits[0]==bits[1]) { printf("you win!"); } else { printf("you lose!"); } return 0;}
具体exp为
#!/usr/bin/env python# coding=utf-8import angrimport claripyp = angr.Project('./issue')state = p.factory.entry_state(args=['./issue',])u = claripy.BVS('u',8)state.memory.store(0x0804A021,u)sm = p.factory.simulation_manager(state)sm.explore(find=0x080484E3,avoid=0x080484F5)if len(sm.found)>0: print sm.found[0].solver.eval(u)
我们来具体分析以下这个脚本 import angr
这个自然不用说,导入angr包 import claripy
这个模块用来来定义抽象的数据,u = claripy.BVS('u',8)
这一句即是用claripy这个模块的BVS函数来创建一个指定长度的抽象数据,BVS函数要求两个参数,第一个参数为变量名,第二个参数为变量长度。 p = angr.Project('./issue')
加载一个一个程序,建立一个angr工程 state = p.factory.entry_state(args=['./issue',])
用于指明程序在初始运行时的状态,另外有函数blank_state
,可用于指定程序起始运行地址通过给定参数addr的值 state.memory.store(0x0804A021,u)
,将指定data,这里是u,存储到给定地址addr,这里是0x0804A021,
sm = p.factory.simulation_manager(state)
从给定状态创建了一个模拟器,进行符号执行
sm.explore(find=0x080484E3,avoid=0x080484F5)
进行符号执行得到想要的状态,这里的两个地址为
即要产生win的状态,而避免lose的状态
最终sm.found 用于存储我们想要的状态,通过if判断其长度,从而确定能否得到我们想要的状态
sm.found[0].solver.eval(u)
sm.found[0].solver 用于存储状态的解,而eval函数则输入参数的值
局部总结
以上就是angr的基本用法,本人对于angr的理解很浅显,有些地方也不是特别清楚,如果有错的地方,希望大家指点。以后会继续放出其他的关于angr的使用简介
- angr初探
- Angr Manual
- 二进制分析框架angr基本信息
- 二进制分析框架angr基本信息
- angr 的中文说明文档
- angr path in symblic execution
- 符号执行工具angr安装教程
- (逆向)angr 执行二进制函数
- 用angr解二进制题目1
- 利用angr进行二进制静态分析
- 初探
- 二进制符号执行分析框架angr的Windows安装教程
- angr:基于python的二进制分析框架 安装与使用
- 使用angr和Radare解决CMU的二进制炸弹
- Angr:一个具有动态符号执行和静态分析的二进制分析工具
- Angr:一个具有动态符号执行和静态分析的二进制分析工具
- 初探PHP5
- jdbc初探......
- 树莓派3B Linux下设置程序自启动2
- 蓝桥杯ALGO-6安慰奶牛
- 坚持#第245天~正则表达式
- macos 升级high sierra失败之后重启无法正常启动,界面显示一个白色问号的解决办法
- a标签的4个伪类
- angr初探
- 机器学习实战——AdaBoost
- Python一些基础的东西1
- 微信 js
- 作业系列静态链表
- Maven Unable to compile class for JSP
- Leetcode个题解85
- redis源码分析(1)——简单字符串的实现
- Androidd开发Fragment生命周期中重要几个回调方法