尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

RetroWrite与AFL++集成:如何通过二进制重写实现高效的模糊测试覆盖率收集

RetroWrite与AFL++集成:如何通过二进制重写实现高效的模糊测试覆盖率收集
📅 发布时间:2026/7/15 7:59:19

RetroWrite与AFL++集成:如何通过二进制重写实现高效的模糊测试覆盖率收集

【免费下载链接】retrowriteRetroWrite -- Retrofitting compiler passes through binary rewriting项目地址: https://gitcode.com/gh_mirrors/re/retrowrite

RetroWrite是一款革命性的二进制重写工具,它能够在无需源代码的情况下,为现有的二进制程序添加模糊测试覆盖率收集功能。通过与业界领先的模糊测试工具**AFL++**集成,RetroWrite为安全研究人员和开发者提供了一个强大的二进制模糊测试解决方案。本文将详细介绍如何利用RetroWrite与AFL++的集成,实现高效的模糊测试覆盖率收集。

什么是RetroWrite?为什么需要二进制重写?

RetroWrite是一个静态二进制重写工具,支持x64和aarch64架构。它采用符号化技术(也称为可重新组装的汇编),能够在没有源代码的情况下向二进制文件插入检测代码。这对于那些只有二进制文件、没有源代码的软件进行安全分析至关重要。

传统的模糊测试工具通常需要源代码来插入覆盖率收集代码,但现实中很多软件只有二进制版本。RetroWrite解决了这一痛点,使得即使没有源代码,也能进行高质量的模糊测试。

RetroWrite与AFL++集成的工作原理

核心技术:符号化汇编

RetroWrite的核心创新在于将二进制文件转换为符号化汇编文件。这个过程包括:

  1. 二进制加载与分析:使用librw_x64或librw_arm64库加载和解析ELF二进制文件
  2. 指令反汇编:将机器码转换为可读的汇编指令
  3. 符号化处理:为每个指令和数据结构添加符号信息
  4. 检测代码插入:在适当位置插入AFL++覆盖率收集代码

AFL++覆盖率收集机制

当RetroWrite与AFL++集成时,它会:

  1. 插入覆盖率跟踪代码:在每个基本块入口处插入代码,记录执行路径
  2. 实现forkserver:优化模糊测试的进程创建效率
  3. 维护共享内存映射:存储覆盖率信息供AFL++分析

实战指南:使用RetroWrite为二进制添加AFL++覆盖率收集

环境准备与安装

首先,克隆RetroWrite仓库并安装依赖:

git clone https://gitcode.com/gh_mirrors/re/retrowrite cd retrowrite pip install -r requirements.txt

为x64二进制添加覆盖率收集

对于x64架构的二进制文件,操作步骤如下:

# 1. 生成符号化汇编文件 retrowrite /path/to/binary binary.symbolized.s # 2. 使用afl-gcc重新编译 AFL_AS_FORCE_INSTRUMENT=1 afl-gcc binary.symbolized.s -o binary_instrumented

为aarch64二进制添加覆盖率收集

对于ARM64架构,过程略有不同:

# 1. 使用覆盖率检测通道生成汇编文件 retrowrite -m coverage /path/to/binary binary.coverage.s # 2. 重新组装为二进制文件 retrowrite -a binary.coverage.s binary_instrumented

开始模糊测试

准备好检测后的二进制文件后,即可开始模糊测试:

# 创建测试种子目录 mkdir -p seeds/ echo "test input" > seeds/seed1 # 运行AFL++模糊测试 afl-fuzz -i seeds/ -o findings/ ./binary_instrumented

高级功能与配置选项

内核模块模糊测试支持

RetroWrite还支持内核模块的模糊测试,通过KRetrowrite组件实现:

# 为内核模块添加AFL++检测 retrowrite --kernel --kcov /path/to/module.ko module_instrumented.ko

持久模式优化

对于需要长时间运行的模糊测试,可以启用持久模式:

# 设置持久模式环境变量 export AFL_PERSISTENT_ADDR=0x12345678 export AFL_PERSISTENT_CYCLES=1000 # 运行模糊测试 afl-fuzz -i seeds/ -o findings/ ./binary_instrumented

自定义检测通道

RetroWrite支持自定义检测通道,位于rwtools_x64/和rwtools_arm64/目录中:

  • rwtools_x64/asan/:地址消毒器检测
  • rwtools_x64/jumparound/:指令随机化混淆
  • rwtools_arm64/coverage/:AFL++覆盖率收集
  • rwtools_arm64/android_coverage/:Android平台覆盖率收集

实际应用案例

案例1:测试系统工具

假设我们要测试/bin/ls命令:

# 为ls命令添加覆盖率检测 retrowrite --asan /bin/ls ls_instrumented.s gcc ls_instrumented.s -lasan -o ls_instrumented # 使用AFL++测试 afl-fuzz -i test_cases/ -o ls_findings/ ./ls_instrumented @@

案例2:内核驱动测试

测试Linux内核的ext4文件系统模块:

# 进入内核演示目录 cd demos/kernel_demo/ # 运行模糊测试脚本 ./fuzz-module.sh ext4

性能优化与最佳实践

1. 选择合适的MAP_SIZE

AFL++使用共享内存来存储覆盖率信息。RetroWrite会根据二进制大小自动调整MAP_SIZE,但也可以手动优化:

# 查看默认MAP_SIZE echo $((1 << 16)) # 输出:65536 # 对于大型二进制,可能需要更大的MAP_SIZE export AFL_MAP_SIZE=131072

2. 利用forkserver优化

RetroWrite会自动为AFL++添加forkserver支持,显著提高模糊测试效率。如果遇到兼容性问题,可以禁用:

export AFL_NO_FORKSERVER=1

3. 并行模糊测试

充分利用多核CPU进行并行测试:

# 主fuzzer afl-fuzz -i seeds/ -o sync_dir/ -M fuzzer01 ./binary_instrumented # 从fuzzer(在其他终端运行) afl-fuzz -i seeds/ -o sync_dir/ -S fuzzer02 ./binary_instrumented

故障排除与常见问题

问题1:汇编文件编译错误

症状:undefined reference to '__asan_init_v4'解决方案:

sed -i 's/asan_init_v4/asan_init/g' binary_instrumented.s

问题2:位置无关代码要求

症状:RetroWrite requires a position-independent executable解决方案:确保二进制是位置无关的PIE文件,或使用--ignore-no-pie参数(谨慎使用)

问题3:剥离二进制处理

症状:It looks like binary is stripped解决方案:使用--ignore-stripped参数,但注意这可能会影响重写质量

集成到CI/CD流水线

将RetroWrite与AFL++集成到持续集成流程中:

# GitHub Actions示例 name: Fuzzing with RetroWrite on: [push, pull_request] jobs: fuzz: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup RetroWrite run: | pip install -r requirements.txt git clone https://github.com/AFLplusplus/AFLplusplus cd AFLplusplus && make - name: Instrument binary run: | retrowrite -m coverage ./target_binary binary_coverage.s retrowrite -a binary_coverage.s binary_instrumented - name: Run AFL++ fuzzing run: | mkdir -p seeds/ echo "initial seed" > seeds/seed1 timeout 3600 afl-fuzz -i seeds/ -o findings/ ./binary_instrumented || true

总结与展望

RetroWrite与AFL++的集成为二进制模糊测试带来了革命性的改进。通过无需源代码的二进制重写技术,安全研究人员能够:

  1. 扩大测试范围:测试闭源软件和第三方库
  2. 提高测试效率:利用AFL++的先进模糊测试算法
  3. 降低门槛:无需源代码即可进行深度安全测试

随着RetroWrite项目的持续发展,我们期待看到更多创新功能,如对更多架构的支持、更智能的检测策略,以及与更多模糊测试工具的集成。

无论是安全研究人员、质量保证工程师还是开源项目维护者,RetroWrite与AFL++的集成都是一个值得掌握的重要工具。它不仅能帮助发现潜在的安全漏洞,还能提高软件的整体质量。

开始你的二进制模糊测试之旅吧!🚀

【免费下载链接】retrowriteRetroWrite -- Retrofitting compiler passes through binary rewriting项目地址: https://gitcode.com/gh_mirrors/re/retrowrite

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

  • 深入解析TI C6748 DSP的JTAG调试与CPU架构实战指南
  • 找口感清甜的优质大米品牌采购 - 中媒介
  • TradingView Webhooks Bot性能优化技巧:提升交易响应速度的7个方法

最新新闻

  • 3个核心技巧:用cg-use-everywhere彻底改变你的ComfyUI工作流
  • RF430CL331H NFC标签芯片非阻塞写入与中断处理机制详解
  • 基于多维核密度估计的源荷(光伏、负荷)场景生成方法(Matlab代码实现)
  • DN-Splatter与SpectacularAI集成:移动设备实时3D重建的终极解决方案
  • LabVIEW簇与数组的交互:从捆绑分解到数据重构
  • GESP C++一级真题解析:从运算符优先级到数组遍历的实战避坑指南

日新闻

  • 告别启动盘残留:用Diskpart彻底清除U盘EFI分区与恢复完整空间
  • 2026 年宜春诚信的塑料缠绕膜厂家哪个好,缠绕膜背后的秘密:你不知道的成本陷阱 - 领域鉴赏官
  • Arch ECS 入门指南:10分钟掌握C#高性能数据驱动架构

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号