fuzz初探

afl的安装使用教程 afl的一个参考博客 无源码AFL测试安装遇到的问题

  • 最近打算学习fuzz,阅读afl相关源码,感觉这个过程是一个很枯燥的过程,但是很多事情都是这样,只有付出才能有所收获。希望通过阅读相关源码,我希望能够对一个项目有更深入的理解,同时对于fuzz这种工具有更深入的理解,希望有助于以后开发软件安全或者自动化工具,能在二进制安全方面有所突破
  • 主要有以下打算
  1. 通过别人的博客先明白afl大致流程, 学长的博客 , 网上找到的一位师傅的博客 另一位师傅的博客 , afl-fuzz源码分析 通过阅读他们的理解先大致明白afl到底在做些什么,同时还要留意 afl的白皮书
  2. 自己阅读相关源码,多注释,提升对源码的理解,这应该会是一个很漫长的过程
  3. 能否有合适场景可以自己去修改源代码,或者去阅读论文尝试复现

AFL 不是一个简单的 CRUD 项目,其内部充斥着各种精细的优化手段。我们现在需要寻找一个切入点,去阅读项目源码。直接阅读 afl-fuzz.c 恐怕会陷入「看到一个函数 -> 寻找函数定义 -> 看到里面调用了另一个函数……」这样的循环,因此笔者准备先读项目的其他部分,积攒一些理解,然后再读 afl-fuzz.c。这就如同在阅读一个图片处理库的核心源码之前,先读一个调用了这个库的小程序的源码,熟悉各种 API 的用途,从而读核心源码的时候也更容易。

我们阅读源码的主要目标应该是: 1.理清静态插桩过程(gcc、clang、llvm mode) 2.理清 fuzz 过程:如何变异、如何将 input 传递给程序、如何收集覆盖度信息 3.理清 qemu mode 的插桩和执行过程

阅读源码会经常查看某个函数的定义,然后回到main函数,可以用Alt + ←回到光标的上一个位置

AFL如何展开自己的工程:1.可以试试优化一些算法,这应该要读论文 2.如何针对特定的文件进行fuzz,如何设置输入,分析输出,这偏向于实操

笔记只记录afl-gcc.c、afl-as.c和afl-fuzz.c这三个源码内容,afl-analyze.c、afl-showmap.c、afl-tmin.c虽然只粗略看看是怎么回事就行