既然要进行覆盖率的引导来辅助遗传算法的进化过程,就必须统计覆盖率,而如果想要记录这一数值,就需要用到插桩技术,插桩一共有三种模式:llvm mode,汇编层面插桩,qemu-mode动态插桩。 2.2.1静态插桩 有两种静态插桩方式:llvm mode,汇编层面插桩。 如果拥有受测试程序...
1. afl-fuzz部分 afl-fuzz部分和非qemu模式是相同的,主要是通过管道接收来自forkserver传入的status信息,通过status信息来判断是否存在crash if(unlikely(/* A normal crash/abort */(WIFSIGNALED(fsrv->child_status)) ||/* special handling for msan and lsan */(fsrv->uses_asan && (WEXITSTATUS(fsrv-...
既然要进行覆盖率的引导来辅助遗传算法的进化过程,就必须统计覆盖率,而如果想要记录这一数值,就需要用到插桩技术,插桩一共有三种模式:llvm mode,汇编层面插桩,qemu-mode动态插桩。 2.2.1静态插桩 有两种静态插桩方式:llvm mode,汇编层面插桩。 如果拥有受测试程序的源代码,可以使用静态插桩技术来实现覆盖率的记录和增...
如果你只有二进制文件,你就可以用AFL的QEMU模式:二进制会在一个被打过补丁的QEMU里执行,然后收集覆盖信息,并传递给AFL。 AFL的QEMU补丁工作如下:在qemu_mode/patches/afl-qemu-cpu-inl.h文件里包含了实际的实现,包含了两个主要部分,一个是forkserver,另外一个是执行轨迹的插桩。forkserver是AFL用来优化初始化额外...
既然要进行覆盖率的引导来辅助遗传算法的进化过程,就必须统计覆盖率,而如果想要记录这一数值,就需要用到插桩技术,插桩一共有三种模式:llvm mode,汇编层面插桩,qemu-mode动态插桩。 2.2.1静态插桩 有两种静态插桩方式:llvm mode,汇编层面插桩。 如果拥有受测试程序的源代码,可以使用静态插桩技术来实现覆盖率的记录和增...
既然要进行覆盖率的引导来辅助遗传算法的进化过程,就必须统计覆盖率,而如果想要记录这一数值,就需要用到插桩技术,插桩一共有三种模式:llvm mode,汇编层面插桩,qemu-mode动态插桩。 有两种静态插桩方式:llvm mode,汇编层面插桩。 如果拥有受测试程序的源代码,可以使用静态插桩技术来实现覆盖率的记录和增强,这一功能被...
进行无源码测试之前我们要进入到 AFL/qemu_mode 在终端中执行一下 ./build_qemu_support.sh 遇见如下报错: make[1]: *** [/xxxxxxxx/AFL/qemu_mode/qemu-2.10.0/rules.mak:66: linux-user/syscall.o] Error 1 make: *** [Makefile:326: subdir-x86_64-linux-user] Error 2 ...
进行无源码测试之前我们要进入到 AFL/qemu_mode 在终端中执行一下 ./build_qemu_support.sh 遇见如下报错: make[1]: *** [/xxxxxxxx/AFL/qemu_mode/qemu-2.10.0/rules.mak:66: linux-user/syscall.o] Error 1make:*** [Makefile:326: subdir-x86_64-linux-user] Error 2 ...
主要的代码在afl-fuzz.c文件中,然后是几个独立模块的实现代码,llvm_mode和qemu_mode的代码量大致相当,所以分析的重点应该还是在AFL的根目录下的几个核心功能的实现上,尤其是afl-fuzz.c,属于核心中的重点。 各个模块的主要功能和作用的简要说明: 插桩模块 ...
qemu_mode:qemu 插桩模式,针对二进制文件插桩。 fuzzer模块 afl-fuzz.c:fuzzer 实现的核心代码,AFL 的主体。 辅助模块 afl-analyze:对测试用例进行分析,通过分析给定的用例,确定是否可以发现用例中有意义的字段; afl-plot:生成测试任务的状态图; afl-tmin:对测试用例进行最小化; afl-cmin:对语料库进行精简操作...