Skip to content

Commit

Permalink
wine mode && fix llvm makefile
Browse files Browse the repository at this point in the history
  • Loading branch information
andreafioraldi committed Sep 22, 2019
1 parent 9aefe7a commit ff1f6af
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 5 deletions.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 9 additions & 3 deletions afl-wine-trace
Original file line number Diff line number Diff line change
Expand Up @@ -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")):
Expand All @@ -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)

Expand All @@ -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)
2 changes: 1 addition & 1 deletion llvm_mode/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions qemu_mode/build_qemu_support.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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!"

Expand Down
Binary file removed qemu_mode/libcompcov/compcovtest
Binary file not shown.
34 changes: 34 additions & 0 deletions qemu_mode/unsigaction/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 1,34 @@
#
# american fuzzy lop - unsigaction
# --------------------------------
#
# Written by Andrea Fioraldi <[email protected]>
#
# 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
7 changes: 7 additions & 0 deletions qemu_mode/unsigaction/README.md
Original file line number Diff line number Diff line change
@@ -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).
3 changes: 3 additions & 0 deletions qemu_mode/unsigaction/unsigaction.c
Original file line number Diff line number Diff line change
@@ -0,0 1,3 @@
int sigaction(int signum, void *act, void *oldact) {
return 0;
}

0 comments on commit ff1f6af

Please sign in to comment.