Compilación desde código fuente
Clonar el repositorio
git clone https://github.com/sud0pls/JustC2.git
cd JustC2Compilar todo
El Makefile incluye un target que compila todos los componentes de una sola vez:
make allEsto ejecuta en orden: clean → prepare → server → client → extenders. Los binarios se generan en el directorio dist/.
Compilar componentes individuales
Servidor
make serverCompila 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ñoGOEXPERIMENT=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 personalizadaCliente
# Compilación normal
make client
# Compilación rápida (usa todos los cores)
make client-fastEl proceso de compilación del cliente:
- CMake configura el proyecto Qt6
- Se compilan las bibliotecas incluidas (Qlementine, KDDockWidgets, Konsole)
- Se compila el cliente principal
- El binario
JustClientse mueve adist/
Extenders
make extendersCompila 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-extEstructura 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-allSolució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-devError: “cannot find -lGL”
Instala las bibliotecas de desarrollo de OpenGL:
sudo apt install libgl1-mesa-devError al compilar extenders
Verifica que CGO_ENABLED=1 está disponible y que tienes GCC instalado:
go env CGO_ENABLED
gcc --version