在AFL中,种子选择是通过选择一组优秀的输入文件(即种子)来控制的,以便进行更好的测试。为了使Fuzzer能够选择适当的种子,需要在AFL中添加新的变量,以考虑它们是否适合使用。以下是一种解决方案:
/* The user-defined variable */
#define AFL_NEW_VARIABLE 1
/* Check the user-defined variable before making a choice */
if (favored && !user_defined_variable_condition) {
return favored;
}
/* Set the user-defined variable */
if (AFL_NEW_VARIABLE) {
set_new_variable();
}
例如,如果我们想在AFL中添加一个新的变量来控制输入的长度,我们可以在'config.h”文件中添加以下内容:
/* The user-defined variable */
#define AFL_INPUT_LENGTH 50
然后,在fuzzer.c文件中,在'choose_next_input”函数中添加以下代码行:
/* Check the user-defined variable before making a choice */
if (favored && !input_length_condition(favored)) {
return favored;
}
最后,在campaign.c文件中,在perform_fuzzing函数中执行以下代码行:
/* Set the user-defined variable */
if (AFL_INPUT_LENGTH) {
set_input_length();
}
这是通过添加新的变量来控制输入长度的简单示例。对于其它需要添加的新变量,可以根据需要进行类似的修改。