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