From ff1f6af7e900ab4d76c91b9f2f4a60da259cd91d Mon Sep 17 00:00:00 2001 From: Andrea Fioraldi Date: Sun, 22 Sep 2019 20:01:44 +0200 Subject: [PATCH] wine mode && fix llvm makefile --- Makefile | 3 ++- afl-wine-trace | 12 +++++++--- llvm_mode/Makefile | 2 +- qemu_mode/build_qemu_support.sh | 2 ++ qemu_mode/libcompcov/compcovtest | Bin 8624 -> 0 bytes qemu_mode/unsigaction/Makefile | 34 ++++++++++++++++++++++++++++ qemu_mode/unsigaction/README.md | 7 ++++++ qemu_mode/unsigaction/unsigaction.c | 3 +++ 8 files changed, 58 insertions(+), 5 deletions(-) delete mode 100755 qemu_mode/libcompcov/compcovtest create mode 100644 qemu_mode/unsigaction/Makefile create mode 100644 qemu_mode/unsigaction/README.md create mode 100644 qemu_mode/unsigaction/unsigaction.c diff --git a/Makefile b/Makefile index a6154561..42c6d737 100644 --- a/Makefile +++ b/Makefile @@ -228,11 +228,12 @@ all_done: test_build .NOTPARALLEL: clean clean: - rm -f $(PROGS) afl-as as afl-g++ afl-clang afl-clang++ *.o src/*.o *~ a.out core core.[1-9][0-9]* *.stackdump test .test .test1 .test2 test-instr .test-instr0 .test-instr1 qemu_mode/qemu-3.1.1.tar.xz afl-qemu-trace afl-gcc-fast afl-gcc-pass.so afl-gcc-rt.o afl-g++-fast *.so unicorn_mode/24f55a7973278f20f0de21b904851d99d4716263.tar.gz *.8 + rm -f $(PROGS) afl-as as afl-g++ afl-clang afl-clang++ *.o src/*.o *~ a.out core core.[1-9][0-9]* *.stackdump .test .test1 .test2 test-instr .test-instr0 .test-instr1 qemu_mode/qemu-3.1.1.tar.xz afl-qemu-trace afl-gcc-fast afl-gcc-pass.so afl-gcc-rt.o afl-g++-fast *.so unicorn_mode/24f55a7973278f20f0de21b904851d99d4716263.tar.gz *.8 rm -rf out_dir qemu_mode/qemu-3.1.1 unicorn_mode/unicorn $(MAKE) -C llvm_mode clean $(MAKE) -C libdislocator clean $(MAKE) -C libtokencap clean + $(MAKE) -C qemu_mode/unsigaction clean $(MAKE) -C qemu_mode/libcompcov clean distrib: all diff --git a/afl-wine-trace b/afl-wine-trace index fa552051..f8284d7e 100755 --- a/afl-wine-trace +++ b/afl-wine-trace @@ -18,13 +18,19 @@ os.environ["WINELOADERNOEXEC"] = "1" pe = pefile.PE(sys.argv[1]) -os.environ["AFL_ENTRYPOINT"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.AddressOfEntryPoint) +if "AFL_ENTRYPOINT" not in os.environ: + os.environ["AFL_ENTRYPOINT"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.AddressOfEntryPoint) if not os.getenv("AFL_INST_LIBS"): if "AFL_CODE_START" not in os.environ: os.environ["AFL_CODE_START"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.BaseOfCode) if "AFL_CODE_END" not in os.environ: os.environ["AFL_CODE_END"] = "0x%x" % (pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.BaseOfCode + pe.OPTIONAL_HEADER.SizeOfCode) +if pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_AMD64"] or pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_IA64"]: + os.environ["LD_PRELOAD"] = os.path.join(my_dir, "qemu_mode/unsigaction/unsigaction64.so") +else: + os.environ["LD_PRELOAD"] = os.path.join(my_dir, "qemu_mode/unsigaction/unsigaction32.so") + if os.getenv("WINECOV_QEMU_PATH"): qemu_path = os.getenv("WINECOV_QEMU_PATH") elif os.path.exists(os.path.join(my_dir, "afl-qemu-trace")): @@ -36,7 +42,7 @@ else: elif pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_I386"]: qemu_path += "i386" else: - print ("[afl-wine-trace] unsupported architecture\n") + print ("[wine-cov] unsuppoted architecture\n") exit(1) qemu_path = shutil.which(qemu_path) @@ -49,7 +55,7 @@ else: elif pe.FILE_HEADER.Machine == pefile.MACHINE_TYPE["IMAGE_FILE_MACHINE_I386"]: pass else: - print ("[wine-cov] unsuppoted architecture\n") + print ("[afl-wine-trace] unsopported architecture\n") exit(1) os.execve(qemu_path, [qemu_path, wine_path] + sys.argv[1:], os.environ) diff --git a/llvm_mode/Makefile b/llvm_mode/Makefile index 2d35505e..96aba898 100644 --- a/llvm_mode/Makefile +++ b/llvm_mode/Makefile @@ -83,7 +83,7 @@ CXX = $(LLVM_BINDIR)/clang++ ifeq "$(shell test -e $(CC) || echo 1 )" "1" # llvm-config --bindir is not providing a valid path, so ... - ifeq "$(shell test -e "$(BIN_DIR)/clang" && echo 1)" "1" + ifeq "$(shell test -e '$(BIN_DIR)/clang' && echo 1)" "1" # we found one in the local install directory, lets use these CC = $(BIN_DIR)/clang CXX = $(BIN_DIR)/clang++ diff --git a/qemu_mode/build_qemu_support.sh b/qemu_mode/build_qemu_support.sh index 0ca3f494..02379eb2 100755 --- a/qemu_mode/build_qemu_support.sh +++ b/qemu_mode/build_qemu_support.sh @@ -212,6 +212,8 @@ fi echo "[+] Building libcompcov ..." make -C libcompcov +echo "[+] Building unsigaction ..." +make -C unsigaction echo "[+] libcompcov ready" echo "[+] All done for qemu_mode, enjoy!" diff --git a/qemu_mode/libcompcov/compcovtest b/qemu_mode/libcompcov/compcovtest deleted file mode 100755 index 0bb68d60c4d5686982a7c5b73dfafe7c06a6db76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8624 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 +# +# Copyright 2019 Andrea Fioraldi. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# + +ifndef AFL_NO_X86 + +all: lib_i386 lib_amd64 + +lib_i386: + $(CC) -m32 -fPIC -shared unsigaction.c -o unsigaction32.so + +lib_amd64: + $(CC) -fPIC -shared unsigaction.c -o unsigaction64.so + +clean: + rm -f unsigaction32.so unsigaction64.so + +else + +all: + @echo "[!] Note: skipping compilation of unsigaction (AFL_NO_X86 set)." + +endif diff --git a/qemu_mode/unsigaction/README.md b/qemu_mode/unsigaction/README.md new file mode 100644 index 00000000..0f3707fd --- /dev/null +++ b/qemu_mode/unsigaction/README.md @@ -0,0 +1,7 @@ +# unsigation + +This library disable sigaction when preloaded. + +Mainly needed by Wine mode but can be used as a separate tool. + +A similar solution can be found in is [preeny](https://github.com/zardus/preeny). diff --git a/qemu_mode/unsigaction/unsigaction.c b/qemu_mode/unsigaction/unsigaction.c new file mode 100644 index 00000000..004084f9 --- /dev/null +++ b/qemu_mode/unsigaction/unsigaction.c @@ -0,0 +1,3 @@ +int sigaction(int signum, void *act, void *oldact) { + return 0; +}