diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index f3c784b4f4..5ffc40d3bd 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -247,7 +247,7 @@ jobs: # Binary-only - ./fuzzers/binary_only/fuzzbench_fork_qemu - ./fuzzers/binary_only/frida_executable_libpng - - ./fuzzers/binary_only/frida_gdiplus + - ./fuzzers/binary_only/frida_windows_gdiplus - ./fuzzers/binary_only/frida_libpng - ./fuzzers/binary_only/fuzzbench_qemu - ./fuzzers/binary_only/tinyinst_simple @@ -432,8 +432,8 @@ jobs: steps: - uses: actions/checkout@v4 - uses: ./.github/workflows/windows-tester-prepare - - name: Build fuzzers/binary_only/frida_gdiplus - run: cd fuzzers/binary_only/frida_gdiplus/ && cargo make test && cargo make test_cmplog + - name: Build fuzzers/binary_only/frida_windows_gdiplus + run: cd fuzzers/binary_only/frida_windows_gdiplus/ && cargo make test && cargo make test_cmplog windows-tinyinst-simple: runs-on: windows-latest diff --git a/docs/src/advanced_features/frida.md b/docs/src/advanced_features/frida.md index ed8a85a5fe..13e51030cd 100644 --- a/docs/src/advanced_features/frida.md +++ b/docs/src/advanced_features/frida.md @@ -4,7 +4,7 @@ LibAFL supports different instrumentation engines for binary-only fuzzing. A potent cross-platform (Windows, MacOS, Android, Linux, iOS) option for binary-only fuzzing is Frida; the dynamic instrumentation tool. In this section, we will talk about the components in fuzzing with `libafl_frida`. -You can take a look at a working example in our [`fuzzers/binary_only/frida_libpng`](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/binary_only/frida_libpng) folder for Linux, and [`fuzzers/binary_only/frida_gdiplus`](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/binary_only/frida_gdiplus) for Windows. +You can take a look at a working example in our [`fuzzers/binary_only/frida_libpng`](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/binary_only/frida_libpng) folder for Linux, and [`fuzzers/binary_only/frida_windows_gdiplus`](https://github.com/AFLplusplus/LibAFL/tree/main/fuzzers/binary_only/frida_windows_gdiplus) for Windows. ## Dependencies diff --git a/fuzzers/binary_only/frida_gdiplus/README.md b/fuzzers/binary_only/frida_gdiplus/README.md deleted file mode 100644 index 7a0cdf6924..0000000000 --- a/fuzzers/binary_only/frida_gdiplus/README.md +++ /dev/null @@ -1,9 +0,0 @@ -## Build - -To build this example, run `cargo build --release` in this folder. - -Then compile the harness `cl.exe /LD harness.cc /link /dll gdiplus.lib ole32.lib` - -## Run - -To run the example `target\release\frida_gdiplus.exe -H harness.dll -i corpus -o output --libs-to-instrument gdi32.dll --libs-to-instrument gdi32full.dll --libs-to-instrument gdiplus.dll --libs-to-instrument WindowsCodecs.dll --disable-excludes` diff --git a/fuzzers/binary_only/frida_gdiplus/.gitignore b/fuzzers/binary_only/frida_windows_gdiplus/.gitignore similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/.gitignore rename to fuzzers/binary_only/frida_windows_gdiplus/.gitignore diff --git a/fuzzers/binary_only/frida_gdiplus/Cargo.toml b/fuzzers/binary_only/frida_windows_gdiplus/Cargo.toml similarity index 97% rename from fuzzers/binary_only/frida_gdiplus/Cargo.toml rename to fuzzers/binary_only/frida_windows_gdiplus/Cargo.toml index 139a49898b..cde9880a7b 100644 --- a/fuzzers/binary_only/frida_gdiplus/Cargo.toml +++ b/fuzzers/binary_only/frida_windows_gdiplus/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "frida_gdiplus" +name = "frida_windows_gdiplus" version = "0.13.2" authors = ["Richard Johnson "] edition = "2021" diff --git a/fuzzers/binary_only/frida_gdiplus/Makefile.toml b/fuzzers/binary_only/frida_windows_gdiplus/Makefile.toml similarity index 77% rename from fuzzers/binary_only/frida_gdiplus/Makefile.toml rename to fuzzers/binary_only/frida_windows_gdiplus/Makefile.toml index 6ec014adfe..86fe3de52c 100644 --- a/fuzzers/binary_only/frida_gdiplus/Makefile.toml +++ b/fuzzers/binary_only/frida_windows_gdiplus/Makefile.toml @@ -3,7 +3,7 @@ CARGO_TARGET_DIR = { value = "target", condition = { env_not_set = [ "CARGO_TARGET_DIR", ] } } -FUZZER_NAME = { source = "${CARGO_MAKE_RUST_TARGET_OS}", default_value = "frida_gdiplus", mapping = { "linux" = "frida_gdiplus", "macos" = "frida_gdiplus", "windows" = "frida_gdiplus.exe" } } +FUZZER_NAME = { source = "${CARGO_MAKE_RUST_TARGET_OS}", default_value = "frida_windows_gdiplus", mapping = { "linux" = "frida_windows_gdiplus", "macos" = "frida_windows_gdiplus", "windows" = "frida_windows_gdiplus.exe" } } PROFILE = { value = "release", condition = { env_not_set = ["PROFILE"] } } PROFILE_DIR = { value = "release", condition = { env_not_set = [ "PROFILE_DIR", @@ -79,8 +79,8 @@ script = ''' for %%i in (t1 t2 t3 t4 t5 t6 t7) do ( echo Testing %%i... rmdir /s /q output_%%i - start "" "frida_gdiplus.exe" -H cmplog.dll -i corpus -o output_%%i --libs-to-instrument cmplog.dll -F %%i -C - ping -n 3 127.0.0.1>NUL && taskkill /im frida_gdiplus.exe /F + start "" "frida_windows_gdiplus.exe" -H cmplog.dll -i corpus -o output_%%i --libs-to-instrument cmplog.dll -F %%i -C + ping -n 3 127.0.0.1>NUL && taskkill /im frida_windows_gdiplus.exe /F >nul 2>nul dir /a-d "output_%%i" && (echo Files exist) || (exit /b 1337) ) @@ -91,9 +91,9 @@ dependencies = ["fuzzer", "harness_windows_cmplog_test"] [tasks.test_windows] script_runner = "@shell" script = ''' -start "" "frida_gdiplus.exe" -H harness.dll -i corpus -o output --libs-to-instrument gdi32.dll --libs-to-instrument gdi32full.dll --libs-to-instrument gdiplus.dll --libs-to-instrument WindowsCodecs.dll --disable-excludes +start "" "frida_windows_gdiplus.exe" -H harness.dll -i corpus -o output --libs-to-instrument gdi32.dll --libs-to-instrument gdi32full.dll --libs-to-instrument gdiplus.dll --libs-to-instrument WindowsCodecs.dll --disable-excludes #ping is for timeout -ping -n 10 127.0.0.1>NUL && taskkill /im frida_gdiplus.exe /F +ping -n 10 127.0.0.1>NUL && taskkill /im frida_windows_gdiplus.exe /F >nul 2>nul dir /a-d "corpus_discovered\*" && (echo Files exist) || (exit /b 1337) ''' dependencies = ["fuzzer", "harness"] diff --git a/fuzzers/binary_only/frida_windows_gdiplus/README.md b/fuzzers/binary_only/frida_windows_gdiplus/README.md new file mode 100644 index 0000000000..e432d5ac43 --- /dev/null +++ b/fuzzers/binary_only/frida_windows_gdiplus/README.md @@ -0,0 +1,14 @@ +# LibAFL Frida_Windows_GdiPlus Example + +This is a an example how to fuzz binary-only dlls on Windows. +The example fuzzer will explore [gdiplus](https://learn.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-gdi-start) on Windows, using the [Frida](https://frida.re/) DBI. + +## Build + +To build this example, run `cargo build --release` in this folder. + +Then compile the harness `cl.exe /LD harness.cc /link /dll gdiplus.lib ole32.lib` + +## Run + +To run the example `target\release\frida_windows_gdiplus.exe -H harness.dll -i corpus -o output --libs-to-instrument gdi32.dll --libs-to-instrument gdi32full.dll --libs-to-instrument gdiplus.dll --libs-to-instrument WindowsCodecs.dll --disable-excludes` diff --git a/fuzzers/binary_only/frida_gdiplus/cargo/.config b/fuzzers/binary_only/frida_windows_gdiplus/cargo/.config similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/cargo/.config rename to fuzzers/binary_only/frida_windows_gdiplus/cargo/.config diff --git a/fuzzers/binary_only/frida_gdiplus/cmplog_test.asm b/fuzzers/binary_only/frida_windows_gdiplus/cmplog_test.asm similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/cmplog_test.asm rename to fuzzers/binary_only/frida_windows_gdiplus/cmplog_test.asm diff --git a/fuzzers/binary_only/frida_gdiplus/cmplog_test.def b/fuzzers/binary_only/frida_windows_gdiplus/cmplog_test.def similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/cmplog_test.def rename to fuzzers/binary_only/frida_windows_gdiplus/cmplog_test.def diff --git a/fuzzers/binary_only/frida_gdiplus/corpus/not_kitty.png b/fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty.png similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/corpus/not_kitty.png rename to fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty.png diff --git a/fuzzers/binary_only/frida_gdiplus/corpus/not_kitty_alpha.png b/fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty_alpha.png similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/corpus/not_kitty_alpha.png rename to fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty_alpha.png diff --git a/fuzzers/binary_only/frida_gdiplus/corpus/not_kitty_gamma.png b/fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty_gamma.png similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/corpus/not_kitty_gamma.png rename to fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty_gamma.png diff --git a/fuzzers/binary_only/frida_gdiplus/corpus/not_kitty_icc.png b/fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty_icc.png similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/corpus/not_kitty_icc.png rename to fuzzers/binary_only/frida_windows_gdiplus/corpus/not_kitty_icc.png diff --git a/fuzzers/binary_only/frida_gdiplus/harness.cc b/fuzzers/binary_only/frida_windows_gdiplus/harness.cc similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/harness.cc rename to fuzzers/binary_only/frida_windows_gdiplus/harness.cc diff --git a/fuzzers/binary_only/frida_gdiplus/src/fuzzer.rs b/fuzzers/binary_only/frida_windows_gdiplus/src/fuzzer.rs similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/src/fuzzer.rs rename to fuzzers/binary_only/frida_windows_gdiplus/src/fuzzer.rs diff --git a/fuzzers/binary_only/frida_gdiplus/src/main.rs b/fuzzers/binary_only/frida_windows_gdiplus/src/main.rs similarity index 100% rename from fuzzers/binary_only/frida_gdiplus/src/main.rs rename to fuzzers/binary_only/frida_windows_gdiplus/src/main.rs diff --git a/libafl_targets/src/coverage.rs b/libafl_targets/src/coverage.rs index 3732e5b4b1..7487656073 100644 --- a/libafl_targets/src/coverage.rs +++ b/libafl_targets/src/coverage.rs @@ -286,7 +286,9 @@ mod swap { impl Observer for DifferentialAFLMapSwapObserver<'_, '_> {} - impl DifferentialObserver for DifferentialAFLMapSwapObserver<'_, '_> { + impl DifferentialObserver + for DifferentialAFLMapSwapObserver<'_, '_> + { fn pre_observe_first(&mut self, _: &mut OTA) -> Result<(), Error> { let slice = self.first_map.as_slice_mut(); unsafe {