当前位置: 首页 > news >正文

MacOS 下fuzz学习踩坑点

前言

最近在学习fuzz,发现macos下有一些和windows下不同的点导致学的不是很顺畅,于是把我踩过的坑记录一下。

主要教程:https://github.com/antonio-morales/Fuzzing101 基本上就是跟着这个为主线的,下文简称fuzz101

前置知识点:
- Liunx操作
- docker 部署
- clash上网环境

接下来默认使用clash上网环境环境,并使用虚拟网卡(TUN模式)以保证网络连通性。

但是还是要一台x86_64 的windows作为备用机才好,毕竟教程是面向x86_64下的

一、环境安装

1.1 docker环境准备

推荐使用docker容器安装,因为fuzz过程中会编译大量的旧版本库,或者依赖于旧版本组建,使用docker用完就丢才是正确选择。

macos安装docker:https://docs.docker.com/desktop/setup/install/mac-install/

image

我这里使用的是M3,直接安装苹果芯片版,然后就是常规的安装docker.app,这里没啥坑点,做一遍流程就好

1.2 docker镜像拉取

这里我拉取的是AFL++官方的,而不是fuzz101

  1. 拉取镜像(仅需做一次,之后不用做)。

    docker pull aflplusplus/aflplusplus:latest
    

    如果拉取失败检查是否clash上网环境。

  2. 启动 AFLPlusPlus docker 容器:

    	docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus
    

    出现这样就是成功
    image

  3. 更新软件索引

    apt update
    apt upgrade -y
    apt install sudo -y
    

    前面两句是老熟人了,这里解释一下为什么要安装sudo,因为有些ai生成出来的带一大堆sudo,懒得一个个删除,反正sudo加不加都无所谓就干脆安装上了。

1.3 一些常见问题的解决

建议先去跟着教程做,做到出问题再来看,这一块是用来解决问题的,和上文关联性不是很强,但是又经常遇到就放在这里快速查阅了

1.3.1 出现./configure出错

报错大概长这样:
image

这是因为项目太老了(2008-01-08),没办法识别aarch64(arm64)架构

解决方案:

更新config.guessconfig.sub

GNUconfig.guessconfig.sub是独立维护的,可以替换掉旧版本。

下载最新版本:

wget -O config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess'
wget -O config.sub   'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub'

覆盖源码目录里的:

cp config.guess config.sub ./config/

再运行:

./configure --prefix="替换为你的目标安装目录" --disable-shared

就能看到正常识别了

image

1.3.2 插桩编译

直接走一遍这个流程

# 回到源码目录
cd $HOME/fuzzing_tiff/tiff-4.0.4# 清理
make clean 2>/dev/null || true# 设置编译器为 afl-clang-lto(或 afl-gcc/afl-clang-fast/)
export CC=afl-clang-lto
export CXX=afl-clang-lto
export CFLAGS='-O2 -g -fno-omit-frame-pointer'
export CXXFLAGS="$CFLAGS"
export LDFLAGS=''# 重新 configure
./configure --prefix="替换为你的目标安装目录 --disable-shared# 编译并安装
make -j$(nproc)
make install

如果要启用ASan,做设置编译器后做:

export AFL_USE_ASAN=1
AFL_USE_ASAN=1 ./configure --prefix="替换为你的目标安装目录" --disable-shared
AFL_USE_ASAN=1 make -j$(nproc)
AFL_USE_ASAN=1 make install

1.3.3 代码覆盖率检测

原文:
https://github.com/antonio-morales/Fuzzing101/tree/main/Exercise 4

这里摘抄出命令部分方便快速使用

代码覆盖率
代码覆盖率是一种软件指标,用于显示每行代码被触发的次数。通过使用代码覆盖率,我们将了解模糊器已经到达代码的哪些部分,并可视化模糊测试过程。

首先,我们需要安装 lcov。我们可以使用以下命令来完成:

sudo apt install lcov

现在我们需要使用标志(编译器和链接器)重建 libTIFF:--coverage

rm -r 源码目录/install
cd 源码目录
make cleanCFLAGS="--coverage" LDFLAGS="--coverage" ./configure --prefix="替换为你的目标安装目录" --disable-shared
make
make install

然后,我们可以通过键入以下内容来收集代码覆盖率数据:

cd 源码目录
lcov --zerocounters --directory ./
lcov --capture --initial --directory ./ --output-file app.info#运行要分析的应用程序,按照具体命令来执行
$HOME/fuzzing_tiff/install/bin/tiffinfo -D -j -c -r -s -w $HOME/fuzzing_tiff/tiff-4.0.4/test/images/palette-1c-1b.tiff
lcov --no-checksum --directory ./ --capture --output-file app2.info

我将尝试解释每个命令:

  • lcov --zerocounters --directory ./:重置以前的计数器
  • lcov --capture --initial --directory ./ --output-file app.info:返回包含每条检测线的零覆盖率的“基线”覆盖率数据文件
  • $HOME/fuzzing_tiff/install/bin/tiffinfo -D -j -c -r -s -w $HOME/fuzzing_tiff/tiff-4.0.4/test/images/palette-1c-1b.tiff:运行要分析的应用程序。您可以使用不同的输入多次运行它
  • lcov --no-checksum --directory ./ --capture --output-file app2.info:将当前覆盖状态保存到 app2.info 文件中
  • 最后,我们必须生成 HTML 输出:
    genhtml --highlight --legend -output-directory ./html-coverage/ ./app2.info
  • 如果一切顺利,则在文件夹中创建了代码覆盖率报告。只需打开文件,您应该会看到如下内容:
    html-coverage./html-coverage/index.html

很显然,这和fuzz不冲突,可以配合fuzz使用(在环境目录分别指定两者),然后优先运行lcov,之后运行fuzz即可。

二、一些感念

虽然说概念又多又杂,但是还是要理解一些非常重要的,至少知道怎么去问ai

施工中~

http://www.hskmm.com/?act=detail&tid=10415

相关文章:

  • An Empirical Study on Commit Message Generation using LLMs via In-Context Learning 论文笔记
  • 实用指南:人工智能学习:Transformer结构中的编码器层(Encoder Layer)
  • vcpkg 安装依赖
  • Java03课前问题列表
  • JavaScript错误处理完全指南:从基础到自定义错误实战
  • 1、论文准备
  • PION 游击
  • Web3 开发者修炼全图谱:从 Web2 走向 Web3 的实用的系统性学习指南
  • 实用指南:医院高值耗材智能化管理路径分析(下)
  • Flutter应用自动更新系统:生产环境的挑战与解决方案
  • .NET Core中使用SignalR
  • 实用指南:修复Conda连接异常:CondaHTTPError HTTP 000 CONNECTION FAILED故障排除指南
  • 高级数据结构手册
  • Tarjan 学习笔记
  • 使用JavaScript和CSS创建动态高亮导航栏
  • Gridspech 全通关
  • 1967
  • 20253320蒋丰任
  • .
  • 又有两位智驾大牛联手入局具身智能机器人赛道创业,已完成数亿元融资!
  • 纯国产GPU性能对比,谁才是国产算力之王?
  • 地平线明年发布并争取量产舱驾一体芯片;比亚迪补强智舱团队,斑马智行原 CTO 加入
  • 英伟达入股英特尔,当竞争对手便成协作者,真正受益的......
  • ODT/珂朵莉树 入门
  • 在AI技术快速实现功能的时代,挖掘新需求成为关键突破点——某知名游戏资源分析工具需求洞察
  • 蜜罐
  • 【光照】[漫反射]UnityURP兰伯特有光照衰减吗?
  • prenotami.esteri.it 意大利签证预约error
  • reLeetCode 热题 100- 15. 三数之和 - MKT
  • XXL-TOOL v2.1.0 发布 | Java工具类库