開啟AFL-FUZZ LLVM模式,對網絡協議的C++程序進行模糊測試

需要下載cfe-3.5.2 llvm-3.5.2 clang-tools-extra-3.5.2 compiler-rt-3.5.2

1、xz -d 解壓 這些文件
2、tar xvf 解壓上一步解壓出來的4個tar文件
3、整合
mv cfe-3.5.2.src clang
mv clang llvm-3.5.2.src/tools

mv clang-tools-extra-3.5.2.src extra
mv extra/ llvm-3.5.2.src/tools/clang/

mv compiler-rt-3.5.2.src compiler-rt
mv compiler-rt llvm-3.5.2.src/projects/

4、編譯安裝
mkdir build-3.5
cd build-3.5/
../llvm-3.5.2.src/configure --enable-optimized --enable-targets=host-only
make -j 4
make install

5、編譯安裝afl-fuzz的llvm模塊
cd afl-2.50b/
cd llvm_mode/
make
make install

然后進入 afl-2.50b目錄。重新make install 激活安裝成功的afl-fast模塊

6、修改head.cmake

SET(CMAKE_CXX_COMPILER "afl-clang-fast++")
SET(CMAKE_C_COMPILER "afl-clang-fast")
//修改編譯器為 afl-clang-fast++ 和 afl-clang-fast++

7、修改main.cpp

while (__AFL_LOOP(1000))
{
string data;
ifstream file;
file.open(argv[3]);
file>>data;
int dst_port = x000;
char *dst_ip = "127.0.0.1";
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = inet_addr(dst_ip);
serveraddr.sin_port = htons(dst_port);
//socket send
int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
send(sockfd, data.c_str(), data.size(), 0);
printf("Send OK!\n");
file.close();
}

8、進行模糊測試
進入模塊的bin目錄
創建 in out目錄,放置好初始用例

afl-fuzz -i in -o out -m none ./XXX ../conf/conf.xml @@

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容