使用afl-fuzz测试poppler(一)
使用afl-fuzz测试poppler
安装afl-fuzz
-
本人Ubuntu版本为16.04,安装好了llvm和clang。如果没有安装,使用如下命令安装:
sudo apt-get install llvmsudo 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 CC和env | grep CXX,查看是否设置成功:
![]()
-
在
poppler-poppler-0.82文件夹中,存在一个install文件,打开它,查看如何编译安装:
![]()
-
在命令行上中按照上面的提示,输入
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,会提示缺少
NSS3、JPEG、TIFF、qt5相关内容、GTK、gobject-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文件中那样,执行make和make install就可以了。在这个过程中,可以看到,日志中出现的都是afl-xx字样,表示确实是在使用afl相关套件进行编译
![]()
-
结束后发现,在
\build文件夹中,多出了utils文件夹,这里面的程序,就是用来被fuzz的
![]()










浙公网安备 33010602011771号