修改 AFL 以包含 Fuzzer 在种子选择中考虑的新变量

Modifying AFL to include a new variable for the Fuzzer to consider in seed selection

我正在了解 AFL 如何实施其种子选择。据我了解,afl-fuzz.c 有一个名为 has_new_bits 的函数,其中 returns 值用于识别输入结果是否创建了新路径、新边或者它是否不是我们正在考虑的有趣分支.所以我的问题是,假设我能够插入一些代码行,允许我插入变量,例如计数器,我可以插入其他代码行,在给定的分支中增加它,我该如何修改AFL 这样它就能检测到吗?

在AFL++中,您可以直接使用__afl_coverage_interesting影响覆盖位图。例如,您可以使用计数器的值计算 val 参数(但请注意 val 是 u8)。

另一种方法是使用 FuzzFactory, a modified version of AFL that allow the user to define custom coverage metrics. In their paper 作者讨论了 FuzzFactory 可以使用的一种可能的覆盖指标,即有效性。具有有效性,模糊器 select 具有更多概率有效输入。您可以破解它并制作一个 FuzzFactory 版本,该版本专注于触发不安全代码的输入而不是有效输入。