Files
go-obfuscation/cmd/transformer/main.go
T
2026-05-31 11:23:07 +01:00

85 lines
2.8 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"path/filepath"
"time"
"github.com/self-evolving-research/obfuscator/internal/transform"
)
func main() {
srcDir := flag.String("src", "", "Source directory to transform")
dstDir := flag.String("dst", "", "Destination directory for transformed source")
encryptStrings := flag.Bool("strings", true, "Encrypt string literals")
opaquePreds := flag.Bool("opaque", true, "Inject opaque predicates")
deadCode := flag.Bool("deadcode", true, "Inject dead code")
randomize := flag.Bool("randomize", true, "Randomize declaration order")
indirectDispatch := flag.Bool("indirect", true, "Indirect function dispatch")
bogusCFG := flag.Bool("bogus-cfg", true, "Bogus control-flow injection")
flatten := flag.Bool("flatten", true, "Control-flow flattening")
seed := flag.Int64("seed", 0, "Build seed for polymorphic output (0 = use current timestamp)")
injectBuildID := flag.Bool("buildid", true, "Inject unique build ID constant")
virtualizeVM := flag.Bool("vm", true, "Virtualize simple functions into VM bytecode")
antiDisasm := flag.Bool("anti-disasm", true, "Inject anti-disassembly patterns")
junkStrings := flag.Bool("junk-strings", true, "Inject junk string constants")
flag.Parse()
if *srcDir == "" || *dstDir == "" {
fmt.Fprintf(os.Stderr, "Usage: transformer -src <dir> -dst <dir>\n")
flag.PrintDefaults()
os.Exit(1)
}
if *seed == 0 {
*seed = time.Now().UnixNano()
}
absSrc, err := filepath.Abs(*srcDir)
if err != nil {
fmt.Fprintf(os.Stderr, "Invalid src path: %v\n", err)
os.Exit(1)
}
absDst, err := filepath.Abs(*dstDir)
if err != nil {
fmt.Fprintf(os.Stderr, "Invalid dst path: %v\n", err)
os.Exit(1)
}
config := transform.Config{
EncryptStrings: *encryptStrings,
InjectOpaquePreds: *opaquePreds,
InjectDeadCode: *deadCode,
RandomizeOrder: *randomize,
IndirectDispatch: *indirectDispatch,
BogusControlFlow: *bogusCFG,
FlattenControl: *flatten,
BuildSeed: *seed,
InjectBuildID: *injectBuildID,
VirtualizeFunctions: *virtualizeVM,
AntiDisassembly: *antiDisasm,
JunkStrings: *junkStrings,
}
t := transform.New(config)
fmt.Printf("[transformer] src=%s dst=%s\n", absSrc, absDst)
fmt.Printf("[transformer] seed=%d buildid=%v\n", config.BuildSeed, config.InjectBuildID)
fmt.Printf("[transformer] strings=%v opaque=%v deadcode=%v bogus=%v flatten=%v vm=%v antidisasm=%v junkstr=%v\n",
config.EncryptStrings, config.InjectOpaquePreds,
config.InjectDeadCode, config.BogusControlFlow, config.FlattenControl,
config.VirtualizeFunctions, config.AntiDisassembly, config.JunkStrings)
start := time.Now()
if err := t.TransformDir(absSrc, absDst); err != nil {
fmt.Fprintf(os.Stderr, "Transform failed: %v\n", err)
os.Exit(1)
}
fmt.Printf("[transformer] done in %v\n", time.Since(start))
}