天天看点

American Fuzzy Lop(AFL) Fuzz无源码程序

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 @@
           

继续阅读