WinAFL--从入门到入门

Windows 10 (Windows11会出现部分error)
Visual Studio 2019.v16 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
CMake Latest Release https://cmake.org/download/
perl Strawberry Perl https://strawberryperl.com/
WinAFL Source Code https://github.com/googleprojectzero/winafl
DynamoRIO Source Code https://github.com/DynamoRIO/dynamorio

安装工具及环境

将cmake添加进path

VS2019中勾选

 

 

 

Dynamo RIO编译

在dynamorio中创建build32 build64两个文件 分别对应32位 64位

build32中

1
2
..\dynamorio\build32> cmake -G"Visual Studio 16 2019" -A Win32 ..
..\dynamorio\build32> cmake --build . --config RelWithDebInfo

build64中

1
2
..\dynamorio\build64> cmake -G"Visual Studio 16 2019" -A x64 ..
..\dynamorio\build64> cmake --build . --config RelWithDebInfo

WinAFL编译

在winafl中创建build32 build64两个文件

build32中

1
2
..\winafl\build32> cmake -G"Visual Studio 16 2019" -A Win32 .. -DDynamoRIO_DIR=your_dir\dynamorio\build32\cmake
..\winafl\build32> cmake --build . --config Release

build64中

1
2
..\winafl\build64> cmake -G"Visual Studio 16 2019" -A x64 .. -DDynamoRIO_DIR=your_dir\dynamorio\build64\cmake
..\winafl\build64> cmake --build . --config Release

测试

测试文件 test_gdiplus.exe

目录 ..\winafl\build64\bin\Release

准备一张图片 放在↑目录中 改为test.bmp

ida查看此文件的main函数偏移地址为0x10e0

 

在目录中生成log文件

1
..\winafl\build64\bin\Release> your_dir\dynamorio\build64\bin64\drrun.exe -c winafl.dll -debug -target_module test_gdiplus.exe -target_offset 0x10e0 -fuzz_iterations 5 -nargs 2 -- test_gdiplus.exe test.bmp

 

在此目录中创建in文件夹 将test.bmp拖至in中进行afl-fuzz测试

1
..\winafl\build64\bin\Release> .\afl-fuzz.exe -i in -o out -D your_dir\dynamorio\build64\bin64 -t 20000 -- -coverage_module gdiplus.dll -target_module test_gdiplus.exe -target_offset 0x10e0 -fuzz_iterations 20 -nargs 2 -- test_gdiplus.exe "@@"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-debug                  //debug模式 会生成log文件
-i //输入的测试文件用例
-o //输出结果的目录
-D //插桩工具Dynamorio命令文件夹
-t //每一次样本执行的超时时间
-- //分隔符 此处是插桩参数
-coverage_module //需要覆盖的模块(可有多个)
-tarage_module //被测模块
-target_offset //相对于target_module的偏移量 在target_method无法导出时使用
-target_method //被测模块函数地址
-fuzz_iterations //迭代次数
-nargs //函数所需要参数个数
-- //分隔符 此处是被测程序参数
@@ //引用-i中测试用例

 

各模块详情:AFL/status_screen.txt at master · google/AFL · GitHub

参考

(26条消息) Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用_lzyddf的博客-CSDN博客

模糊测试工具WinAFL使用指南 - FreeBuf网络安全行业门户

winafl编译与测试 | giantbranch’s blog

2021-02-24-模糊测试(WinAFL) - 简书 (jianshu.com)