AFL实战

AFL实战关于 AFLAmericanf 号称是当前最高级的 Fuzzing 测试工具之一 由谷歌的 MichalZalews 所开发 通过对源码进行重新编译时进行插桩 简称编译时插桩 的方式自动产生测试用例来探索二进制程序内部新的执行路径 与其他基于插桩技术的 fuzzers 相比 afl fuzz 具有较低的性能消耗 有各种高效的 fuzzing 策略和 tricks 最小化技巧 不需要

  1. 关于AFL
    American fuzzy lop 号称是当前最高级的Fuzzing 测试工具之一,由谷歌的Michal Zalewski 所开发。通过对源码进行重新编译时进行插桩(简称编译时插桩)的方式自动产生测试用例来探索二进制程序内部新的执行路径。与其他基于插桩技术的fuzzers 相比,afl-fuzz 具有较低的性能消耗,有各种高效的fuzzing 策略和tricks 最小化技巧,不需要先行复杂的配置,能无缝处理复杂的现实中的程序。

在这里插入图片描述
下面还是以a.out为例
在这里插入图片描述
通过管道命令传参数个它看看


  1. 尽量使测试用例足够小
    大用例不光使得目标进程解析时需要耗费更多CPU 时间和更多内存,也会使得fuzz 进程效率非常低下。举个例子,如果要对一个图片处理程序进行fuzz,就没必要将高分辨率的照片作为用例,一个16×16 分辨率的图片就足矣。再举个例子,从数据上来看,如果一个用例的大小为100 字节,那么fuzz 1000 次,可以有71% 的机会触发到有问题的执行路径;如果用例的大小变为1k 字节,则同样的执行次数,触发有问题的分支的概率降低为%11;如果用例规模进一步增长,变为10k字节,则同样的执行次数,触发问题分支的概率将降低为%1。
  2. 确保测试对象足够简单
    有些基本的文件格式处理库被不同的处理程序使用,有些处理程序功能复杂,有些简单,那么,我们应该选择那些功能简单的处理程序来fuzz。举个例子,就图片格式处理程序来说,djpeg、readpng 以及gifhisto 要比ImageMagick 在执行效率上快5 到10 倍,但是他们都用同样的图片格式解析库。
  3. 只给需要测的库进行打桩因为AFL
    是在汇编级别对被测程序的源码进行插桩的,也就是说,插桩的点越多,编译出来的程序执行效率就会越低。那么,如果只想对其中某一个库进行fuzz 的话,可以用未插桩的库替换掉被测程序中使用AFL 编译器编译出来的库。
  4. 并行
    afl-fuzz 设计成只给工作进程分配一个核,现在的机器都具备多个CPU,每个CPU 又有多个核,所以我们可以最大地发挥硬件效率,同时执行多个afl-fuzz。

8 参考资源

  1. 台湾国立交通大学的一个大佬写的入门教程http://spencerwuwu-blog.logdown.com/posts/-a-simple-guide-of-afl-fuzzer
  2. 看雪一篇结合gdb分析crash的关于afl的教程https://bbs.pediy.com/thread-249179.htm
  3. 多种afl工具使用及多种情况下afl处理的文章https://0x00sec.org/t/fuzzing-projects-with-american-fuzzy-lop-afl/6498
  4. 使用afl来fuzz binutils的例子 https://www.evilsocket.net/2015/04/30/fuzzing-with-afl-fuzz-a-practical-example-afl-vs-binutils/
  5. 使用afl挖imagemagick的cve的文章https://github.com/lcatro/Fuzzing-ImageMagick/blob/master/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Fuzzing%E6%8C%96%E6%8E%98ImageMagick%E7%9A%84%E6%BC%8F%E6%B4%9E.md
  6. 天融信阿尔法实验介绍afl的文章https://www.freebuf.com/articles/system/191536.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201969.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:11
下一篇 2026年3月20日 上午8:11


相关推荐

  • C语言编写一个计算器(附全源代码)「建议收藏」

    C语言编写一个计算器(附全源代码)「建议收藏」这个计算器其实是我老师布置的一个c语言大作业,捉摸着搞了那么久的东西不能浪费了吧,于是我分享下我的代码和大概思路给个关注点个赞,后续我会分享更多我们学生党的作业问题白嫖党们先看代码,我就先上上全代码,干!(一)软件环境:Devc++我用的这个软件哈,个人感觉这里功能简单,特别容易上手。看图说话,是不是很简单嘛,又不复杂。(二)设计方案根据自学所得栈进行数据和符号的存储再输出,先设立单独的数据栈符号栈,我们以top=-1为标准,判断其是否为空栈,当然也用到了学过的struct来构建栈,先把字符存

    2022年6月3日
    238
  • SCOI 2016 bzoj 4567~4572 题解

    SCOI 2016 bzoj 4567~4572 题解bzoj4567[Scoi2016]背单词首先,我们发现如果有S(a)是S(b)的后缀,那么S(a)一定先加入那么倒着建字典树,每次dfs自己所有的儿子,看哪棵子儿子结束节点最多,按照这个顺序贪心儿子结束节点:遍历当前节点子树能够到达并且不经过其他结束节点的节点什么意思呢,假设说我们有一个aabb有一个abb,那么我计算abb的时候可以忽略aabb的贡献,这两个串对于b只

    2022年7月26日
    10
  • 堆栈溢出排查

    堆栈溢出排查ps-ef|greprimsjmap-histo:live28972|head-7启动程序时配置内存溢出时自动导出dump文件-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/home/d5000/eas/easDmSync/heapdump.hprof

    2025年6月13日
    3
  • java游戏的扩展名_java源程序文件的扩展名是什么?

    java游戏的扩展名_java源程序文件的扩展名是什么?目前护理已经发展为一门专业,源程是因为其具有以下特征序文常用组合体的组合方式有叠加和切割。()扩展铅垂线的投影特性包括()物体上互相平行的线段,源程其轴测投影互相()轴线为铅垂线的圆柱被两相交平面截切,序文其中一个面为水平面,另一个面为侧平面,其截交线的空间形状为()扩展空间点A到V面的距离等于()两个圆柱体相贯穿,源程共同外切于同一球体,相贯线为两条椭圆曲线。()H、序文W两投影投影连线垂直…

    2022年7月7日
    23
  • onedrive免费扩容25t_onedrive怎么免费扩容1T

    onedrive免费扩容25t_onedrive怎么免费扩容1TOneDrive存储我们都知道没有开office365,自己onedrive的储存空间只有5GB,onenote做笔记以及用onedrive同步文档空间不够,但是又不想开office365;所以在网上看到别人说onedrive可以推荐别人注册,可以扩容10GB;加起来一共15GB,用来做笔记完全够用;或许有大佬会说可以弄到Office教育版的微软账号,有5T或1T的存储空间,但是这个会涉及到账号里面文档的安全性,这种账号是属于教育机构的,全局管理员可以有权查看里面储存的文件并且有权删去账号,这样的

    2025年10月17日
    3
  • 浅析 PHP7 底层运行机制[通俗易懂]

    浅析 PHP7 底层运行机制

    2022年2月11日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号