fuzzfactory复现记录

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)


使用Clang的演示
本节假设你已经安装了LLVM/Clang,并且在根目录下运行了make llvm-domains。

要从一个测试程序中看到这些宏的使用示例,请cd到demo目录并运行以下程序。

diff demo.c demo-manual.c # 比较演示程序和fuzzfactory-macro增强的测试程序

编译增强的测试程序,如下所示。

../afl-clang-fast demo-manual.c -o demo-manual

使用-p选项对增强后的测试程序进行模糊处理,以启用特定领域的模糊处理。

../afl-fuzz -p -i seeds/ -o results ./demo-manual

在启用cmp和mem两个航点的情况下,对增强的程序进行模糊处理与对原始演示程序的模糊处理类似。同样,你会看到这样的输出。

[+] 1 domain-specific front-end configs received
DSF 0: Start=0x000000, End=0x000004, Size=4, Reducer[0]=0x55a947da28f0, Initial=0

以及AFL状态屏幕的开始。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值