Buuctf - 网鼎杯青龙组2020signal 之angr库求解

程序全是switch-case

angr执行到返回地址,测试输入
angr中explore是个关键函数

参数:

find:目标地址或者多个目标地址列表。当执行到这些地址时,它们被认为是成功的状态。
avoid:要避免的地址或者地址列表。如果执行流程到达这些地址,则认为是失败的状态。
start:开始探索的地址。如果不指定,则从项目入口点开始
他可能的参数包括限制探索深度、初始状态配置等。
返回值:通常是一个 SimulationManager 对象,其中包含找到了多少符合 find 或 avoid 条件的状态信息。
# -*- coding: utf-8 -*-
import angr
project = angr.Project("signal.exe") #创建项目,加载二进制文件
state = project.factory.entry_state() #创建state
sm = project.factory.simulation_manager()
sm = sm.explore(find = 0x0040175F,avoid = 0x004016e6)
if sm.found:
    final_state = sm.found[0]
    print(final_state.posix.dumps(0))

代码原理可以找上一篇博客

贴一篇别人的代码

import angr
project = angr.Project('signal.exe') 	#创建项目,加载二进制文件
state = project.factory.entry_state()	#创建state
sim = project.factory.simgr(state)		#创建sim
sim.explore(find=0x40175e,avoid=0x4016e6) # 希望到达的和避免的分支
if sim.found:
    res = sim.found[0]
    res = res.posix.dumps(0)
    print("[+] Success! Solution is: {}".format(res.decode("utf-8")))

写好之后将signal.exe和.py放在同一个文件夹下导入Linux运行
结果:

安装angr

最好在虚拟环境里

# 安装 virtualenv(如果尚未安装)
pip install virtualenv

# 创建虚拟环境
virtualenv myenv

# 激活虚拟环境
# 对于 Linux/macOS:
source myenv/bin/activate

# 对于 Windows:
myenv\Scripts\activate

执行python文件

python +文件名(后缀是.py)

得到flag

posted @ 2025-04-26 09:24  Bri1  阅读(36)  评论(0)    收藏  举报