Python angr 符号执行生成 C 语言 Control-flow Graph (CFG)

本文介绍了如何使用angr库进行控制流图(CFG)绘制,包括安装angr和相关工具angr-utils的步骤,以及提供了一个从头开始创建项目、分析代码并生成图形化的CFG实例。
摘要由CSDN通过智能技术生成

绘制CFG利用包 angr 首先安装

pip install angr

参考angr相关文档
https://docs.angr.io/en/latest/analyses/cfg.html

通过文档得知GitHub中的demo用法,以下为方法转述
https://github.com/axt/angr-utils

安装相关依赖angrutils(注意,需要在相应环境中(如conda进入需要安装的环境conda activate env-needed),进入相应文件夹位置再输入指令)

cd angr-dev
git clone https://github.com/axt/bingraphvis
pip install -e ./bingraphvis
git clone https://github.com/axt/angr-utils
pip install -e ./angr-utils

注意:这样安装只是在相应位置添加了索引,因此应该首先在合适的位置创建文件夹,再进行操作,clone出来的两个文件夹位置改变将会使安装失效

原文画图demo

import angr
from angrutils import *
proj = angr.Project("<...>/ais3_crackme", load_options={'auto_load_libs':False})
main = proj.loader.main_object.get_symbol("main")
start_state = proj.factory.blank_state(addr=main.rebased_addr)
cfg = proj.analyses.CFGEmulated(fail_fast=True, starts=[main.rebased_addr], initial_state=start_state)
plot_cfg(cfg, "ais3_cfg", asminst=True, remove_imports=True, remove_path_terminator=True)  

我的画图demo,其中m为gcc编译之后的文件

import angr
from angrutils import *

# 创建一个angr项目对象
proj = angr.Project("m", load_options={"auto_load_libs": False})

main = proj.loader.main_object.get_symbol("main")
start_state = proj.factory.blank_state(addr=main.rebased_addr)
cfg = proj.analyses.CFGEmulated(fail_fast=True, starts=[main.rebased_addr], initial_state=start_state)
plot_cfg(cfg, "ais3_cfg", asminst=True, remove_imports=True, remove_path_terminator=True)

效果预览
转自https://github.com/axt/angr-utils

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值