绘制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)
效果预览