2024年最全模糊测试-AFL学习笔记之Java_afl java,面向软件测试开发者的复习指南

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • docs 两个文档的目录
  • examples 三个例子的目录
  • fuzzerside c应用程序
  • instrumentor Java端组件

Java组件通过AFL样式管理为目标应用程序提供工具,并提供与C端通信的组件。以后执行检测程序时,这将设置一个TCP服务器,并针对每个传入请求在单独的线程中运行目标应用程序。它发送回退出代码(成功,超时,崩溃或队列已满),以及收集的路径信息。任何异常转义为main都被视为崩溃。

原理

下图是他们的poster,docs里面的ccs2017-poster-small.pdf

poster

设计

首先对于AFL来说,它并不知道自己在fuzz java程序,这是因为kelinci做了一个java程序的C版interface.c ,这个interface.c程序负责从AFL中接收变异数据,然后通过TCP传给java侧,java侧的程序叫做instrumentor,它负责把从interface传过来的变异数据真正的传递给java原始目标程序,然后再把java的运行结果反馈给interface.c,如此形成了一个fuzz的数据流闭环。

  • 在Java程序上运行AFL
  • 没有对AFL的修改
  • 易于并行化
  • 在JDK 6-9和Apache Commons Imaging中发现错误

对于模糊器生成的给定输入文件,C和Java端之间的交互如下:

  1. interface.c接收来自AFL的派生请求。
    2.派生的interface.c进程之一加载提供的输入文件,另一个继续运行派生的服务器。
    3.前一个interface.c进程通过TCP连接将提供的输入文件发送到Kelinci服务器。
  2. Kelinci服务器接收传入的请求并将其入队。
  3. Kelinci服务器通过将输入的输入文件写入磁盘,启动一个新线程,在该线程中对提供的输入调用目标应用程序的主方法并对其进行监视,从而处理请求。如果线程抛出escapes main的异常,则将其视为错误。如果线程未在给定的超时时间内终止,则将其视为挂起。
  4. Kelinci服务器将结果传递回C端。共享内存位图通过TCP连接以及状态(确定,错误或超时)发送。
    7.在C端,将接收到的位图写入共享内存。
    根据接收到的状态,程序会正常退出,中止或循环运行,直到AFL超时。

更多内容阅读ccs17-kersten.pdf,里面提到了另外两个模糊测试工具EvoSuite和Randoop

编译

进到 instrumentor目录

gradle build

编译插桩

编译成功后多出的build目录

进入fuzzerside目录

make

编译接口

使用举例

simple

编译

mkdir bin
javac src/*.java -d bin

插桩

java -cp ../../instrumentor/build/libs/kelinci.jar edu.cmu.sv.kelinci.instrumentor.Instrumentor -i bin -o bin-instrumented

结果

警告可以不管,但是错误不能不管,由于非法反射操作,导致错误,以后的版本将会对非法访问进行拒绝。

issues

issues中也有不少人对于这个问题进行了提问,部分问题作者没有给出解答,部分问题的解答是注释某些行。

创建输入字典

mkdir in_dir
echo "hello" > in_dir/example

测试字典

java -cp bin-instrumented SimpleBuggy in_dir/example

出错如下:

ClassNotFoundException

未找到类,.class文件存在,java -version, javac均没有问题,未解决,有明白的朋友请下方评论,谢谢。

转战CentOS6,使用的是之前学大数据Hadoop的虚拟机,Java环境等都有安装,不做赘述。

编译

编译

插桩

插桩

创建输入字典

mkdir in_dir
echo "hello" > in_dir/example

测试字典

Main done

有Main done字样,没有问题了。

开启kelinci服务器

java -cp bin-instrumented edu.cmu.sv.kelinci.Kelinci SimpleBuggy @@

开启服务器

测试接口

../../fuzzerside/interface in_dir/example

开始Fuzz

afl-fuzz -i in_dir -o out_dir ../../fuzzerside/interface @@

两个警告

警告可能比较慢,需要优化。。。

运行15分钟

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

链图片转存中…(img-4rgMxCGi-1715135073683)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值