Technical "whitepaper" for afl-fuzz
https://lcamtuf.coredump.cx/afl/technical_details.txt
AFL-Fuzz 可以说是最成功的 fuzzing 工具了
不过现在已经没有在维护
现在比较活跃的 project 是 AFL++
https://github.com/AFLplusplus/AFLplusplus
也不像原始的 AFL,还多加了一堆新东西进去
我觉得由 symbolic execution 转向 fuzzing 这件事
其实就是大家发现逻辑推理比想像中的难用
还是靠随机好 大力出奇蹟 随机比想像中厉害的多
只是不同的随机方法之间还是有高明之分
现代主流的 coverage-based fuzzing
让随机产的 input 有个方向
也就是有个好坏的判定依据
有点像机器学习的 loss function
不过毕竟程式执行这件事是非常不连续的东西
coverage 也只是一个很粗浅且没什么理论依据的评分方式
说到底这本来就是不可解的问题
毕竟有那种输入就是程式的程式(编译器之类的)
感觉就不太可能有什么严谨的理论
要严谨起来又回到 symbolic execution 那一套
阿现实世界稍微大型一点的程式就是跑不起来
不然就是 program analysis 之类的
不过会有 false positive
而且重点是没有 payload 你还要自己想怎么触发、有没有可能触发