首页 > 编程知识 正文

fuzzy方法,fuzz造句

时间:2023-05-05 18:43:55 阅读:219829 作者:1807

开始fuzzing

首先从github上把代码给克隆下来:
git clone https://github.com/brackeen/ok-file-formats.git

编写Fuzz程序

我们先编写一个程序将要测试的函数加进去,如下写出一个都jpg文件的程序main.c.

#include <stdio.h>#include "ok_png.h"int main(int _argc, char **_argv) { FILE *file = fopen(_argv[1], "rb"); ok_png image = ok_png_read(file, OK_PNG_COLOR_FORMAT_BGRA | OK_PNG_PREMULTIPLIED_ALPHA); fclose(file); if (image.data) { /* code */ printf("Got image ! Size: %li x %li n", (long) image.width, (long) image.height); free(image.data); } return 0;}

然后直接通过afl-gcc进行编译:
afl-gcc -g -o fuzz_png main.c ok_png.c ok_png.h

如图,编译完成后生成fuzz_png.

用AFL进行Fuzz

在开始fuzz之前,先测试一下程序是否正常
./fuzz_png png/test.png

正常运行!!!!准备fuzz
afl-fuzz -m none -t 1000 -i png -o out ./fuzz_png @@

Fuzz的性能优化 1.种子筛选

我们可以用 afl-cmin 和 afl-tmin 工具分别对这些测试用例实现“测试集精简化”、“测试用例最小化”,命令如下(在跟afl-fuzz一样的目录下)

#cminafl-cmin -i png -o newpng ./fuzz_png @@#处理完成mv png cmin_pngmv newpng png#tminafl-tmin -d 1 -i png -o newpng ./fuzz_png @@#处理完成mv png tmin_pngmv newpng png 2.多线程

afl 自带了多线程的方式,通过设置主进程(-M)和从属进程(-S)来设置多个进程一起Fuzz,参数后面加名称(这个名称会在-o输出文件夹里单独用这个作为文件夹命令)
轻松的哑铃 ./fuzz_png @@

3. 查看Fuzz的状态

进入Fuzz阶段之后,看到crash就停吗?万一没有看到crash呢?那么多进程要一个一个检查吗?
肯定不是的,首先要确定一个fuzz过程是不是该停止了最直观的办法是看右上角的cycle done,不是看数字,而是看颜色,当变成绿色的时候基本上就该停了,没多少新路径可以给你用了,这时候不管有没有crash其实再继续意义也不大了,不能说不可能有crash,只是几率极低了。

4. afl-whatsup

当开了很多进程的时候,比如30个,即使是用了screen,也不能一下一下的点这看吧,所以用afl-whatsup是最方便的方式,可以看到实时的fuzz进展。

afl-whatsup out_dir#这里的out_dir是-o参数后面的,而不是-M或者-S后面的 5.afl-plot

还有一个工具afl-plot,论文上会经常看到一些图标,而且很多论文图表格式都一致,其实是afl-plot工具制作的,他会制作一个网页,下面带着三张图,就像这样:

结果分析

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。