符号执行与白盒模糊测试有何不同?

How is Symbolic Execution different from Whitebox Fuzzing?

我不明白符号执行与白盒模糊测试有何不同?据我了解,Whitebox Fuzzers 以某种初始输入格式象征性地执行代码。 此外,如果有人可以参考 KLEE 和 AFL 工具区分这两种形式,将会很有帮助。

白盒模糊测试不仅可以通过符号执行来完成。 Microsoft Research 的 SAGE 是使用混合执行的白盒模糊器示例,也称为动态符号执行,请参阅 NDSS08

是的,Whitebox Fuzzers 得到一些 seed/seeds(最初的 input/inputs)并用这些象征性地执行代码。 Concolic 模糊器还 运行 具有这些输入的代码与符号执行并行。

KLEE 是一个使用符号执行的白盒模糊器。

AFL 是一个灰盒模糊器 - 它仅使用内部结构信息来计算覆盖率,而不是获取新路径。有用于 AFL 的工具可以从代码中的比较中获取常量并将它们添加到 AFL 字典中,但这仍然是 不是白盒模糊测试。