使用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 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的