littlebot
Published on 2025-04-11 / 0 Visits
0

【源码】基于Windows和DynamoRIO的二进制模糊测试工具

项目简介

本项目是AFL的分支WinAFL。因原始AFL受nix设计限制无法在Windows运行,WinAFL采用不同插桩方法,借助DynamoRIO动态工具测量和提取目标覆盖率,实现了在Windows上对二进制程序进行模糊化测试,且已成功用于识别Windows软件中的错误。

项目的主要特性和功能

  1. Windows平台适配:突破原始AFL局限,可在Windows环境开展二进制程序模糊测试。
  2. 动态覆盖率测量:利用DynamoRIO动态工具测量提取目标覆盖率,引入开销与原始AFL二进制插桩模式相当。
  3. 持久性模糊模式:提升进程启动时间,通过选择目标函数并循环运行,执行多输入采样无需重启目标进程。
  4. 多选项支持:支持多种afl - fuzz和插桩选项,可灵活配置模糊测试,如指定输入输出目录、超时时间、覆盖类型等。
  5. 语料库最小化:包含winafl - cmin.py工具,可对语料库进行最小化处理。
  6. 静态插桩:通过syzygy框架,能对含完整PDB符号的PE 32位二进制文件进行静态插桩。

安装使用步骤

构建WinAFL

  1. 打开Visual Studio命令提示符(若要64位版本,使用Visual Studio x64 Win64命令提示符)。
  2. 转到包含源的目录。
  3. 根据需要构建32位或64位版本:
    • 32位版本bash mkdir build32 cd build32 cmake.. -DDynamoRIO_DIR=..\path\to\DynamoRIO\cmake cmake --build. --config Release
    • 64位版本bash mkdir build64 cd build64 cmake -G"Visual Studio 10 Win64".. -DDynamoRIO_DIR=..\path\to\DynamoRIO\cmake cmake --build. --config Release

使用WinAFL

  1. 确保目标无插桩时能正确运行。
  2. 在WinDbg中打开目标二进制文件,找到要模糊的函数,记录其从模块开始的偏移量。
  3. 确保目标在DynamoRIO下正确运行,可使用独立调试模式,示例命令行如下: bash path\to\DynamoRIO\bin64\drrun.exe -c winafl.dll -debug -target_module test_gdiplus.exe -target_offset 0x1270 -fuzz_iterations 10 -nargs 2 -- test_gdiplus.exe input.bmp
  4. 准备模糊目标,确保afl - fuzz.exe和winafl.dll在当前目录。Windows上afl - fuzz的命令行格式为: bash afl-fuzz [afl options] -- [instrumentation options] -- target_cmd_line 示例命令行: bash afl-fuzz.exe -i in -o out -D C:\work\winafl\DynamoRIO\bin64 -t 20000 -- -coverage_module gdiplus.dll -coverage_module WindowsCodecs.dll -fuzz_iterations 5000 -target_module test_gdiplus.exe -target_offset 0x1270 -nargs 2 -- test_gdiplus.exe @@

语料库最小化

运行以下命令查看winafl - cmin.py的选项和用法示例: bash python winafl-cmin.py -h 示例使用命令: bash winafl-cmin.py -D D:\DRIO\bin32 -t 100000 -i in -o minset -covtype edge -coverage_module m.dll -target_module test.exe -target_method fuzz -nargs 2 -- test.exe @@

静态插桩相关

构建instrument.exe

若要自己构建instrument.exe,可按SyzygyDevelopmentGuide复制syzygy的仓库,然后编译: bash C:\syzygy\src>ninja -C out\Release instrument 目前推荐的修订版本是190dbfe(v0.8.32.0)。

注册msdia140

确保在系统上注册msdia140.dll: bash regsvr32 /s msdia140.dll

测试目标

目标二进制文件需使用/ PROFILE连接器标志进行编译以生成完整的PDB,示例命令: bash C:\>instrument.exe --mode=afl --input-image=test_static.exe --output-image=test_static.instr.exe --force-decompose --multithread --cookie-check-hook

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】