You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angr无法求解GoogleCTF入门逆向题,运行脚本无输出求故障原因

代码无法正常运行的常见原因及解决方案

1. 地址配置错误

你设置的find_addr和avoid_addr需要和二进制实际加载后的地址完全匹配:

  • 确认Ghidra加载二进制时是否正确开启了基址偏移匹配,是否将PIC二进制的基址手动设置为了0x100000,如果Ghidra默认的基址不是该值,你找到的成功/失败地址会存在偏移,导致angr无法命中目标地址。
  • 确认find_addr指向的是成功输出flag/提示成功的指令位置,而不是该函数的返回地址或者其他相邻位置。

2. 搜索空间过大未添加前置约束

该题的flag符合标准CTF格式,固定前缀为CTF{,后缀为},你当前只添加了可打印字符约束,15位可打印字符的搜索空间极大,符号执行短时间内无法找到合法路径:
可以在字符约束部分增加固定前缀的约束,示例:

# 增加固定前缀约束 CTF{
state.solver.add(flag_chars[0] == ord('C'))
state.solver.add(flag_chars[1] == ord('T'))
state.solver.add(flag_chars[2] == ord('F'))
state.solver.add(flag_chars[3] == ord('{'))
# 增加固定后缀约束
state.solver.add(flag_chars[-1] == ord('}'))

3. Unicorn引擎兼容问题

WSL2环境下Unicorn模拟经常出现兼容性问题,容易导致执行卡住或者路径探索异常,你可以先移除Unicorn加速选项,修改state初始化代码:

state = proj.factory.full_init_state(
        args=['./a.out'],
        stdin=flag,
)

4. FLAG长度配置错误

确认你设置的FLAG_LEN = 15和题目的实际flag长度匹配,如果长度设置错误,会导致符号执行无法匹配正确的输入校验逻辑,找不到合法路径。

5. 其他排查方向

  • 确认你下载的题目二进制正确,且./a.out有可执行权限,架构为x86_64,angr可以正常识别。
  • 执行时增加verbosity=1参数查看探索进度,确认代码是在运行中还是已经终止没有找到符合条件的路径:
simgr.explore(find=find_addr, avoid=avoid_addr, verbosity=1)

内容的提问来源于stack exchange,提问作者Woo Byeong Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:15:04