Fuzz无源码程序
AFL依赖QEMU实现了这个功能,qemu是一个仿真器。
无源码测试FFmpeg,参考:https://blog.csdn.net/qq_36711003/article/details/107016408
FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。
$ wget https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2
$ tar -jxvf ffmpeg-4.0.2.tar.bz2
$ cd ffmpeg-4.0.2/
$ ./configure
执行./configure 会报错 yasm/nasm not found or too old on linux
分析:yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。
解决错误:安装yasm编译器。安装方法如下:
$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
$ tar -xvf yasm-1.3.0.tar.gz
$ cd yasm-1.3.0
$ make
$ make install
参考:https://www.jianshu.com/p/3df64cc8b896
再次进入 ffmpeg-4.0.2/ 文件夹
$ ./configure
$ make
$ make isntall
构建语料库
ffmpeg黑盒测试主要就是用的官网上的语料库,本次实验主要是用的test数据集下的一些avi测试集。构建语料库代码如下
$ mkdir in # 当前文件夹下创建in文件下
$ cd in
# 通过wget指令可以下载测试语料库,这里只给出一个测试集
$ wget http://samples.ffmpeg.org/tests/DivX-test/Xmen-OpenDivX-200-slow.avi
对没有源代码的程序进行测试,这时就要用到AFL的QEMU模式了。启用QEMU模式,要先编译。进入afl-2.52b下的qemu_mode文件夹
$ cd qemu_mode
$ ./build_q./build_qemu_support.sh
执行./build_q./build_qemu_support.sh语句会报错’libtool’ not found, please install first,执行下列语句解决
$ apt-get install libtool
$ apt-get install libtool-bin
再次执行./build_q./build_qemu_support.sh,会报错 ‘***’ not found, please install first,执行下列语句解决
$ apt-get install python
$ apt-get install bison
再次执行./build_q./build_qemu_support.sh,会报错 devel version of ‘glib2’ not found, please install first,执行下列语句解决,解决后再次执行./build_q./build_qemu_support.sh即成功。
参考: https://www.dazhuanlan.com/halailai/topics/1539321
$ apt-get install libgtk2.0-dev
接下来进入ffmpeg-4.0.2 文件夹下,执行下列命令语句
afl-fuzz -Q -m none -i in -o out ./ffmpeg -i @@
报错 failed to locate ‘afl-qemu-trace’,原因:使用apt方式安装的afl没有afl-qemu-trace(不支持使用QEMU模式),所以我们需要下载afl的源码自己编译。
或者不用重新下载afl的源码,执行下列命令 好像 也可以开始fuzz
afl-fuzz -n -m none -i in -o out ./ffmpeg -i @@