mirror of
https://github.com/lukaszraczylo/go-obfuscation.git
synced 2026-10-16 06:07:50 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user