Я пытаюсь ознакомиться с использованием afl++. Я написал простую программу, которая должна давать сбой из-за переполнения буфера, если argv[1] слишком длинный.
int main(int argc, char *argv[])
{
char buffer[4];
if(argc == 2)
{
strcpy(buffer, argv[1]);
}
return 0;
}
Я ожидаю, что сбой будет обнаружен afl++ в ближайшее время, но после работы в течение некоторого времени, может быть, около 2 часов, я пока не вижу никаких зарегистрированных сбоев.
Командная строка, которую я использовал, была
afl-fuzz -i afl_inputs -o afl_outputs -- ./target_application
Программа была составлена с
CC=afl-clang-fast++ AFL_HARDEN=1 make
Интересно, что когда я устранял эту проблему, я поместил некоторые символы ASCII в свой входной файл, например, просто символ Z, и изменил командную строку таким образом, что afl-fuzz -i afl_inputs -o afl_outputs -- ./target_application @@
и afl++ немедленно завершится, заявив, что один из тестовых случаев вызвал сбой.
Кроме того, я попытался запустить само приложение с этими входными файлами ./target_application ./afl_inputs/input.txt
и ./target_application < ./afl_inputs/z.txt
, но оно не падает в обоих случаях.
Вопросы
- Что я делаю не так?
- Поскольку afl++ фаззит стандартный ввод, могу ли я предположить, что argv[1] должен быть заполнен случайными значениями, если я не указал @@? Хотя мне кажется, что мое предположение неверно.
- Означает ли @@, что он будет читать из моих входных файлов и помещать то, что он читает, в командную строку (из того, что я прочитал из документации, похоже, это так)?