十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

不止于CTF:如何用radius2测试用例生成器做路径敏感Fuzz测试

不止于CTF:如何用radius2测试用例生成器做路径敏感Fuzz测试 不止于CTF如何用radius2测试用例生成器做路径敏感Fuzz测试【免费下载链接】radiusradius2 is a fast binary emulation and symbolic execution framework using radare2项目地址: https://gitcode.com/gh_mirrors/ra/radiusradius2 是一个基于 radare2 的快速二进制仿真与符号执行框架除了刷 CTF它内置的-F测试用例生成模式还能自动遍历程序的所有执行路径为每条路径生成一份路径敏感的 Fuzz 测试用例——真正做到一次探索全路径覆盖。为什么半径比随机更快路径敏感测试的原理传统随机 Fuzz如 libFuzzer靠碰运气触发分支而 radius2 的测试生成器是符号执行驱动的把程序输入定义为符号值未定的占位符程序在 ESIL 中间语言上逐条指令仿真遇到条件跳转就把状态一分为二两条路径继续并行探索每当某条路径经过一个条件分支点就用约束求解器boolector为这条路径上的输入求出一个具体值每个唯一路径 唯一输入组合都写成一个测试用例文件。也就是说它不是猜输入而是数学上证明地覆盖每一条可达路径。快速上手3条命令生成测试用例第1步安装工具链先安装 radare2radius2 的底层引擎再通过 cargo 安装cargo install radius2第2步运行测试生成项目自带了一批测试二进制如tests/ais3、tests/r100、tests/r200、tests/looper直接拿它们练手radius2 -p tests/ais3 -s flag 256 -A . flag -F testcases -P参数解读参数作用-p tests/ais3目标二进制-s flag 256定义一个 256 比特的符号变量flag-A . flag把它作为第 1 个命令行参数传给程序-F testcases开启 Fuzz 模式用例输出到该目录-P打印性能剖析信息第3步查看结果$ ls testcases flag0000 flag0001 flag0002 flag0003 flag0004 flag0005 $ cat testcases/flag0005 ais3{I_tak3_g00d_n0t3s}-P还会告诉你探索效率init time: 74039 run time: 194957 instructions: 2226 instr/usec: 0.011418 generated: 5 total time: 269024不到 0.3 秒2226 条指令生成了 6 份覆盖不同路径的用例——这就是快的含义。用例是怎么产生的看源码更清晰生成逻辑在 radius/src/main.rs 的 Fuzz 分支中约第 760 行起。核心思路维护一个状态队列每条路径对应一个State寄存器 内存 路径约束每执行一条指令若该指令是条件跳转或条件调用源码中以type_num位掩码0xf判断就对当前符号值求值得到这一路径的输入实例相同输入去重后按flag0000、flag0001…… 顺序写入-F指定的目录状态的生命周期由 radius/src/state.rs 中的StateStatus枚举管理Active / Break / Unsat / Crash / Exit不可满足的路径会被求解器自动剪掉。配合 ESIL hook-H选项还能在指定地址注入任意表达式把只测输入分支升级为测试程序内部任意条件。控制爆炸让大程序也能跑完路径敏感意味着分支越多状态越多半径提供了三件控制武器-m 地址合并点多条路径在此地址合并为一条显著压缩状态空间radius2 -p tests/r200 -s stdin 48 -X Incorrect -m 0x00400811是官方给出的标准用法--max n限制同时存活的路径状态数防止内存爆炸-z惰性求解延迟求值符号 PC官方示例中把 1 秒的运行时间压到 0.4 秒。不止解 Flag把用例喂给真机 Fuzz 器生成目录里的文件是纯输入数据可以直接作为AFL / libFuzzer 的语料种子先让 radius2 用符号执行扫平所有路径再把种子交给随机 Fuzz 做深度扰动这是目前公认的高效组合拳崩溃复现的最小输入每个用例对应一条唯一路径出现崩溃时可直接定位到路径覆盖率度量基线generated数量 × 路径条件就是你程序可达路径的地图。适用边界与架构支持radius2 完整支持x86、amd64、ARM、AArch64对 MIPS、PowerPC 提供实验性支持还能跑 Dalvik 字节码、eBPF 等详见 radius/Cargo.toml 与 README.md。需要注意符号输入通过-s/-f/-A定义未提供的文件只读真实文件系统、绝不回写Fuzz 模式是逐路径探索分支极多的巨无霸程序记得配-m合并点它是精确覆盖工具适合中小规模关键函数超大二进制建议先用它圈定范围。小结特性说明驱动方式符号执行 ESIL 仿真非随机输出每条唯一路径一份测试用例速度微秒级状态步进示例 0.3s 扫完全部路径求解器boolector约束求解进阶-HESIL hook、-m合并、--max限流从 CTF 解题器到路径敏感 Fuzz 引擎radius2 只需要多敲一个-F参数——让符号执行帮你把程序的所有岔路口走一遍。【免费下载链接】radiusradius2 is a fast binary emulation and symbolic execution framework using radare2项目地址: https://gitcode.com/gh_mirrors/ra/radius创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表