Files
go-obfuscation/Makefile
T
2026-05-31 01:09:34 +01:00

116 lines
4.0 KiB
Makefile

APP_NAME := demoapp
SRC_DIR := cmd/demoapp
BUILD_DIR := build
OBFUSCATED := $(BUILD_DIR)/obfuscated
BINARY := $(BUILD_DIR)/$(APP_NAME)
BINARY_NORMAL := $(BUILD_DIR)/$(APP_NAME)-normal
BINARY_GARBLE := $(BUILD_DIR)/$(APP_NAME)-garbled
SEED := $(shell date +%s%N)
GARBLE := $(shell go env GOPATH)/bin/garble
.PHONY: all clean normal obfuscated compare transformer help run run-normal
help:
@echo "Targets:"
@echo " make obfuscated - Full pipeline: transform + garble + integrity"
@echo " make normal - Build normal binary for comparison"
@echo " make compare - Build both and compare"
@echo " make transformer - Build only the transformer tool"
@echo " make run - Run the obfuscated binary"
@echo " make run-normal - Run the normal binary"
@echo " make clean - Remove build artifacts"
all: obfuscated
transformer:
@echo "=== Building transformer ==="
go build -buildvcs=false -o $(BUILD_DIR)/transformer ./cmd/transformer
obfuscated: transformer
@echo ""
@echo "=== Stage 1: AST Transformation ==="
@rm -rf $(OBFUSCATED)
$(BUILD_DIR)/transformer -src $(SRC_DIR) -dst $(OBFUSCATED)/$(APP_NAME) -seed=$(SEED)
@echo ""
@echo "=== Stage 2: Garble compilation ==="
@mkdir -p $(BUILD_DIR)
$(GARBLE) -literals -tiny build \
-buildvcs=false \
-trimpath \
-ldflags="-s -w -buildid=" \
-o $(BINARY_GARBLE) \
./$(OBFUSCATED)/$(APP_NAME)
@echo ""
@echo "=== Stage 3: Compute integrity hash ==="
@$$(go env GOPATH)/bin/garble version >/dev/null 2>&1 || true
@HASH=$$(go run -buildvcs=false ./cmd/inthash $(BINARY_GARBLE) 2>/dev/null); \
if [ -n "$$HASH" ]; then \
echo "Integrity hash: $$HASH"; \
else \
echo "Note: integrity hash tool not built (run 'make inthash' first)"; \
fi
@echo ""
@echo "=== Stage 4: Analysis ==="
@echo "Size: $$(wc -c < $(BINARY_GARBLE) | tr -d ' ') bytes"
@echo "Symbols: $$(nm $(BINARY_GARBLE) 2>/dev/null | wc -l | tr -d ' ')"
@echo "Readable strings: $$(strings $(BINARY_GARBLE) | wc -l | tr -d ' ')"
@echo ""
@echo "=== Secret leakage scan ==="
@for s in "sk-proj-FAKE" "super-secret" "P@ssw0rd" "jwt-signing" "LIC-XXXX" "postgres://"; do \
count=$$(strings $(BINARY_GARBLE) | grep -c "$$s" || true); \
if [ "$$count" != "0" ]; then \
echo " LEAKED: $$s"; \
else \
echo " clean: $$s"; \
fi; \
done
@echo ""
@echo "=== Anti-analysis check ==="
@echo "Function names visible:"
@nm $(BINARY_GARBLE) 2>/dev/null | grep -c "main\." || echo " 0 (good)"
@echo ""
@echo "=== Done. Binary: $(BINARY_GARBLE) ==="
inthash:
@echo "=== Building integrity hash tool ==="
go build -buildvcs=false -o $(BUILD_DIR)/inthash ./cmd/inthash
normal:
@echo "=== Building normal (unobfuscated) binary ==="
@mkdir -p $(BUILD_DIR)
go build -buildvcs=false -o $(BINARY_NORMAL) ./$(SRC_DIR)
@echo "Size: $$(wc -c < $(BINARY_NORMAL) | tr -d ' ') bytes"
@echo "Symbols: $$(nm $(BINARY_NORMAL) 2>/dev/null | wc -l | tr -d ' ')"
@echo "Readable strings: $$(strings $(BINARY_NORMAL) | wc -l | tr -d ' ')"
@echo ""
@echo "=== Secret leakage scan ==="
@for s in "sk-proj-FAKE" "super-secret" "P@ssw0rd" "jwt-signing" "LIC-XXXX" "postgres://"; do \
count=$$(strings $(BINARY_NORMAL) | grep -c "$$s" || true); \
if [ "$$count" != "0" ]; then \
echo " LEAKED: $$s"; \
else \
echo " clean: $$s"; \
fi; \
done
compare: normal obfuscated
@echo ""
@echo "========================================="
@echo " COMPARISON SUMMARY"
@echo "========================================="
@echo " Normal Obfuscated"
@echo "Size: $$(wc -c < $(BINARY_NORMAL) | tr -d ' ') $$(wc -c < $(BINARY_GARBLE) | tr -d ' ')"
@echo "Symbols: $$(nm $(BINARY_NORMAL) 2>/dev/null | wc -l | tr -d ' ') $$(nm $(BINARY_GARBLE) 2>/dev/null | wc -l | tr -d ' ')"
@echo "Strings: $$(strings $(BINARY_NORMAL) | wc -l | tr -d ' ') $$(strings $(BINARY_GARBLE) | wc -l | tr -d ' ')"
@echo "========================================="
run: obfuscated
@$(BINARY_GARBLE)
run-normal: normal
@$(BINARY_NORMAL)
clean:
rm -rf $(BUILD_DIR)