项目简介
本项目是AFL的分支WinAFL。因原始AFL受nix设计限制无法在Windows运行,WinAFL采用不同插桩方法,借助DynamoRIO动态工具测量和提取目标覆盖率,实现了在Windows上对二进制程序进行模糊化测试,且已成功用于识别Windows软件中的错误。
项目的主要特性和功能
- Windows平台适配:突破原始AFL局限,可在Windows环境开展二进制程序模糊测试。
- 动态覆盖率测量:利用DynamoRIO动态工具测量提取目标覆盖率,引入开销与原始AFL二进制插桩模式相当。
- 持久性模糊模式:提升进程启动时间,通过选择目标函数并循环运行,执行多输入采样无需重启目标进程。
- 多选项支持:支持多种afl - fuzz和插桩选项,可灵活配置模糊测试,如指定输入输出目录、超时时间、覆盖类型等。
- 语料库最小化:包含winafl - cmin.py工具,可对语料库进行最小化处理。
- 静态插桩:通过syzygy框架,能对含完整PDB符号的PE 32位二进制文件进行静态插桩。
安装使用步骤
构建WinAFL
- 打开Visual Studio命令提示符(若要64位版本,使用Visual Studio x64 Win64命令提示符)。
- 转到包含源的目录。
- 根据需要构建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
- 32位版本:
使用WinAFL
- 确保目标无插桩时能正确运行。
- 在WinDbg中打开目标二进制文件,找到要模糊的函数,记录其从模块开始的偏移量。
- 确保目标在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
- 准备模糊目标,确保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】