6.1 KiB
6.1 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
Overlord is an authorized red-team C2 (command & control) framework consisting of:
- Overlord-Server: TypeScript/Bun web server + REST API + WebSocket C2 (port 5173)
- Overlord-Client: Go agent deployed on target systems
- Overlord-Desktop: Tauri 2 fat client for operators (Rust backend + system webview)
- Plugin System: Native plugins (C, C++, Rust, Go) with optional server-side JS
HVNC, keylogging, screen/audio capture, and persistence mechanisms are intentional, authorized features.
Commands
Server (Overlord-Server) — runtime: Bun
cd Overlord-Server
bun run dev # Start with hot reload
bun run start # Run from src/index.ts
bun run build # Build + minify CSS + vendor assets
bun run build:prod:win # Compile Windows standalone executable
bun run build:prod:linux # Compile Linux standalone executable
bun run build:css # Compile Tailwind CSS
bun run watch:css # Watch CSS changes
bun test ./src # Run all tests (*.test.ts)
Client (Overlord-Client) — runtime: Go
cd Overlord-Client
go test ./... # Run all tests
go build ./cmd/agent # Build agent binary
Desktop (Overlord-Desktop) — runtime: Tauri 2 (Rust + system webview)
cd Overlord-Desktop
bun install
bun run vendor # one-time: copy Inter + Font Awesome into src/vendor/
bun run start # Dev: tauri dev
bun run build:win # Windows NSIS installer
bun run build:mac # macOS DMG
bun run build:linux # Linux AppImage
Output lands in Overlord-Desktop/src-tauri/target/release/bundle/.
Docker
# Linux (host networking)
docker compose up -d
docker compose up --build -d
# Windows/macOS Docker Desktop
docker compose -f docker-compose.windows.yml up -d
Agent & DLL Builds (from repo root)
./build-clients.sh # Cross-compile all agent targets
./build-hvnc-dll.sh # Build HVNC injection DLL (C++)
./build-hvnc-capture-dll.sh
./build-desktop.sh # Build Tauri desktop app
Dev helpers (from repo root)
./start-dev.sh # Start server (bg) + client (fg)
./generate-certs.sh # Generate self-signed TLS certs
Architecture
Communication Flow
Agent (Go) <--wss WebSocket--> Server (Bun/Node) <--HTTP/WS--> Web UI / Desktop (Tauri)
- Agent connects to
wss://server:5173/wsusing MsgPack-encodedWireMessage - Server fans out to operator web UI and Desktop app via separate WebSocket sessions
- REST API handles auth, builds, file downloads, plugin management
Server Subsystems (Overlord-Server/src/)
| File/Dir | Role |
|---|---|
index.ts → main-server.ts |
Entry: HTTP + WebSocket server init |
protocol.ts |
Wire protocol types (WireMessage, PluginManifest) |
db.ts |
SQLite operations (users, clients, builds, audit, files) |
auth.ts / rbac.ts |
JWT auth + role-based access (admin/user/viewer) |
wsHandlers.ts / wsValidation.ts |
Dispatch + validate incoming WS messages |
server/ws-console-rd-hvnc.ts |
Console / RDP / HVNC streaming |
server/ws-desktop-audio.ts |
Audio capture streaming |
server/ws-file-process-proxy-keylogger.ts |
File, process, keylog WS handlers |
server/build-process.ts |
On-demand agent compilation |
server/toolchain-manager.ts |
Downloads cross-compile toolchains (mingw, NDK, UPX, ldid) |
server/plugin-state-bundle.ts |
ZIP extraction + plugin loading |
server/plugin-runtime/ |
Isolated per-plugin Node.js VM with private SQLite |
server/auto-script-dispatch.ts |
Run scripts automatically on agent connection |
server/routes/ |
HTTP endpoint handlers (auth, build, client, plugin, file) |
Client Packages (Overlord-Client/cmd/agent/)
| Package | Role |
|---|---|
session.go |
Main runClient() loop, reconnect logic |
transport/ |
WebSocket client (nhooyr.io/websocket), auto-reconnect |
wire/ |
MsgPack encode/decode for WireMessage |
handlers/ |
File ops, process mgmt (Windows & Unix build tags) |
capture/ |
Screen & audio capture |
console/ |
Shell execution (cmd/bash/PowerShell via PTY) |
keylogger/ |
Keystroke capture |
plugins/ |
In-memory native plugin loader (PE loader / memfd / dylib) |
persistence/ |
Registry + startup folder persistence |
criticalproc/ |
Critical process protection (Windows) |
mutex/ |
Single-instance lock |
Plugin System
- Bundle: ZIP containing platform binaries (
<id>-{os}-{arch}.{so|dll|dylib}) + optional web assets + optionalserver.js - C ABI:
PluginOnLoad,PluginOnEvent,PluginOnUnload,PluginGetRuntime - Server-side JS (
server.js): runs in isolated Node.js VM per plugin; has private SQLite (plugin.db) and RPC bridge to host - See
plugins/PLUGINS.mdfor full plugin development guide
Desktop (Overlord-Desktop)
- Tauri 2 (Rust + system webview): much smaller binaries than Electron (~10 MB NSIS)
src-tauri/src/lib.rs: window management, connect/navigate IPC commands,on_new_windowhandler that turnswindow.opencalls from the web UI into native popup webviews (so cookies /SameSite=Strictauth inherit correctly)src/: local connect screen (HTML/CSS/JS) — once connected, the main window navigates to the remote Overlord UI- TLS: passes
--ignore-certificate-errorsto WebView2 on Windows for self-signed certs (macOS/Linux: issue a trusted cert) - Persists connection settings to the Tauri app-config dir (
%APPDATA%\com.overlord.desktop\connection.jsonon Windows)
Key Configuration
- Runtime env:
NODE_ENV=development|production(controls certbot, logging) - TLS: Auto-generates self-signed certs (
generate-certs.sh) or certbot/Let's Encrypt - Database: SQLite, persisted to
/app/data/in Docker - Docker networking: Linux uses host networking; Windows/macOS uses bridge
Go Monorepo
go.work / go.work.sum at repo root manages the Go workspace for Overlord-Client.
CI
.github/workflows/tests.yml runs bun test (server) and go test ./... (client) on PRs.