Fuzz学习笔记(二)—— TrapFuzzer环境搭建

news2024/12/26 2:09:35

Fuzz学习笔记(二)—— TrapFuzzer环境搭建

  • TrapFuzzer介绍
  • 基本用法
    • 1. 插桩
    • 2. 配置config.json
    • 3. 调试
    • 4. Fuzz
  • 编译TrapFuzzer-gdb
    • Linux
      • 下载源码
      • 安装依赖项
      • 编译
      • 常见问题
        • relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object
    • Windows
      • 安装Cygwin
      • 软件包选择
      • 环境变量
      • 注意事项
      • 编译
      • 常见问题
        • fatal error: linux/limits.h: No such file or directory
  • 参考资料

TrapFuzzer介绍

描述:TrapFuzzer 是一个基于断点的覆盖率模糊测试工具,它专为大型和复杂的软件设计,如果使用动态二进制检测工具,速度会很慢。TrapFuzzer的特点是通过IDA获取代码中的基本块,从而对每个基本块进行插桩并获取覆盖率,目前仅支持x86架构。
在这里插入图片描述
项目地址:https://github.com/hac425xxx/trapfuzzer

基本用法

测试对象:火狐游览器
注意:本次演示仅介绍用法,并无实际意义。

1. 插桩

修改bb-patcher.py:
在这里插入图片描述运行:
在这里插入图片描述运行结果:
在这里插入图片描述
其中,patch文件夹里存放着patch后的文件:
在这里插入图片描述
用IDA打开,发现程序所有基本块的首字节已经被patch成0xCC(INT 3)了:
在这里插入图片描述
然后需要用patch后的文件替换源文件:
在这里插入图片描述
xxx.i64是ida64的数据库文件,由源文件分析得到。
xxx-bb.txt记录了相关patch信息,包括文件名、基本块地址、源指令等等。

2. 配置config.json

{
  "tracer": "windbg-ext-tracer",
  "mutator": "all",
  "args": [
    "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
	"C:\\Fuzz\\TrapFuzzer\\in\\1.jpg"
  ],
  "basic_block_file_path": [
    "C:\\Fuzz\\TrapFuzzer\\patch_test\\firefox.exe-bb.txt"
  ],
  "coverage_module_name": [
    "firefox.exe"
  ],
  "file_read_by_target": "C:\\Fuzz\\TrapFuzzer\\test.jpg",
  "manage_port": "8821",
  "exit_basci_block_list": "0",
  "output": "C:\\Fuzz\\TrapFuzzer\\out\\",
  "testcase": "C:\\Fuzz\\TrapFuzzer\\in\\",
  "patch_to_binary": false,
  "resume_execution": false,
  "tracer-binary":"C:\\Fuzz\\TrapFuzzer\\trapfuzzer-master\\healer.exe"
}

参数说明:
tracer - 进行ptrace的模块名,无需修改
mutator - 变异方式,参考mutator文件夹
args - 待启动的文件和参数
basic_block_file_path - 记录patch信息的文件
coverage_module_name - patch程序的名字
file_read_by_target - 每次Fuzz从in目录随机读取并变异
manage_port - 管理端口
exit_basci_block_list - 基本块地址,覆盖到这里后结束进程
output - 存放Fuzz的输出信息
testcase - 存放Fuzz的输入样本
patch_to_binary - 是否将执行过的基本块原始指令写回文件,可提高效率
resume_execution - 是否继续上次Fuzz
tracer-binary - 由作者的另一个项目trapfuzzer-windows-agent提供

3. 调试

运行healer.exe,能显示单次Fuzz基本块的覆盖记录及模块调用情况,可从中找到需结束进程的目标位置。
在这里插入图片描述

4. Fuzz

python trap_fuzzer.py

在这里插入图片描述
在out文件夹中查看fuzz的输出信息,本篇只是演示用法因此没有产生crash:
在这里插入图片描述

编译TrapFuzzer-gdb

Linux

下载源码

git clone https://github.com/hac425xxx/trapfuzzer-gdb.git

安装依赖项

apt-get install texinfo

编译

cd trapfuzzer-gdb
mkdir build
cd build
CXX="g++ -fPIC -static" CC="gcc -fPIC -static" LDFLAGS="-lncurses" ../configure --enable-static=yes --without-python
make -j4

常见问题

relocation R_X86_64_32 against hidden symbol `TMC_END’ can not be used when making a shared object

在这里插入图片描述
解决方案:使用当前gcc库中的crtbeginS.o替换crtbeginT.o

cp /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.orig.o
cp /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o

参考资料:gcc g++ 静态编译 -static 报错 crtbeginT.o: relocation R_X86_64_32 against hidden symbol `TMC_END

Windows

安装Cygwin

官网:https://www.cygwin.com/
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

软件包选择

  • Devel
    • cygwin-devel
    • libncurses-devel
    • binutils
    • gcc-g++
    • make
    • automake
    • autoconf
    • git
    • libtool
    • bison
    • texinfo
    • flex
  • Shells
    • bash
  • Interpreters
    • perl
    • python
    • ruby

环境变量

  1. 右键点击【此电脑】,依次点击【属性】-【高级系统设置】-【高级】-【环境变量】-【系统变量】
  2. 双击【PATH】,在末尾追加【X:…\cygwin64\bin目录】
    在这里插入图片描述

注意事项

  1. 如果外部环境已经安装过git,需要先将git从环境变量中移除
  2. 由于一些特殊函数需要链接到ncurses库,因此不能使用静态编译

编译

$ cd trapfuzzer-gdb
$ mkdir build
$ cd build
$ CXX="g++ -fPIC" CC="gcc -fPIC" LDFLAGS=$(pkg-config --cflags --libs ncurses) ../configure --without-python
$ make -j4

常见问题

fatal error: linux/limits.h: No such file or directory

在这里插入图片描述
解决方案:将#include <linux/limits.h>修改为#include <limits.h>
在这里插入图片描述

参考资料

Bilibili - Fuzz分享
D2T2 - trapfuzzer- Coverage-guided Binary Fuzzing with Breakpoints - Sili Luo.pdf
奇安信攻防社区 - trapfuzzer 源码分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/771184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金融中的数学:概率分布(下)

上篇博客介绍了离散型概率分布&#xff0c;本篇博客介绍连续型概率分布。 1.连续型概率分布 连续型均匀分布&#xff08;Continuous Uniform distribution&#xff09;是一种描述在特定区间内取值均匀分布的概率分布。在该分布中&#xff0c;随机变量在给定区间内的取值概率密…

【RISC-V】昉·星光 2单板计算机初始调试记录

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

数据结构单向循环链表,创建以及增删改查的实现

一、单向循环链表的描述 循环链表&#xff1a;是另一种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头节点&#xff0c;整个链表形成一个环。 单向循环链表的操作和单链表操作基本一致&#xff0c;差别在于&#xff1a;当链表遍历时&#xff0c;判别当前指针p是…

数据分析的iloc和loc功能

大家好&#xff0c;在处理大型数据集时&#xff0c;使用有效的数据操作和提取技术是必要的。Pandas数据分析库提供了强大的工具&#xff0c;用于处理结构化数据&#xff0c;包括使用iloc和loc函数访问和修改DataFrame元素的能力。在本文中&#xff0c;我们将探讨iloc和loc之间的…

硬件设计 之 M.2接口常用知识

M.2接口 也被称为NGFF&#xff08;Next Generation Form Factor&#xff09;&#xff0c;是一种用于固态硬盘&#xff08;SSD&#xff09;和无线网络适配器等设备的高速接口标准。它是一种小型、高密度、高速度的接口&#xff0c;可用于替代传统的SATA接口和PCI Express Mini卡…

.NET网络编程——TCP通信

一、网络编程的基本概念 : 1. 网络 就是将不同区域的电脑连接到一起&#xff0c;组成局域网、城域网或广域网。把分部在不同地理区域的计算机于专门的外部设备用通信线路 互联成一个规模大、功能强的网络系统&#xff0c;从而使众多的计算机可以方便地互相传递信息&#xff0c…

gd32f103vbt6 串口OTA升级5-combin部分

一. 简介 本文主要是bin文件的组成进行一些简单介绍&#xff0c;方便理解升级的过程。 二.硬件部分 2.1 rk3399cpugd32f103 2.2 连接方式&#xff1a;串口&#xff08;115200&#xff0c;8N1&#xff09;或者iic&#xff08;本文没有介绍iic&#xff09; 三、其他需要说明的软…

销售自动化如何提高团队生产力?从这5个方面发力

任何用于减少人工劳动和缩短销售流程相关任务时间的技术&#xff0c;都可定义为销售自动化。 对于忙碌的销售人员来说&#xff0c;流程自动化是真正的救星。它可以使他们的工作简化30%&#xff0c;让他们更专注于创收任务。这将显著提高团队的工作效率&#xff0c;并带来许多其…

第二十一章:CCNet:Criss-Cross Attention for Semantic Segmentation ——用于语义分割的交叉注意力

0.摘要 全图像依赖关系为视觉理解问题提供了有用的上下文信息。在这项工作中&#xff0c;我们提出了一种称为Criss-Cross Network&#xff08;CCNet&#xff09;的方法&#xff0c;以更有效和高效的方式获取这种上下文信息。具体而言&#xff0c;对于每个像素&#xff0c;CCNet…

JVM系列(8)——对象的内存布局

1、对象的创建过程 加载-验证-准备-解析-初始化-申请内存-成员变量赋初始值-加载构造方法。 前半段是JVM系列&#xff08;5&#xff09;——类加载过程&#xff0c;申请内存可参考&#xff1a;JVM系列&#xff08;3&#xff09;——内存分配与回收策略。 2、对象在内存中的存…

python使用Anconda安装Cartopy

安装 Cartopy的话官方推荐是使用conda安装&#xff0c;打开Anconda Prompt后&#xff0c;新建一个环境&#xff08;如果已有环境可跳过这步&#xff09;&#xff0c;然后激活环境&#xff1a; conda create -n newenv python3.9 conda activate newenv接着按照官网的推荐在Anc…

JavaScript——基础知识及使用

初识 JavaScript JavaScript (简称 JS) 是世界上最流行的编程语言之一.一个脚本语言, 通过解释器运行.主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行. JavaScript 的能做的事情: 网页开发(更复杂的特效和用户交互)网页游戏开发服务器开发(node.js)桌…

使用Jenkins自由风格的软件项目实现接口自动化测试持续集成

这里写目录标题 一、JOB项目配置1、添加描述2、限制项目的运行节点3、源码管理4、构建触发器5、构建步骤6、构建后操作 一、JOB项目配置 1、添加描述 可选选项可填可不填 2、限制项目的运行节点 节点中要有运行环境所需的配置 节点配置教程&#xff1a;https://blog.csdn…

详解c++---特殊类设计

目录标题 设计一个不能被拷贝的类设计一个只能从堆上创建对象的类设计一个只能在栈上创建对象的类设计一个无法被继承的类什么是单例模式饿汉模式饿汉模式的缺点懒汉模式懒汉模式的优点懒汉模式的缺点特殊的懒汉 设计一个不能被拷贝的类 拷贝只会放生在两个场景中&#xff1a;…

Apache Doris (三十一):Doris 数据导入(九)Spark Load 4- 导入Hive数据及注意事项

目录 1. Spark Load导入Hive非分区表数据 2. Spark Load 导入Hive分区表数据 3. 注意事项 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 宝子们订阅、点赞、收藏不迷路&#xff01;抓紧…

这8种算法

一个程序员一生中可能会邂逅各种各样的算法&#xff0c;但总有那么几种&#xff0c;是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓&#xff01;”算法吧~ 算法一&#xff1a;快速排序法 快速排序法是对冒泡排序的一种改进&#xff0c…

Spring Cloud Gateway - 新一代微服务API网关

Spring Cloud Gateway - 新一代微服务API网关 文章目录 Spring Cloud Gateway - 新一代微服务API网关1.网关介绍2.Spring Cloud Gateway介绍3.Spring Cloud Gateway的特性4.Spring Cloud Gateway的三大核心概念5.Gateway工作流程6.Gateway核心配置7.动态路由8.Predicate自定义P…

vue 集成tinymce2实现图片,视频以及文件的上传

vue 集成tinymce2实现图片&#xff0c;视频以及文件的上传 1. 安装插件 &#xff08;1&#xff09;安装tinymce npm install tinymce -S &#xff08;2&#xff09;安装tinymce-vue npm install tinymce/tinymce-vue3.0.1 -S 2. 复制静态文件到public目录 资源下载路径&…

day40-Mybatis(resultMap拓展)

0目录 Mybatis-resultMap拓展 1.2.3 1.数据库字段和javabean实体类属性不一致时 解决方案1&#xff1a;将sql语句中给予别名&#xff08;别名同javabean中实体类保持一致&#xff09; 解决方案2&#xff1a;使用resultMap 2.两表关联&#xff08;用户表和角色表关联查询&…

QGIS绘制一张地图——建立打印布局在地图中添加图例和比例尺后,将地图保存为图片(出图)

前言 本节所述内容,基于上节所绘制的北京市区地图为例,特此说明! 北京市区地图如图所示: 一、直接保存为图片 依次点击工程、导入/导出、导出地图为图片: 设置比例尺、像素等信息,点击保存: 保存出来的地图的显示区域是和QGIS中看到的地图区域一样的: 二、建立…