2、LLVM mode (afl-clang-fast/afl-clang-fast++) 依赖LLVM的optimizer,稳定性较高的编译器,用的比较多,可以跨平台(non-x86)编译。 实现了编译级插桩,效果比汇编级插桩更好。 3、GCC_PLUGIN mode (afl-gcc-fast/afl-g++-fast) 效果和LLVM mode差不多,不...
2、LLVM mode (afl-clang-fast/afl-clang-fast++) 依赖LLVM的optimizer,稳定性较高的编译器,用的比较多,可以跨平台(non-x86)编译。 实现了编译级插桩,效果比汇编级插桩更好。 3、GCC_PLUGIN mode (afl-gcc-fast/afl-g++-fast) 效果和LLVM mode差不多,不过依赖的是GCC_plugin,也比较推荐。 4、GCC mode ...
因此afl-gcc在编译env_hook.c时,也无可避免的对getenv进行了插桩。而使用CC=afl-clang-fast编译,在llvm模式下对编译中间码IR进行插桩,就不会出现这个问题。
首先wget下载源码,并使用afl-clang-fast进行安装 wget https://ftp.gnu.org/gnu/wget/wget-1.19.1.tar.gz tar zxvf wget-1.19.1.tar.gzcdwget-1.19.1CXX=afl-clang-fast++CC=afl-clang-fast ./configure --prefix=/home/mortywgetAFL_USE_ASAN=1make make install 验证 root@c7c87f16a29d:/home/mort...
afl-clang-fast.c源码阅读 本文件作为clang的wrapper main 首先查找运行时libraries的位置。然后编辑参数,使用execvp(cc_params[0], (char**)cc_params)执行clang。 find_obj(argv[0]) 找运行时lib。 首先获取环境变量"AFL_PATH"为afl_path。若有,令obj_path为afl_path...
一旦对测试程序进行了这些小的更改,下一步就是使用afl-clang-fast编译测试程序,并开始使用afl-fuzz进行模糊化,如下所示。 编译和运行测试程序AFL 不幸的是,经过几天的模糊处理,AFL没有在X.509解析器中发现任何崩溃。因此,我们决定继续使用KLEE来测试解析器。
CC=AFL-clang-fast ./configure 测试中使用了两个简单的测试用例,调用了两个可用的实用程序:echo -ne 'sudo\0ls\0\0' > case1 echo -ne 'sudoedit\0test\0\0' > case2 准备就绪后,以并行模式启动了四个AFL实例。半小时后,出现了一个crash:结果:确实在sudoedit -s是崩溃了。假设并行运行了4个...
LLVM Mode模式编译程序可以获得更快的Fuzzing速度,进入llvm_mode目录进行编译,之后使用afl-clang-fast构建序程序即可,如下所示: $ cd llvm_mode$ apt-get install clang$ export LLVM_CONFIG=`which llvm-config` && make && cd ..$ ./configure --disable-shared CC="afl-clang-fast" CXX="afl-clang-fast...
1.若相同,则获取环境变量AFL_CXX的值,如果存在,则将该值赋值给cc_params[0],否则将afl-clang++赋值给cc_params[0]。这里的cc_params为保存编译参数的数组; 2.若不相同,则获取环境变量AFL_CC的值,如果存在,则将该值赋值给cc_params[0],否则将afl-clang赋值给cc_params[0]。
使用afl-clang-fast进行插桩编译,使用afl-gcc编译得到的文件无法运行,相关分析我放到文末。 编译成功后,再次验证poc能够引起崩溃。 经历总总曲折,总算可以开始测试了。 可以发现,很快就能获得一个崩溃。 查看崩溃,符合预期 在进行插桩编译的过程中,笔者一开始使用的是afl-gcc编译,但是编译出来的文件运行会直接崩溃。