2016-08-24 06:49:14 +00:00
|
|
|
GZIP ?= gzip
|
|
|
|
CC ?= gcc
|
|
|
|
|
|
|
|
CFLAGS := $(shell pkg-config --cflags python-2.7) -fPIC $(CFLAGS_EXTRA)
|
|
|
|
LDFLAGS := -pthread -ldl -fPIC $(LDFLAGS_EXTRA) -Wl,-Bstatic -lz -Wl,-Bdynamic
|
2016-08-23 16:48:10 +00:00
|
|
|
PIE ?= -pie
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
LIBPYTHON ?= $(shell ldconfig -p | awk '/libpython2.7.so/{print $$4}' | head -n 1)
|
|
|
|
|
|
|
|
ARCH ?= $(shell file $(LIBPYTHON) | grep 32-bit >/dev/null && echo 32 || echo 64)
|
|
|
|
ifeq ($(ARCH),64)
|
|
|
|
NAME := 64
|
2016-08-22 22:53:26 +00:00
|
|
|
else
|
2016-08-24 06:49:14 +00:00
|
|
|
NAME := 86
|
2016-08-22 22:53:26 +00:00
|
|
|
endif
|
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
LINUX_INJECT_CFLAGS := -include debug.h -include fixes.h -Dmain=linux_inject_main
|
2016-08-23 16:48:10 +00:00
|
|
|
|
2016-08-22 22:53:26 +00:00
|
|
|
ifneq ($(DEBUG),)
|
|
|
|
DEBUG_ADD := debug
|
|
|
|
CFLAGS += -DDEBUG -O0 -g
|
2016-08-28 11:29:02 +00:00
|
|
|
NAME := "$(NAME)d"
|
2016-08-22 22:53:26 +00:00
|
|
|
else
|
|
|
|
CFLAGS += -O2
|
2016-08-23 16:48:10 +00:00
|
|
|
LINUX_INJECT_CFLAGS += -Dprintf=dprint -Dfprintf=dfprint
|
2016-08-24 06:49:14 +00:00
|
|
|
LDFLAGS += -O1 -s
|
2016-08-23 16:48:10 +00:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
PYTHON ?= python
|
|
|
|
TEMPLATE_OUTPUT_PATH ?= ../../pupy/payload_templates/
|
|
|
|
|
|
|
|
PYOBJS := _memimporter.o Python-dynload.o pupy_load.o pupy.o
|
2016-08-24 06:49:14 +00:00
|
|
|
COMMON_OBJS := resources_bootloader_pyc.o resources_python27_so.o \
|
|
|
|
resources_library_compressed_string_txt.o list.o tmplibrary.o daemonize.o \
|
|
|
|
decompress.o
|
2016-08-23 16:48:10 +00:00
|
|
|
|
|
|
|
ifeq ($(ARCH),64)
|
|
|
|
COMMON_OBJS += linux-inject/inject-x86_64.o
|
|
|
|
else
|
|
|
|
COMMON_OBJS += linux-inject/inject-x86.o
|
2016-08-22 22:53:26 +00:00
|
|
|
endif
|
|
|
|
|
2016-08-23 16:48:10 +00:00
|
|
|
COMMON_OBJS += linux-inject/ptrace.o
|
|
|
|
COMMON_OBJS += linux-inject/utils.o
|
|
|
|
|
2016-08-24 17:18:48 +00:00
|
|
|
ZLIB := $(shell $(PYTHON) -c 'import zlib; print zlib.__file__ if "__file__" in zlib.__dict__ else "built-in"')
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2016-08-23 16:48:10 +00:00
|
|
|
ifneq ($(ZLIB),built-in)
|
|
|
|
COMMON_OBJS += resources_zlib_so.o
|
|
|
|
CFLAGS += -D_PYZLIB_DYNLOAD
|
2016-08-24 06:49:14 +00:00
|
|
|
endif
|
2016-08-23 16:48:10 +00:00
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
all: $(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).lin $(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).so
|
|
|
|
|
|
|
|
ifneq ($(ZLIB),built-in)
|
2016-08-23 16:48:10 +00:00
|
|
|
resources/zlib.so: $(ZLIB)
|
2016-08-24 06:49:14 +00:00
|
|
|
$(GZIP) -9 -c $< >$@
|
2016-08-23 16:48:10 +00:00
|
|
|
|
|
|
|
resources_zlib_so.c: gen_resource_header.py resources/zlib.so
|
|
|
|
$(PYTHON) $+
|
|
|
|
endif
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2016-08-23 16:48:10 +00:00
|
|
|
import-tab.c import-tab.h: mktab.py
|
|
|
|
$(PYTHON) $<
|
|
|
|
|
|
|
|
Python-dynload.o: Python-dynload.c import-tab.c import-tab.h
|
|
|
|
$(CC) -c -o $@ $< $(CFLAGS)
|
|
|
|
|
2016-08-22 22:53:26 +00:00
|
|
|
resources/library_compressed_string.txt: gen_library_compressed_string.py resources/library.zip
|
|
|
|
$(PYTHON) gen_library_compressed_string.py
|
|
|
|
|
|
|
|
resources_library_compressed_string_txt.c: gen_resource_header.py resources/library_compressed_string.txt resources/library.zip
|
|
|
|
$(PYTHON) gen_resource_header.py resources/library_compressed_string.txt
|
|
|
|
|
|
|
|
resources/bootloader.pyc: gen_python_bootloader.py ../../pupy/packages/all/pupyimporter.py ../../pupy/pp.py
|
|
|
|
$(PYTHON) gen_python_bootloader.py $(DEBUG_ADD)
|
|
|
|
|
|
|
|
resources_bootloader_pyc.c: gen_resource_header.py resources/bootloader.pyc
|
|
|
|
$(PYTHON) $+
|
|
|
|
|
2016-08-23 16:48:10 +00:00
|
|
|
linux-inject/%.o: linux-inject/%.c
|
|
|
|
$(CC) -c $(LINUX_INJECT_CFLAGS) $(CFLAGS) -o $@ $<
|
|
|
|
|
2016-08-22 22:53:26 +00:00
|
|
|
resources/python27.so: $(LIBPYTHON)
|
2016-08-24 06:49:14 +00:00
|
|
|
cp -vf $< $@.tmp
|
|
|
|
-strip $@.tmp
|
|
|
|
$(GZIP) -9 -c $@.tmp >$@
|
|
|
|
rm -f $@.tmp
|
2016-08-22 22:53:26 +00:00
|
|
|
|
|
|
|
resources/library.zip: build_library_zip.py additional_imports.py
|
|
|
|
$(PYTHON) $<
|
|
|
|
|
|
|
|
resources_python27_so.c: gen_resource_header.py resources/python27.so
|
|
|
|
$(PYTHON) $+
|
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
$(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).lin: main_exe.o $(PYOBJS) $(COMMON_OBJS)
|
2016-08-23 16:48:10 +00:00
|
|
|
$(CC) $(PIE) $+ -o $@ $(LDFLAGS)
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
$(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).so: main_so.o $(PYOBJS) $(COMMON_OBJS)
|
2016-08-22 22:53:26 +00:00
|
|
|
$(CC) -shared $+ -o $@ $(LDFLAGS)
|
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
.PHONY: clean all
|
2016-08-22 22:53:26 +00:00
|
|
|
|
|
|
|
clean:
|
|
|
|
rm -f *.o
|
|
|
|
rm -f *.pyc
|
|
|
|
rm -f pupy pupy.so
|
2016-08-23 16:48:10 +00:00
|
|
|
rm -f linux-inject/*.o
|
2016-08-22 22:53:26 +00:00
|
|
|
rm -f resources/library.zip
|
|
|
|
rm -f resources/*.so
|
|
|
|
rm -f resources/*.pyc resources/library_patches/*.pyc
|
|
|
|
rm -f resources/*.txt
|
2016-08-24 06:49:14 +00:00
|
|
|
rm -f resources_*.c
|
|
|
|
rm -f import-tab.c
|
|
|
|
rm -f import-tab.h
|
|
|
|
|
|
|
|
$(COMMON_OBJS) $(PYOBJS): import-tab.h
|
|
|
|
|