Fuzzing like a Caveman

最近阅读了国外一个博主的https://h0mbre.github.io/Fuzzing-Like-A-Caveman/,Fuzzing like a Caveman,这个内容很有意思,从最开始的一无所有尝试写出一个模糊测试工具,并不断进行优化。作为一个Fuzzing小白,总结一下原作者的内容。

Part1

选择exif文件解析器作为Fuzzing对象,首先介绍了一些jpeg文件的知识。

最开始使用Python语言,第一步完成一个读文件的函数get_byte(),打印文件,其实文件的本质还是2进制数。然后写了一个字节翻转bit_flip函数。

字节翻转可以说是最简单的变异策略。然后又写了一个魔术数字替换的变异函数。最终实现了一个非常简易的模糊测试器。

之后用到了Asan作为内存检测工具来发现段错误。

Part2

第二阶段没有尝试对测试用例生成算法进行改进,而是尝试优化程序代码以提升模糊器的效率。

利用Python模块cProfile对程序各部分运行时间做统计,优化函数实现,尝试通过不同库、方法实现。这是提升效率的第一种方式。

然后将语言变为C++实现,C++模糊器在速度上又取得了提升。

Part3

第三阶段引入代码覆盖率,作者简单写了一个有校验的模拟测试程序,让读者体会代码覆盖率方法是如何在模糊测试中发挥作用的。

Part4

作者分析C语言实现中,在打开文件前,程序就做了很多的系统调用,每一次测试迭代了多次系统调用,用fork()+execvp()执行过程。

引入快照机制节约时间,提升效率。这部分内容还需要细看,使用了一些没见过的库和方法,下断点,捕获快照。

Part5

这部分重点讲述覆盖率数据的种类,覆盖率数据的获取方法。这部分内容打破了我先前的认知,我认为覆盖率数据的获取都像AFL一样,通过二进制插桩的方法获取,但实际上覆盖率获取的方式有很多。

Part6

详细讲解如何实现持久模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值