mirror of
https://github.com/lukaszraczylo/go-obfuscation.git
synced 2026-10-12 05:32:33 +00:00
116 lines
4.0 KiB
Makefile
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)
|