0
点赞
收藏
分享

微信扫一扫

fuzzfactory复现记录

小布_cvg 2022-03-30 阅读 36
git clone https://github.com/rohanpadhye/FuzzFactory

选项1:通过基于LLVM的工具进行特定领域的反馈

在根目录

make
make llvm-domains

然后

cd demo
WAYPOINTS=mem ../afl-clang-fast demo.c -o demo
../afl-fuzz -p -i seeds -o results ./demo

其余的模糊测试环节与平时运行AFL类似。按CTRL+C来停止模糊测试。在摸索过程中,会创建以下日志文件,其中有关于特定领域反馈的粗略输出:results/fuzzfactory.log。
请添加图片描述
通过LLVM仪器化的新领域
为了实现你自己的特定域的仪器化传递,让我们称它为域foo。(1) 在llvm_mode目录下创建文件waypoints-foo-pass.cc和waypoints-foo-rt.c,(2) 在根目录下运行make llvm-domains DOMAINS+=foo,(3) 在设置环境var WAYPOINTS=foo后用afl-clang-fast编译测试程序。为了帮助创建通行证和运行时文件,可以使用上一节列出的实现作为模板。

选项2:通过手动调用API进行特定领域的反馈

FuzzFactory也可用于手动增强测试程序并指定特定领域的测试目标。只需包括waypoints.h并在你的测试程序中使用以下宏。

/** 
 * Creates a new DSF map `name` with `size` keys, `reducer` function, and `initial` aggregate value.
 *
 * To be called at the top-level global scope.
 */
FUZZFACTORY_DSF_NEW(name, size, reducer, initial)

/** Set dsf[k] = max(dsf[k], v); */
FUZZFACTORY_DSF_MAX(dsf, k, v)

/** Set dsf[k] = dsf[k] | v; */
FUZZFACTORY_DSF_BIT(dsf, k, v)

/** Set dsf[k] = v; */
FUZZFACTORY_DSF_SET(dsf, k, v)

/** Set dsf[k] = dsf[k] + v; */
FUZZFACTORY_DSF_INC(dsf, k, v)


举报

相关推荐

0 条评论