This repository contains a pair of extenders (Agent and Listener) for the Adaptix C2 Framework. They implement Cobalt Strike's Malleable HTTP spec and DLL initialization routine (basically its compatible with most CobaltStrike UDRLs, Crystal Palace stuff etc, you're welcome)
Agent functionality is identical to the default Adaptix C beacon. This repo is just a PoC of the Malleable spec support.
Adaptix default C beacon resolves WinAPIs dynamically via function hashes. If you want to use IAT or GetProcAddress based hooks, select the "GetProcAddress" or "Standard Import" function resolution settings during agent generation.
DON'T USE THIS AS IS IN LIVE ENGAGEMENTS!!
- No OPSEC was added to the default Adaptix C beacon - good news, it supports UDRLs! Add it yourself.
- Adaptix default beacon uses poor encryption standards in transit (hardcoded key). You should probably implement secure E2EE before using it commercially lol.
To build the plugins and compile the agent, you need:
- Go Compiler: Go version (use the same version as your AdaptixServer)
- Cross Compiler:
x86_64-w64-mingw32-g++andi686-w64-mingw32-g++(MinGW-w64). or just use the docker lol
-
Build the Builder Container:
docker build -t open-malleable-builder . -
Run Compilation: Mount the source code directory into the builder container and call
make:docker run --rm -v "$(pwd)":/build open-malleable-builder make
To deploy the compiled extenders into your Adaptix C2 Server setup:
-
Import extenders: Ensure
dist/outputs are copied into theserver-dist/extendersdirectory of your C2 server path:mkdir -p /path/to/AdaptixServer/server-dist/extenders/open_malleable_listener mkdir -p /path/to/AdaptixServer/server-dist/extenders/open_malleable_agent # Copy Listener Plugin cp -r open_malleable_listener/dist/* /path/to/AdaptixServer/server-dist/extenders/open_malleable_listener/ # Copy Agent Plugin cp -r open_malleable_agent/dist/* /path/to/AdaptixServer/server-dist/extenders/open_malleable_agent/
-
Reload/Restart Adaptix Server: Restart the
AdaptixServerservice (or restart the docker runtime container if running containerized): -
Verify In GUI: Check that the "OpenMalleable" protocol is available in the Adaptix listener creation dialog.
- Raising beacons without UDRLs and teaching them how to sleep - Cobalt Strike Beacon init routine
- Adaptix Framework
- Shamelessly plugging my own OpenMalleableC2 project that I used for this
- An assortment of clankers
something something educational purposes something something please dont start a nuclear war with this piece of poorly written (mostly AI slop) code. Thx.