Clonar el repositorio

git clone https://github.com/sud0pls/JustC2.git
cd JustC2

Compilar todo

El Makefile incluye un target que compila todos los componentes de una sola vez:

make all

Esto ejecuta en orden: cleanprepareserverclientextenders. Los binarios se generan en el directorio dist/.

Compilar componentes individuales

Servidor

make server

Compila el servidor Go con las siguientes flags de optimización:

  • -buildvcs=false — No incluye información de control de versiones
  • -ldflags="-s -w" — Strip de símbolos y debug info para reducir tamaño
  • GOEXPERIMENT=jsonv2,greenteagc — Habilita el nuevo parser JSON y GC experimental

El binario justserver se genera en dist/ junto con los archivos auxiliares:

dist/
├── justserver          # Binario del servidor
├── ssl_gen.sh          # Script de generación de certificados
├── profile.yaml        # Configuración por defecto
└── 404page.html        # Página de error personalizada

Cliente

# Compilación normal
make client

# Compilación rápida (usa todos los cores)
make client-fast

El proceso de compilación del cliente:

  1. CMake configura el proyecto Qt6
  2. Se compilan las bibliotecas incluidas (Qlementine, KDDockWidgets, Konsole)
  3. Se compila el cliente principal
  4. El binario JustClient se mueve a dist/

Extenders

make extenders

Compila todos los extenders encontrados en JustServer/extenders/. Cada extender que contenga un Makefile propio se compila automáticamente. Los resultados se organizan en:

dist/extenders/
├── beacon_agent/
│   ├── agent_beacon.so
│   ├── ax_config.axs
│   ├── config.yaml
│   └── src_beacon/          # Código fuente para compilación runtime
├── beacon_listener_http/
│   ├── listener_beacon_http.so
│   ├── ax_config.axs
│   └── config.yaml
├── beacon_listener_tcp/
├── beacon_listener_smb/
├── beacon_listener_dns/
├── gopher_agent/
│   ├── agent_gopher.so
│   ├── ax_config.axs
│   ├── config.yaml
│   └── src_gopher/          # Código fuente para compilación runtime
└── gopher_listener_tcp/

Servidor + Extenders (sin cliente)

Para despliegues en VPS donde no se necesita el cliente gráfico:

make server-ext

Estructura final de dist/

Después de make all, el directorio dist/ queda así:

dist/
├── justserver
├── JustClient
├── ssl_gen.sh
├── profile.yaml
├── 404page.html
└── extenders/
    ├── beacon_agent/
    ├── beacon_listener_http/
    ├── beacon_listener_tcp/
    ├── beacon_listener_smb/
    ├── beacon_listener_dns/
    ├── gopher_agent/
    └── gopher_listener_tcp/

Limpieza

# Eliminar directorio dist/
make clean

# Eliminar todos los artefactos de compilación (.o, .so, .a, logs)
make clean-all

Solución de problemas

Error: “go: version X does not match go.mod”

Asegúrate de que Go 1.26.5+ es la versión del sistema:

go version
# Debe mostrar: go version go1.26.5 linux/amd64 (o superior)

Error: CMake no encuentra Qt6

Instala los paquetes de desarrollo de Qt6:

sudo apt install qt6-base-dev qt6-websockets-dev qt6-5compat-dev

Error: “cannot find -lGL”

Instala las bibliotecas de desarrollo de OpenGL:

sudo apt install libgl1-mesa-dev

Error al compilar extenders

Verifica que CGO_ENABLED=1 está disponible y que tienes GCC instalado:

go env CGO_ENABLED
gcc --version