在没有源代码的情况下对Linux二进制代码进行模糊测试
时间:2022-06-22
本文章向大家介绍在没有源代码的情况下对Linux二进制代码进行模糊测试,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
AFL配合DynamoRIO,没错,就是drAFL。在drAFL的帮助下,我们就可以在没有源代码的情况下对LInux二进制代码进行模糊测试了。
drAFL
原始版本的AFL支持使用QEMU模式来对待测目标进行黑盒测试,因此在使用drAFL之前,作者强烈建议大家先尝试使用一下原始版本的AFL,如果达不到各位的目标,再来使用drAFL。
工具使用
首先,你需要定义DRRUMPATH值来指向drrun启动工具,并设置LIBCOVPATH来指向libbinafl.so代码覆盖库。除此之外,你还需要设置AFL的fork服务器(AFLNOFORKSRV=1),或者设置“AFLSKIPBIN_CHECK=1”。具体请参考代码构建部分的第五步。
注意:请注意,针对64位代码库,你需要使用64位的DynamoRIO,如果使用的是32位的代码库,你就需要使用32位的DynamoRIO了,否则工具将无法正常运行。你可以使用下列命令来确保项目运行在DynamoRIO下:
drrun -- <path/to/your/app/> <app_args>
代码构建
第一步:将drAFL代码库克隆到本地。
git clone https://github.com/mxmssh/drAFL.git /home/max/drAFLcd/home/max/drAFL
第二步:克隆并构建DynamoRIO。
git clone https://github.com/DynamoRIO/dynamoriomkdir build_drcd build_dr/cmake../dynamorio/make -jcd ..
如果在DynamoRIO的编译环节遇到问题的话,可以参考这篇【文档】。
第三步:构建代码覆盖工具
mkdir buildcd buildcmake ../bin_cov/ -DDynamoRIO_DIR=../build_dr/cmakemake -jcd ..
第四步:构建AFL。
cd afl/makecd ..
第五步:配置环境变量并执行扫描任务。
cd buildmkdir inmkdir outecho "AAAA" > in/seedexport DRRUN_PATH=/home/max/drAFL/build_dr/bin64/drrunexport LIBCOV_PATH=/home/max/drAFL/build/libbinafl.soexport AFL_NO_FORKSRV=1export AFL_SKIP_BIN_CHECK=1../afl/afl-fuzz-m none -i in -o out -- ./afl_test @@
注意:对于afl_test测试样例,可能需要大概25-30秒的执行时间。
项目地址
drAFL:https://github.com/mxmssh/drAFL
*参考来源:mxmssh,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
- 机器人带着VR学习,最后学会了人工智能
- 超经典的JBOSS入门文章
- ASP.NET2.0应用中定制安全凭证
- AI造的AI,比人造的还厉害,该喜还是该忧?
- Mono 3.2 测试NPinyin 中文转换拼音代码
- Reactive Extensions介绍
- Reactive Extensions(Rx) 学习
- 发布一个日期选择控件(ASPNET2.0)
- 做程序员压力山大,很多人都快疯了
- 小程序让交通出行变得如此简化,看看这些微信小程序你有在用了吗?
- 中小企业如何选择DDoS防御方案?
- “熊医生”出诊正确率超九成 医院:人工智能更多是辅助
- PLC编程优化方法,让程序运行提速!
- 这是硅谷狂人马斯克对未来做出的11个大胆预测,人工智能比核武器更危险
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 你真的理解Binder“一次拷贝“吗?
- ggplot2_boxplot
- ggplot_Violin Plot & dot plot
- 只要网速够快,小视频看完一个删一个,任性!Python爬取小视频
- ggplot barplot and error bars
- 设计稿生成游戏界面
- ggplot Stripchart and line
- ggplot2 核密度图和直方图
- 喜欢的歌曲不在一个平台怎么办?你需要一个自己专属的音乐播放器
- ggplot_QQ图和ECDF
- tidyverse evaluation
- 下载歌曲的时候嫌麻烦?打造专属你的音乐下载器
- Tidyverse补充
- 抖音关键词热度搜索小程序(附源码)
- python自定义函数基础