angr初探

article/2025/11/7 10:51:06

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


http://chatgpt.dhexx.cn/article/K4fu7ntf.shtml

相关文章

Angr_ctf

Angr_ctf&#xff1a;1~13练习 文章目录 Angr_ctf&#xff1a;1~13练习#、angr 入门00_angr_find&#xff08;1&#xff09;总结&#xff08;2&#xff09;练习 01_angr_avoid&#xff08;1&#xff09;总结&#xff08;2&#xff09;练习 02_angr_condition&#xff08;1&…

Angr CTF 从入门到入门(1)

angr是一个很厉害的二进制分析工具&#xff0c;能够实现很多自动化的逆向工作。最近正在学习&#xff0c;在看文档的时候发现了有个angrCTF的实战可以练习angr。 angrCTF:http://angr.oregonctf.org/ angr文档&#xff1a;https://docs.angr.io/ 这篇文章会是这个系列的第一篇文…

angr的windows安装——萌新

window10中符号执行&#xff08;angr&#xff09;的安装——小白篇 最近做题的时候遇到了一些需要使用angr来完成的题目&#xff0c;之后在网上搜了好久发现大多是Linux以及其它系统的angr安装教程。windows系统的安装方法几乎没有。身为一个萌新&#xff0c;猜测同类们应该也会…

Angr 安装

1、安装必要的软件环境 sudo apt-get install python3-dev libffi-dev build-essential virtualenvwrapper 2、开始正式安装angr mkvirtualenv --python$(which python3) angr && pip install angr 3、遇到 mkvirtualenv: command not found 问题 在终端执行以下命…

Angr 01 avoid 忽略的条件

01_angr_avoid无法反编译主函数&#xff0c;模块比较多&#xff0c;加上avoid过滤条件之后&#xff0c;就没那么慢了。 import angr …

图解angr中两种CFG的区别

angr里提供两种CFG的生成&#xff0c;一种是CFGFast&#xff0c;一种是CFGEmulated。这两种究竟有什么不同呢&#xff1f; 本文主要是用图来说明下这个问题。可能回答的不是很完整。 CFGFast这种CFG生成的比较快&#xff0c;但是没有考虑上下文关系。比如函数A调用了printf函…

Angr 02_angr_find_condition 根据输出状态条件搜索正确输入

explore的find和avoid支持函数作为参数&#xff0c;根据函数返回值来判断是否成功。Angr把状态传入了函数&#xff0c;从而判断成功与否。 import angr import sysdef main(argv):path_to_binary argv[1]project angr.Project(path_to_binary)initial_state project.factor…

angr的安装

ubuntu要先安装pip&#xff0c;ANGR官方给出的为pip命令pip install angr&#xff1b; 就算将pip改为apt-get 也不行。 借鉴Ubuntu安装pip的安装方式&#xff0c;安装pip&#xff0c;然后运行pip install angr&#xff0c;结束。 angr安装完后&#xff0c;要安装图形生成插件…

angr 学习笔记

附件&#xff0c;参考1&#xff0c;参考2 符号执行原理 基本概念 即初始参数用变量代替&#xff0c;模拟程序执行过程&#xff0c;维护执行到各个位置时的状态&#xff08;用各个变量之间的代数关系表示&#xff09;。 符号状态&#xff08;Symbolic State&#xff09; 当前…

利用angr获取CFG

静态二进制分析中&#xff0c;对于程序控制流图CFG的计算是很基础且重要的一步&#xff0c;很多的分析是要建立在CFG的基础上。angr作为二进制分析工具&#xff0c;当然提供了CFG功能&#xff0c;下面我们就来探索下要如何使用angr计算CFG&#xff0c;以及其中的坑。 angr中的…

Angr 内存符号化 05_angr_symbolic_memory

说明 通过查看下面的源码或IDA汇编&#xff0c;可知此例需要输入4个输入字符串&#xff0c;给每个输入字符串赋值给了user_input数组这块已经开辟的内存空间&#xff0c;我们可以监测user_input在内存中的值来获取最终的答案。 随机生成的源码 #include <stdio.h> #in…

Angr学习笔记

Angr学习笔记 前言 本文记录一下Angr的基本使用方法&#xff0c;主要是基于Github上的开源项目以及笔记AngrCTF_FITM整理&#xff0c;Angr在逆向方面确实用处比较大&#xff0c;特此记录一下。 什么是Angr angr是一个用于分析二进制文件的python框架。它专注于静态和符号分…

angr纠错和易错点

现在环境已经没有问题了。我运行了几个代码&#xff08;使用python3&#xff09;&#xff0c;都会出现不同的问题。 运行报错 解决方法&#xff1a; 添加b 运行报错&#xff1a; 解决方法&#xff1a; 删掉cast_to; 因为python2中str就是字节流 python3中不一样&#xff0c…

git本地分支管理

文章目录 一、master分支没有改变&#xff0c;合并其他分支二、master分支有改变&#xff0c;合并其他分支 作为开发人员&#xff0c;我们应该尽可能多地建立分支&#xff0c;在分支上进行开发&#xff0c;功能测试稳定后&#xff0c;再将分支上地代码合并到指定的分支 git bra…

Git 分支管理

Git 分支管理 一、主分支Master 首先&#xff0c;代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本&#xff0c;都在这个主分支上发布。 Git主分支的名字&#xff0c;默认叫做Master。它是自动建立的&#xff0c;版本库初始化以后&#xff0c;默认就是在主分…

git分支管理策略

git分支管理策略 1 总览 git 的分支整体预览图如下&#xff1a; 从上图可以看到主要包含下面几个分支&#xff1a; master&#xff1a;git默认主分支&#xff08;这里不作操作&#xff09;。 stable&#xff1a;稳定分支&#xff0c;替代master&#xff0c;主要用来版本发布。…

IDEA中使用Git功能和IDEA中的Git分支管理

IDEA中使用Git功能 IDEA中创建Git仓库 1、设置Git程序的路径 2、设置编译器的GitHub账号 3、新建项目 4、发布项目到GitHub IDEA向Git提交修改后的代码 1、实现git add 2、开始commit 3、实现git commit -m 4、实现git push origin master 项目成员使用IDEA的Git功…

【Git-10】Eclipse中Git分支管理

分支管理&#xff0c;是 Git 开发中的一个非常有效的团队开发策略。多个程序员并行开发&#xff0c;每个程序员可以定义各自的分支&#xff0c;在自己的分支上开发工程。再开发结束测试完毕后&#xff0c;再合并到主干工程中&#xff0c;一次性提交到远程。由其他程序员使用。 …

Git 分支管理最佳实践

Git 是目前最流行的源代码管理工具。大量的软件项目由 GitHub、Bitbucket 和 GitLab 这样的云服务平台或是私有的 Git 仓库来管理。在使用 Git 时通常会遇到的一个问题是采用何种分支管理实践&#xff0c;即如何管理仓库中作用不同的各类分支。和软件开发中的其他实践一样&…

Git分支管理办法,每个团队不一样,仅供参考!

原创不易&#xff0c;转载注明出处&#xff0c;喜欢就点个赞吧&#xff01; 网上有很多文章&#xff0c;很少有实际具体的流程图说明&#xff0c;我根据我们团队的情况&#xff0c;画了几张简图&#xff0c;仅供参考。 每个公司的代码管理方式都不一样 主要有两种 1.TrunkB…