fuzz upx
首先拉取upx代码并切换到3.94版本
git clone https://github.com/upx/upx.git
cd upx
git checkout v3.94
拉取依赖(在当前目录下运行)
git submodule update --init --recursive
上面这一步是为了拉取src/lzma-sdk/目录下的代码
vim src/Makefile
# toolchain
CC = /home/yan/fuzz/ijon/afl-gcc -fprofile-arcs -ftest-coverage(添加)
CXX ?= /home/yan/fuzz/ijon/afl-g++ -fprofile-arcs -ftest-coverage(修改)
安装 UCL 参考https://blog.csdn.net/qq_33728095/article/details/110174556?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-4-110174556.pc_agg_new_rank&utm_term=upx+%E6%80%8E%E4%B9%88%E5%AE%89%E8%A3%85&spm=1000.2123.3001.4430
链接:http://www.oberhumer.com/opensource/ucl/
./configure CPPFLAGS="$CPPFLAGS -std=c90 -fPIC"
make
sudo make install
进入upx目录
export UPX_UCLDIR=/home/yan/fuzz/ucl-1.03
make all
注意是在upx文件夹而不是src
错误提示:warnings being treated as errors
解决方法:打开Makefile,将-Werror选项去掉,编译通过
编译完成之后就可以进行fuzz了
afl-cov的使用
afl-cov主要是为了查看覆盖率,并且需要编译支持。 参考原文:fuzz upx
./afl-cov/afl-cov -d fuzz_upx/upx_out/ --live --coverage-cmd="./upx/upx_2/src/upx.out AFL_FILE" --code-dir="./upx/upx_2/src/"
-d afl-fuzz 的输出目录
--live 实施获取
--coverage-cmd 被fuzz文件与AFL_FILE 为生成的例子
--code-dir= 代码目录
先执行afl-cov,再执行afl,afl-cov将读取afl output/queue中的所有文件
mkdir upx-in upx-out 在fuzz之前,为了实现更多的的代码覆盖率,我们需要收集一些不同的binary来放到afl的输入目录。AFL的样本选择对于Fuzz的效果至关重要,如果样本太大会导致AFLfuzz时速度很慢,最好小于1KB。
/home/yan/fuzz/afl-cov/afl-cov -d /home/yan/fuzz/upx/upx-out/ --live --coverage-cmd="/home/yan/fuzz/upx/src/upx.out AFL_FILE" --code-dir="/home/yan/fuzz/upx/src/"
afl-fuzz -i upx_in -o upx_out -m 300 -t 300000 – upx/src/upx.out @@ 在upx_out 目录下存在cov目录,cov目录下存在web,打开index.html查看
参考afl-cov文章:afl覆盖率统计工具afl-cov常见问题总结 https://github.com/mrash/afl-cov https://fgroove.github.io/2019/03/08/afl-cov/
|