用途:面向 CTF 逆向题,当输入在长循环或深比较链中逐字节校验、人工逆推繁琐时,用 angr 做符号执行自动求解;也适用于已知“输入须到达某地址或避开某地址”的路径条件求解。简单 XOR 或明文比较、含不可符号化内容(随机数、环境相关值)的场景不建议使用。
主要能力:符号化 stdin、argv、文件、内存缓冲区、网络包、JNI 参数及自定义 VM 字节码等输入通道;用 simgr.explore(find=..., avoid=[...]) 建模成功与失败路径;对找到的状态用 solver.eval 求解并输出字节;通过 hook 无关调用、veritesting、num_find=1 等应对路径爆炸。
使用方式:pip install angr 安装,注意 angr 9.3.0 起要求 Python 3.12+,9.2.x 下限随补丁版本抬高,装前以 PyPI requires-python 为准,建议用 venv 隔离并先升级 pip setuptools wheel;Linux 可补 binutils。典型流程为反编译定位输入读取点与成功/失败分支地址,创建符号变量与初始状态,explore 后求解,最后在沙箱内用求解结果运行目标验证。
限制:符号执行易路径爆炸,需先人工缩小符号化范围;find 地址选错、PIE 基址偏移、输入长度不符、未符号化输入都会导致无解或结果跑不通;SimProcedure 摘要可能不准,除零约束需显式添加,未初始化寄存器/内存可能被自动符号化。求解过程本身不接触真实系统调用,但运行验证应走沙箱。