angr初探

部署运行你感兴趣的模型镜像

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-8
import angr
import claripy

p = 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的使用简介

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>嗯,用户想了解Angr的相关信息或使用方法,特别是使用文档或者具体用法。首先,我需要回忆一下Angr的基本概念和用途。Angr是一个用于二进制程序分析的框架,支持符号执行、漏洞分析、自动化逆向工程等。我应该先介绍Angr是什么,然后说明它的主要功能,比如符号执行、控制流恢复、漏洞挖掘等。接下来,可能需要分步骤讲解如何安装和使用,给出一些基本的代码示例,比如加载二进制文件、执行符号执行、解决路径约束等。同时,用户可能对实际应用场景感兴趣,比如CTF比赛中的使用,或者漏洞分析案例。另外,用户可能需要知道官方文档的位置和一些学习资源,比如GitHub仓库和教程链接。还要注意用户提到的格式要求,确保数学表达式正确使用$...$,独立公式用$$...$$,中文回答,生成相关问题。最后,检查是否有引用需要添加,但根据参考信息,用户没有提供具体的引用来源,所以可能不需要添加引用标识。要确保回答结构清晰,分步骤说明,代码示例正确,并且生成的相关问题与Angr相关,比如安装问题、符号执行原理、应用案例等。</think># Angr二进制分析框架使用指南 Angr是一个开源的二进制程序分析框架,支持符号执行、控制流恢复、漏洞挖掘等多种二进制分析技术。其核心功能通过Python API实现,主要应用于逆向工程、漏洞分析和自动化程序验证等领域。 ### 一、基础使用方法 1. **安装环境**(需要Python 3.6+) ```bash pip install angr ``` 2. **加载二进制文件** ```python import angr proj = angr.Project("/path/to/binary", auto_load_libs=False) # 禁用外部库加载 ``` 3. **符号执行基础** ```python state = proj.factory.entry_state() # 创建初始状态 simgr = proj.factory.simulation_manager(state) # 创建执行管理器 simgr.explore(find=0x4007a3) # 探索执行路径直到目标地址 if simgr.found: found_state = simgr.found[0] print(found_state.posix.dumps(0)) # 输出符号输入解 ``` ### 二、核心功能模块 1. **符号变量创建** $$ \text{Solver} \vdash x = \text{BVS}('x', 32) $$ ```python x = state.solver.BVS('input', 32) # 创建32位符号变量 ``` 2. **路径约束求解** ```python state.add_constraints(x > 0x1000, x < 0x2000) # 添加约束条件 solution = state.solver.eval(x) # 求解具体值 ``` 3. **控制流图生成 ```python cfg = proj.analyses.CFGFast() # 快速生成CFG node = cfg.get_any_node(0x400650) # 获取指定地址节点 ``` ### 三、实际应用案例 1. **CTF逆向挑战**:通过符号执行自动化解题 2. **漏洞模式识别**:检测缓冲区溢出等漏洞模式 3. **恶意代码分析**:自动化分析可疑代码行为 官方文档:https://docs.angr.io/[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值