2022-11-15
/上一部分对afl
如何实现反馈进行了较为详细的介绍,本文将对afl
如何实现监控进行分析。监控是指afl
能够成功运行目标程序、获取目标程序的反馈信息(运行状态)并判定此次运行是否有效(此次运行的样例是否增加了模糊测试的覆盖率、是否崩溃或超时),以更有效的指导下一次模糊测试及保存崩溃。
2022-11-02
/前面几篇文章将afl
的大部分内容都已经覆盖到了(编译、反馈到监控),最后一个部分主要讲afl
是如何挑选样本并针对样本的数据进行变异的。通过之前的分析我们已经知道,编译的种子通过链表的形式形成种子队列,种子经过变异后如果能够触发目标程序新的行为,会作为新的种子队列存入到链表中。但是对于新一轮的模糊测试,挑选哪个种子进行变异以及如何变异尚未解决,本文主要阐述afl
是如何挑选种子进行变异以及如何变异。
2022-09-26
/上一部分对afl-fuzz
的总流程进行了概要性的阐述,接下来将会对关键的代码模块进行详细的分析。
先对afl-fuzz
过程中反馈与监控机制的实现进行分析,反馈是指afl
在对目标程序的模糊测试过程中,目标程序可以将本次运行过程中的状态反馈给afl
。本文主要介绍该afl
是如何具体实现分支信息的记录以及更高效的运行目标程序的。
2022-09-01
/第一部分介绍了afl
插桩编译的过程,思考了很久才定下第二部分写些什么。本来打算第二部分详细解释插桩部分和forkserver
的代码的,但是感觉如果对afl-fuzz
的整体流程没有大致掌握的话,直接去描述细节会让人不理解为什么afl
这部分要这样去设计,因此决定在第二部分将afl-fuzz
的主要流程(main
)和部分不是关键代码的函数给说清楚,后续再逐步对关键代码模块进行详细分析,j继而实现对afl
模糊测试的解析。
2022-05-23
/学习经典的fuzz
框架AFL
,通过源码的阅读学习fuzz
,为以后针对特定目标进行模糊测试打下基础。
AFL
的基础使用可以去看通过afl-training学习afl,具体的使用不再进行说明。