使用afl-fuzz测试poppler

使用afl-fuzz测试poppler

安装afl-fuzz

  • 本人Ubuntu版本为16.04,安装好了llvm和clang。如果没有安装,使用如下命令安装:

    sudo apt-get install llvm

    sudo apt-get install clang

  • 首先在afl-fuzz官网下载最新版的压缩包,如图所示:

  • 在这里,我选择了afl-2.52b的版本,下载后解压到afl-2.52b文件夹中

  • 进入刚解压好的文件夹中,使用如下命令来编译安装

    cd ./afl-2.52b
    make
    make install
  • 安装成功后,输入afl-fuzz,出现如下界面,证明安装成功:

编译安装poppler

  • poppler的GitLab中下载相应版本的代码压缩包进行解压缩。如果为了尽快出结果,可以选择相对旧一些的版本,在这里,我选择了最新版的poppler进行编译安装。
  • 解压缩文件后,我们得到了poppler-poppler-0.82文件夹,进入

  • 使用如下命令,修改编译环境:

    export CC=afl-gcc
    export CXX=afl-g++
  • 分别使用env | grep CCenv | grep CXX,查看是否设置成功:

  • poppler-poppler-0.82文件夹中,存在一个install文件,打开它,查看如何编译安装:

    扫描二维码关注公众号,回复: 7783390 查看本文章
  • 在命令行上中按照上面的提示,输入

    mkdir build
    cd build
    cmake ..
    make
    make install
  • 在这里,当我输入cmake ..后,系统提示出错了,缺少freetype

使用apt-get install libfreetype6-dev进行安装

  • 安装好后,再次输入cmake ..后,系统又提示出错了,缺少fontconfig

使用apt-get install libfreetype6-dev libfontconfig1-dev libgpm-dev进行安装(网上找的,可能安装多了)

  • 接下来,如果是旧版本的poppler,比如0.26就可以继续执行上面剩下的命令顺利安装了。但是!对于新版的poppler,会提示缺少NSS3JPEGTIFFqt5相关内容GTKgobject-introspection-1.0,使用下面的命令进行安装:

    apt-get install libnss3-dev
    apt-get install libjpeg-dev
    apt-get install libtiff-dev
    apt-get install qtbase5-dev
    apt-get install libgtk-3-dev
    apt-get install libgirepository1.0-dev
  • 接下来!当我安装好上面的内容后,它又提示我如下内容,意思就是找不到OpenJPEG

使用apt-get install libopenjpeg5进行安装,再次cmake ..,还是出现了这样的问题。

通过在网上查找,发现了解决方法,参考网站:大体的意思就是,cmake默认使用libopenjpeg-1.5,但poppler要求其版本至少为2,所以使用cmake -DENABLE_LIBOPENJPEG=unmaintained ..来执行就可以了。

  • 最后,我们神奇地发现,真的成功了!可坑死我了 :)

  • 然后,按照install文件中那样,执行makemake install就可以了。在这个过程中,可以看到,日志中出现的都是afl-xx字样,表示确实是在使用afl相关套件进行编译

  • 结束后发现,在\build文件夹中,多出了utils文件夹,这里面的程序,就是用来被fuzz的

开始fuzz

  • 未完待续

参考内容:

猜你喜欢

转载自www.cnblogs.com/xrblog/p/11817302.html