# Used by 'install' target. Change this to wherever your framework checkout is. # Doesn't have to be development. Should point to the base directory where # msfconsole lives. framework_dir = ../../../metasploit-framework/ # Change me if you want to build openssl and libpcap somewhere else build_tmp = posix-meterp-build-tmp cwd=$(shell pwd) ROOT=$(basename $(CURDIR:%/=%)) BIONIC=$(ROOT)/source/bionic LIBC=$(BIONIC)/libc LIBM=$(BIONIC)/libm COMPILED=$(BIONIC)/compiled objects = $(COMPILED)/libc.so objects += $(COMPILED)/libm.so objects += $(COMPILED)/libdl.so objects += $(COMPILED)/libcrypto.so objects += $(COMPILED)/libssl.so objects += $(COMPILED)/libsupport.so objects += $(COMPILED)/libmetsrv_main.so objects += $(COMPILED)/libpcap.so outputs = data/meterpreter/msflinker_linux_x86.bin outputs += data/meterpreter/ext_server_stdapi.lso outputs += data/meterpreter/ext_server_sniffer.lso outputs += data/meterpreter/ext_server_networkpug.lso STD_CFLAGS = -Os -m32 -march=i386 -fno-stack-protector STD_CFLAGS += -Wl,--hash-style=sysv STD_CFLAGS += -lc -lm -nostdinc -nostdlib -fno-builtin -fPIC -DPIC STD_CFLAGS += -Dwchar_t='char' -D_SIZE_T_DECLARED -DElf_Size='u_int32_t' STD_CFLAGS += -D_BYTE_ORDER=_LITTLE_ENDIAN -D_UNIX -D__linux__ -lgcc STD_CFLAGS += -I$(LIBC)/include STD_CFLAGS += -I$(LIBC)/kernel/common/linux/ STD_CFLAGS += -I$(LIBC)/kernel/common/ STD_CFLAGS += -I$(LIBC)/arch-x86/include/ STD_CFLAGS += -I$(LIBC)/kernel/arch-x86/ STD_CFLAGS += -L$(COMPILED) GCCGOLD = $(shell (echo "int main(){}" | gcc -fuse-ld=gold -o/dev/null -xc -); echo $$?) ifeq "$(GCCGOLD)" "0" STD_CFLAGS += -fuse-ld=gold endif PCAP_CFLAGS = $(STD_CFLAGS) OSSL_CFLAGS = $(STD_CFLAGS) -I$(LIBC)/private -I$(LIBM)/include workspace = workspace all: $(objects) $(outputs) include deps/libressl/Makefile include deps/libpcap/Makefile debug: DEBUG=true # I'm 99% sure this is the wrong way to do this debug: MAKE += debug debug: all $(COMPILED): mkdir $(COMPILED)/ $(COMPILED)/libc.so: $(COMPILED) @echo Building libc @(cd source/bionic/libc && ARCH=x86 TOP=${ROOT} jam > build.log 2>&1 ) @(cd source/bionic/libc/out/x86/ && $(MAKE) -f Makefile.msf >> build.log 2>&1 && [ -f libbionic.so ]) @cp source/bionic/libc/out/x86/libbionic.so $(COMPILED)/libc.so $(COMPILED)/libm.so: @echo Building libm @$(MAKE) -C $(LIBM) -f Makefile.msf > build.log 2>&1 && [ -f $(LIBM)/libm.so ] @cp $(LIBM)/libm.so $(COMPILED)/libm.so $(COMPILED)/libdl.so: @echo Building libdl @$(MAKE) -C $(BIONIC)/libdl > build.log && [ -f $(BIONIC)/libdl/libdl.so ] @cp $(BIONIC)/libdl/libdl.so $(COMPILED)/libdl.so data/meterpreter/msflinker_linux_x86.bin: source/server/rtld/msflinker.bin cp source/server/rtld/msflinker.bin data/meterpreter/msflinker_linux_x86.bin source/server/rtld/msflinker.bin: $(COMPILED)/libc.so \ $(wildcard source/server/*.h) \ $(wildcard source/server/*.c) $(MAKE) -C source/server/rtld $(workspace)/metsrv/libmetsrv_main.so: $(COMPILED)/libsupport.so \ $(wildcard source/server/*.h) \ $(wildcard source/server/*.c) $(MAKE) -C $(workspace)/metsrv $(COMPILED)/libmetsrv_main.so: $(workspace)/metsrv/libmetsrv_main.so cp $(workspace)/metsrv/libmetsrv_main.so $(COMPILED)/libmetsrv_main.so $(workspace)/common/libsupport.so: \ $(wildcard source/common/*.h) \ $(wildcard source/common/*.c) $(MAKE) -C $(workspace)/common $(COMPILED)/libsupport.so: $(workspace)/common/libsupport.so cp $(workspace)/common/libsupport.so $(COMPILED)/libsupport.so $(workspace)/ext_server_sniffer/ext_server_sniffer.so: \ $(wildcard source/extensions/sniffer/*.h) \ $(wildcard source/extensions/sniffer/*.c) \ $(COMPILED)/libpcap.so $(MAKE) -C $(workspace)/ext_server_sniffer data/meterpreter/ext_server_sniffer.lso: \ $(workspace)/ext_server_sniffer/ext_server_sniffer.so cp $(workspace)/ext_server_sniffer/ext_server_sniffer.so \ data/meterpreter/ext_server_sniffer.lso $(workspace)/ext_server_stdapi/ext_server_stdapi.so: \ $(wildcard source/extensions/stdapi/*.h) \ $(wildcard source/extensions/stdapi/*.c) $(MAKE) -C $(workspace)/ext_server_stdapi data/meterpreter/ext_server_stdapi.lso: \ $(workspace)/ext_server_stdapi/ext_server_stdapi.so cp $(workspace)/ext_server_stdapi/ext_server_stdapi.so \ data/meterpreter/ext_server_stdapi.lso $(workspace)/ext_server_networkpug/ext_server_networkpug.so: \ $(wildcard source/extensions/networkpug/*.h) \ $(wildcard source/extensions/networkpug/*.c) $(MAKE) -C $(workspace)/ext_server_networkpug data/meterpreter/ext_server_networkpug.lso: \ $(workspace)/ext_server_networkpug/ext_server_networkpug.so cp $(workspace)/ext_server_networkpug/ext_server_networkpug.so \ data/meterpreter/ext_server_networkpug.lso install: $(outputs) cp $(outputs) $(framework_dir)/data/meterpreter/ clean: rm -f $(objects) make -C source/server/rtld/ clean make -C $(workspace) clean depclean: rm -f source/bionic/lib*/*.o find source/bionic/ -name '*.a' -print0 | xargs -0 rm -f 2>/dev/null find source/bionic/ -name '*.so' -print0 | xargs -0 rm -f 2>/dev/null find . -name 'build.log' | xargs rm -f rm -f source/bionic/lib*/*.so really-clean: clean clean-ssl clean-pcap depclean distclean: really-clean .PHONY: clean clean-ssl clean-pcap really-clean debug