العودة إلى التحديثات
New releaseJul 26, 2026

emp3r0r v4.8.0

شبكة Gossip Mesh ذاتية الإصلاح لـ C2 مع اكتشاف الأقران المساعد، وتنفيذ BOF عبر الأنظمة الأساسية، وعوامل قابلة للبرمجة النصية.

مشاركة

emp3r0r

emp3r0r

Linux-first multi-operator C2 built to stay quiet and keep working. Self-healing mesh with assisted discovery, in-memory execution with encrypted storage, scriptable agents, cross-platform BOFs, SOCKS5 pivoting, and a modular C agent delivered by a sleep-masking stager.


Discord GitHub Sponsors

GitHub go.mod Go version Tests GitHub License GitHub release

emp3r0r-readme

What is emp3r0r?

emp3r0r started as a Linux post-exploitation framework with interactive remote shells and autonomous network pivoting. Over time it grew into a multi-operator C2 with modular agents, a P2P mesh, and in-memory execution on both Linux and Windows.

Features

Extensibility

Scriptable agents

Every agent has an embedded Starlark engine. A module can add post-exploitation logic without rebuilding the agent or uploading an interpreter. Scripts run inside the agent process and use built-in APIs for file I/O, HTTP, process execution, and other common work. They can also call Win32 functions and Linux syscalls through the agent's API proxy. When a script needs an API that is not already present, it can load a DLL or SO from encrypted memfs or the C2 with mem_load_library, call its exports, and unload it when done. Linux eBPF modules use the same path to load libbpf.

Modules are a Starlark file and a small JSON manifest. The agent loads them in memory and does not spawn Python, Bash, PowerShell, or another command interpreter. Compiled modules use the same in-memory delivery path but run native code.

Compiled modules

BOF, ELF, and PICO modules run in the agent process on both platforms:

  • Windows COFF/BOF objects with typed argument packing.
  • Linux ELF relocatable objects loaded from memory by the in-memory loader.
  • Crystal-Kit PICO modules with SilentMoonwalk call stack spoofing.

The repository ships Kerbeus-BOF, Remote-OPs, and a Situational Awareness suite. Running a BOF does not start another process or write the object to disk. On Windows, modules can run under a borrowed access token.

Linux modules and eBPF

Linux modules are Starlark scripts with access to the kernel through libbpf. The agent maps libbpf when a module needs it and exposes its API as Go-backed builtins. This uses the same on-demand loader that mem_load_library exposes; libbpf is just another shared object the module asks for. A script can enumerate BPF objects, attach programs, manage maps and links, and start or stop uprobes.

ssh_harvest is the worked example. It finds a pattern in sshd, attaches a long-lived uprobe, streams captured credentials, and keeps the probe running until --disable. It uses no ptrace, breakpoints, or temporary files.

The loader can map any .so a module declares or supplies, including raw bytes provided by the script.

In-memory operation

In-memory library loader

memmod maps shared libraries into the agent's address space and calls their exports in place. On Windows it loads PE DLLs. On Linux it loads ELF .so files and applies relocations, imports, and symbol lookups without LoadLibrary or dlopen.

The PE side follows WireGuard's memmod. The ELF side follows Sliver and sliverarmory/reflektor. memdeps sits on top: a module declares a dependency, the agent gets it from encrypted memory storage or the C2, maps it for one operation, then unmaps it.

Starlark modules can use the same loader directly with mem_load_library. They are not limited to APIs that are already loaded in the agent or target process.

Encrypted memory storage

Agent file operations use an in-memory AES-GCM encrypted filesystem. Large files spill to disk only as encrypted blobs with no identifying headers. Agents that take part in the P2P mesh cache files in this filesystem and share them with peers.

C2 communication

Agent identity

The first successful check-in pins the agent's public key and signed UUID. Later check-ins must use the same identity. A different key or signature is rejected instead of quietly replacing the old agent. Removing an agent is an operator decision.

C2 and peer connections use ephemeral ECDH keys for each session. A compromised long-term key cannot decrypt traffic from earlier sessions.

Listeners and transport

The C2 supports HTTP, TCP, and UDP listeners. Agents can use beacon-style HTTP polling, streaming HTTP/2, or a QUIC UDP channel. HTTP/2 and QUIC are build-time options (with_h2conn, with_quic). QUIC obfuscates datagrams with a per-build key by default. The --quic-standard-key flag disables that and speaks stock QUIC.

HTTP polling uses a malleable request profile from the C2 config. TLS fingerprints can be randomized with uTLS. Behind an ECH-capable CDN, --doh and --ech hide the inner SNI from the ClientHello. Control messages use CBOR rather than JSON.

Delivery

Stager and sleep masking

The Linux stager talks to the kernel through direct syscalls, needs no libc on the target, and keeps transports and packers pluggable: HTTP, TCP, UDP, libcurl, or libssl for delivery, and RC4 or LZSS for packing. It can fetch the C agent at runtime or embed its PIC with --agent-pic, leaving the downloader and listener configuration out of the artifact.

The agent's sleep mask lives in the stager. While it sleeps, the stager flips the agent's executable pages to non-executable and encrypts the agent images, heap, and stack. No anonymous executable mapping is left behind, and executable mappings return only when the agent wakes and runs. Everything the mask covers is encrypted, and the provider is pluggable, so a custom implementation can replace the default XOR scheme.

C agent

The C agent is deliberately thin: a C2 beacon with no built-in features. It implements only file I/O, network I/O, and dynload helpers that resolve code already present on the host. Everything else arrives as BOF modules, and even the BOF loader is a dependency module mapped from memory at run time instead of being linked in.

Operators generate it with generate_c:

generate_c --type glibc --arch amd64 --cc your.domain.com
generate_c --type glibc --arch amd64 --cc your.domain.com \
  --interval 60 --jitter 50 --poll-window 5 --offline-grace 0

Network movement

P2P mesh

الفئات