AFL++實戰(四)-測試opencv

opencv

OpenCV的全稱是Open Source Computer Vision Library,是一個跨平臺的計算機視覺庫。OpenCV是由英特爾公司發起並參與開發,以BSD許可證授權發行,可以在商業和研究領域中免費使用。OpenCV可用於開發實時的圖像處理、計算機視覺以及模式識別程序。該程序庫也可以使用英特爾公司的IPP進行加速處理。項目源碼

opencv的下載

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

git clone https://github.com/opencv/opencv.git
cd opencv
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
sudo make install
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'  
sudo ldconfig

有源碼測試

測試代碼

//test.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }
    Mat image;
    image = imread( argv[1], 1 );
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

配置

新建一個CMakeLists.txt文件。

cmake_minimum_required(VERSION 2.8)
project( test )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( test test.cpp )
target_link_libraries( test ${OpenCV_LIBS} )

對於完整的項目,需要將編譯器指定爲 afl-clang,然後再進行編譯。

#進入到test項目文件夾
export CC=afl-clang
export CXX=afl-clang++
cmake .
make

fuzz

正式執行 fuzz 測試的命令如下:

mkdir in
# 在in文件下下創建圖片語料庫
afl-fuzz -m none -i in -o out ./test -d @@

測試結果

在這裏插入圖片描述

黑盒測試

配置

首先在下載好opencv後,對opencv直接進行編譯安裝,生成二進制文件。

cd ../samples/  
sudo cmake .  
sudo make -j4

cd cpp/samples/cpp/example_cmake
cmake .
make

啓用QEMU模式,要先編譯。

# 進入到AFLplusplus所在位置
cd qemu_mode
./build_qemu_support.sh

fuzz

afl-fuzz -Q -m none -i in -o out_res ./opencv_example @@

測試結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章