fuzzing - 达到超时时如何使afl-fuzz不跳过测试用例
问题描述
我目前正在尝试使用 AFL fuzzer (American Fuzzy Lop) 对 PDF 查看器进行模糊测试。
我的问题很简单,afl-fuzz
希望应用程序在处理后接受输入并关闭。但是,PDF 查看器旨在打开文档并保持打开状态直到关闭。结果是afl-fuzz
所有初始输入都达到超时并决定在这里停止。
...
[*] Validating target binary...
[*] Attempting dry run with 'id:000000,orig:myPDFsample00.pdf'...
[*] Spinning up the fork server...
[+] All right - fork server is up.
[!] WARNING: Test case results in a timeout (skipping)
[*] Attempting dry run with 'id:000001,orig:myPDFsample01.pdf'...
[!] WARNING: Test case results in a timeout (skipping)
[*] Attempting dry run with 'id:000002,orig:myPDFsample02.pdf'...
[-] PROGRAM ABORT : All test cases time out, giving up!
Location : perform_dry_run(), afl-fuzz.c:2883
我想知道如何告诉 AFL 考虑达到超时并终止程序是测试用例的“正常”行为。
解决方案
事实上,通常的做法似乎只是通过exit(0)
在解析后添加一个来检测您正在查看的软件的代码。
这似乎很基本,但我工作......
另一种方法可能是更改 AFL 软件中超时的含义。但是,当您的软件可能进入永无止境的循环时,它不会检测到“挂起”。
因此,最好的方法似乎是在解析完成后在目标软件中添加一个exit(0)
(或者return 0
如果你在)。main()
推荐阅读
- swift - 静态 UITableView 未显示在 UIViewController 中
- mysql - MySQL中主键后使用聚集关键字的目的是什么
- java - 如何将html修改为jsp显示页面以进行servlet响应
- php - 在 Woocommerce 结帐中设置结帐字段
- c# - 具有多个 where 子句的 Entity Framework Core LINQ 查询
- c# - 如何使用共享客户创建直接收费?
- javascript - 一个重复的倒数计时器,即使在浏览器刷新后也会继续
- android - 用于 Android/Cordova CLI 的 Gradle 版本
- ms-access - MS Access VBA 下载附件 Mkdir 路径不存在
- aurelia - 如何观察/订阅 Aurelia Store 中的状态变化?