4.1.6 模糊测试

Loko 可以与 AFL++ 一起使用。此工具 可以探索程序中所有可能的路径以查找 崩溃。你可以使用它来自动检查,例如,解析器 在任何输入上都不会崩溃。

使用方法是准备一个从标准输入读取数据 并将其传递给被测代码的小程序。使用 loko -fcoverage=afl++ program.sps 构建你的程序。此标志告诉 Loko 为 AFL++ 添加分支插桩。此代码 带有一些开销,因此仅在模糊测试时使用。

插桩后的二进制文件会修改一个与 afl-fuzz 共享的 内存区域。每个 if 表达式(包括展开为 if 表达式的语法)会根据 执行的是真分支还是假分支来以不同的方式修改该区域。 这意味着该区域为程序中每个走过的路径 提供了独特的指纹。

在对使用 Loko 构建的程序进行模糊测试时,通常应使用 AFL_CRASH_EXITCODE=70 afl-fuzz -i inputs/ -o outputs/ -- ./program 运行模糊测试器,其中 inputs 是一个包含 示例输入文件的目录。

验证 AFL++ 与程序之间的交互是否 按预期工作以及 AFL++ 是否检测到崩溃是有意义的。这 可以通过在程序中为某些输入 引入显式崩溃来完成。

关于 AFL++ 的全面讨论超出了本手册的范围。请 参阅 AFL++ 网站获取更多阅读材料。

插桩支持已在 AFL++ 4.04c 上进行了测试。