准备环境:
系统:Ubuntu 18.04.5
LLVM:llvm-10(推荐visfuzz使用的版本,以免版本不兼容)
python:Python 3
visfuzz源码地址:visfuzz源码地址
开始安装
贴上源码的安装方法,我们将安装此方法一步一步进行安装:
-
Install LLVM (>= 8.0), python3.
-
Download and compile VisFuzz:
git clone https://github.com/ChijinZ/VisFuzz.git cd VisFuzz export DEMO_PATH=$PWD/demo export TOOL_PATH=$PWD/visfuzz cd $TOOL_PATH/fuzz mkdir build cd build cmake ../llvm/ . make export VISFUZZ_BUILD=$PWD cd $TOOL_PATH/fuzz/afl make
-
Fuzz && visualize demo:
cd $DEMO_PATH/re2 sh compile.sh cd repo mkdir in echo a>in/seed nohup $TOOL_PATH/fuzz/afl/afl-fuzz -i in -o out ./app @@ & python $TOOL_PATH/open_file_server.py 6767 # Open a new terminal cd $TOOL_PATH/visualization python -m http.server 8000
-
Open browser (Chrome is recommended) and visit localhost:8000
1.Install LLVM (>= 8.0), python3. 以及git
①安装llvm-10
我们现在查询系统是否安装了llvm以及安装了llvm的版本
llvm-as --version
根据查询可知没有安装如何llvm版本
我们在搜索系统是否有llvm-10的版本
sudo apt search llvm-10
最后我们安装llvm-10
输入y 再回车等待安装完成后再执行查询目录下面是否已安装llvm-10。Ps:安装慢的可以进行换源设置,具体操作请自行百度。
此时我们发现文件夹中虽然有了llvm-10
但是通过
llvm-as --version
查询发现还是提示没有安装,这是因为没有设置环境变量
echo 'export PATH=/usr/lib/llvm-10/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
通过配置环境变量我们能查询单llvm版本了
②安装Python
同理我们对python进行安装
安装Python
sudo apt install python
查询Python版本命令
python --version
③安装git
sudo apt install git
查询是否安装git
git --version
2.Download and compile VisFuzz
①下载源码
我们在合适的目录下用git命令下载源码
git clone https://github.com/ChijinZ/VisFuzz.git
②执行readme中剩下的步骤
运行到cmake …/llvm/ . 我们发现提示我们没有这个命令,此时我们根据提示安装camke即可
sudo apt install cmake
安装完后继续执行
此时我们又发现一个错误信息。
安装clang clang++
sudo apt install clang-10
sudo apt install clang++-10
发现安装完成后还是报同样的错误,此时仔细研究发现提供的命令不对,可通过如下命令执行
原命令
cmake ../llvm/ .
新命令
cmake ../llvm/
接着readme的教程执行命令:
make
export VISFUZZ_BUILD=$PWD
cd $TOOL_PATH/fuzz/afl
make
3.Fuzz && visualize demo:
cd $DEMO_PATH/re2
sh compile.sh
cd repo
mkdir in
echo a>in/seed
nohup $TOOL_PATH/fuzz/afl/afl-fuzz -i in -o out ./app @@ &
python $TOOL_PATH/open_file_server.py 6767
# Open a new terminal
cd $TOOL_PATH/visualization
python -m http.server 8000
当我们执行到python $TOOL_PATH/open_file_server.py 6767 发现报错
我们将此命令更改为
python3 $TOOL_PATH/open_file_server.py 6767
成功启动服务
我们在VisFuzz文件夹中右键空白处打开一个新的终端
依次输入:
export DEMO_PATH=$PWD/demo
export TOOL_PATH=$PWD/visfuzz
cd $TOOL_PATH/visualization
python3 -m http.server 8000
4.新的问题
此时我们发现打开的这个网址后并没有出现我们预计的效果,我们按F12打开浏览器的开发者面板
我们发现请求一直在报错,什么原因呢?跟着这些报错信息我们深究下去
通过查询服务地址我们并没有发现所谓的fuzzer_stats这个文件
我们此时查看的惹re2/compile.sh 这个脚本的内容:
compile.sh内容:
#!/bin/bash -eu
J8=-j8
CLANGPP=clang++-10
LLVMLINK=llvm-link-10
OPT=opt-10
CXXFLAGS='-g -flto'
[[ -d repo ]] || git clone https://github.com/google/re2.git repo
mkdir -p repo/bitcode
cd repo
make clean
cp ../target.cc ./
git checkout -f 499ef7eff7455ce9c9fae86111d4a77b6ac335de
CXX="$CLANGPP" CXXFLAGS="$CXXFLAGS" make "$J8" obj/libre2.a
"$CLANGPP" $CXXFLAGS ./target.cc -c -o bitcode/target.o -I .
cd bitcode
ar x ../obj/libre2.a
"$LLVMLINK" *.o -o combined.bc
"$OPT" -load=$VISFUZZ_BUILD/libVisFuzz.so -visfuzz -fvisfuzz-export=static.json \
combined.bc -o instru.bc
"$CLANGPP" -g -fuse-ld=lld instru.bc $VISFUZZ_BUILD/libVisFuzzDriver.a -pthread -o app
cp {app,static.json} ..
此时我在想是不是这个脚本出现了问题,于是我决定自己执行这些脚本的内容,当然我做了一些改动:
我们新打打开一个终端,重新定义一下局部变量
cd VisFuzz
export DEMO_PATH=$PWD/demo
export TOOL_PATH=$PWD/visfuzz
cd $TOOL_PATH/fuzz
cd build
export VISFUZZ_BUILD=$PWD
cd $DEMO_PATH/re2
接下来我们开始手动运行脚本里面的命令:
cd repo
make clean
cp ../target.cc ./
git checkout -f 499ef7eff7455ce9c9fae86111d4a77b6ac335de
"clang++-10" -g -flto ./target.cc -c -o bitcode/target.o -I .
cd bitcode
ar x ../obj/libre2.a
"llvm-link-10" *.o -o combined.bc
"opt-10" -load=$VISFUZZ_BUILD/libVisFuzz.so -visfuzz -fvisfuzz-export=static.json \
> combined.bc -o instru.bc
"clang++-10" -g -fuse-ld=lld-8 instru.bc $VISFUZZ_BUILD/libVisFuzzDriver.a -pthread -o app
运行到此处又发现了一个报错信息,我们解决这个报错,将 -fuse-ld=lld-8删除掉
"clang++-10" -g instru.bc $VISFUZZ_BUILD/libVisFuzzDriver.a -pthread -o app
cp {app,static.json} ..
然后重新再执行
nohup $TOOL_PATH/fuzz/afl/afl-fuzz -i in -o out ./app @@ &
最后在re2的文件夹中有如下文件即可
make clean
cp ../target.cc ./
git checkout -f 499ef7eff7455ce9c9fae86111d4a77b6ac335de
CXX="clang++-10" CXXFLAGS="-g -flto" make "-j8" obj/libre2.a
"clang++-10" -g -flto ./target.cc -c -o bitcode/target.o -I .
cd bitcode
ar x ../obj/libre2.a
"llvm-link-10" *.o -o combined.bc
"opt-10" -load=$VISFUZZ_BUILD/libVisFuzz.so -visfuzz -fvisfuzz-export=static.json \
combined.bc -o instru.bc
"clang++-10" -g instru.bc $VISFUZZ_BUILD/libVisFuzzDriver.a -pthread -o app
cp {app,static.json} ..
界面效果
发现在Ubuntu中安装的edge浏览器还是有点问题,可以改用自带firefox浏览器打开
命令总结
//准备工作
sudo apt install llvm-10
echo 'export PATH=/usr/lib/llvm-10/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
sudo apt install python
sudo apt install git
sudo apt install clang-10
sudo apt install clang++-10
//配置运行环境
git clone https://github.com/ChijinZ/VisFuzz.git
cd VisFuzz
export DEMO_PATH=$PWD/demo
export TOOL_PATH=$PWD/visfuzz
cd $TOOL_PATH/fuzz
mkdir build
cd build
cmake ../llvm/
make
export VISFUZZ_BUILD=$PWD
cd $TOOL_PATH/fuzz/afl
make
//下载测试代码
cd $DEMO_PATH/re2
sh compile.sh
// 手动执行脚本里面命令
cd repo
make clean
cp ../target.cc ./
git checkout -f 499ef7eff7455ce9c9fae86111d4a77b6ac335de
"clang++-10" -g -flto ./target.cc -c -o bitcode/target.o -I .
cd bitcode
ar x ../obj/libre2.a
"llvm-link-10" *.o -o combined.bc
"opt-10" -load=$VISFUZZ_BUILD/libVisFuzz.so -visfuzz -fvisfuzz-export=static.json \
> combined.bc -o instru.bc
"clang++-10" -g instru.bc $VISFUZZ_BUILD/libVisFuzzDriver.a -pthread -o app
cp {app,static.json} ..
//执行fuzz过程
cd repo
mkdir in
echo a>in/seed
nohup $TOOL_PATH/fuzz/afl/afl-fuzz -i in -o out ./app @@ &
python3 $TOOL_PATH/open_file_server.py 6767
//运行VisFuzz
cd $TOOL_PATH/visualization
python3 -m http.server 8000
结束语
如果发现并没有呈现想要的效果,可以检测是否联网,因为一些效果是通过引用互联网的样式文件才得以实现,如果想要断网情况实现效果可以将互联网文件下载到本地,修改web代码即可,这里就不做演示了。